見出し画像

自転車乗りiOS開発者が『自転車NAVITIME』でiOS 16.1の新機能公開初日にアプリを対応した話

こんにちは、日本縦断チャリダーです。
ナビタイムジャパンで『自転車NAVITIME』アプリの開発、運営を担当しています。
今回はiOS 16.1より提供が開始された『ライブアクティビティ』および『Dynamic Island』機能を、iOS 16.1公開初日にリリースした経験を元に、開発者としてだけでなく自転車乗りの立場から本機能の追加を進めたことついてお話ししたいと思います。

『自転車NAVITIME』アプリで追加した『ライブアクティビティ』および『Dynamic Island』への対応について

『自転車NAVITIME』アプリは、自転車での移動に特化したナビゲーションアプリです。2022年10月にナビゲーション中の情報を「ライブアクティビティ」「Dynamic Island」という2つのiOSの新機能に対応することで、バックグラウンドで表示する機能の追加を行いました。

ライブアクティビティ

ロック画面上でアクティブに情報を更新していくような動作はiOSでは初となっており、iOS 16.0にて登場したロック画面ウィジェット(complication)よりも頻繁な情報更新を想定したUIとなっています。

『自転車NAVITIME』アプリでは、目的地までのナビゲーション中にアプリをバックグラウンドにすることでこの『ライブアクティビティ』がロック画面あるいは通知センターに表示されます。
アプリのテーマカラーである青色をベースに、直近の交差点やそこまでの距離、目的地までの距離や到着予想時刻といったナビゲーション中の情報を表示しており、デフォルトでおよそ1秒ごとに情報を更新しています。

Dynamic Island

Dynamic Islandとは、iPhone 14 ProおよびiPhone 14 Pro Maxの端末で登場した、従来の端末のノッチに代わり登場した黒色ベースの表示が可能な領域で、長押しで大/中/小サイズの変更ができます。

『自転車NAVITIME』アプリでの大サイズでの表示物は前述の『ライブアクティビティ』と同じになりますが、Apple公式の実装ガイドラインに合わせ黒色ベースでの表示にし、また端末のカメラ位置に合わせたレイアウトの微調整も行なっています。
中サイズや小サイズでは直近の交差点の情報に絞った最小限の情報を表示しており、バックグラウンドで『自転車NAVITIME』アプリを利用しているシーンでも他のアプリの表示を阻害しないようにしています。

『ライブアクティビティ』および『Dynamic Island』への対応をiOS 16.1公開初日にリリースした背景

「ナビはしたいがバックグラウンドにしておきたい」という需要

元々『自転車NAVITIME』アプリでは、ナビゲーション中のバッテリー消費を気にするユーザの意見が多く上がっていました。運転中、常に給電しながら利用されることも多いカーナビアプリや、一度に長時間の利用を行わない乗換案内アプリと比べ、『自転車NAVITIME』アプリを利用するサイクリストは利用シーンの前後で多くのバッテリーを消費しているケースが目立ちます。また、電池消費を気にして画面をロックしてナビゲーション画面を表示せずに、バックグラウンドで音声案内のみで利用する場合、次の曲がり角までどのくらいか気になった時に画面ロックを解除するステップが生まれます。
このため、信号待ちのような一瞬の時間でも簡単に情報を知れるように、走行中にすぐに確認可能な場所にナビゲーションに必要な情報を集約して表示できないか、と以前よりプロジェクトメンバー間で話題に上がっていました。

また、世の中にはサイクルコンピュータと呼ばれる走行中の速度や距離を計測できるデバイスがありますが、中にはGPSを搭載した、矢印表示や地図表示によるナビゲーションを行えるモデルも多くあります(そうしたデバイスは電池消耗も少なく画面を常時表示していることがほとんど)。そうしたデバイスの進化と比べても走行中にナビゲーション情報をインスタントに知ることができるのはもはや自転車向けナビゲーションアプリの必須要件だと、一人の自転車乗りとしても感じていました。

iOS 16.1公開初日にリリースした背景

これらの事情を抱えた中で、AppleからiOS 16以降で『ライブアクティビティ』および『Dynamic Island』が登場すること、またiPhone 14 Pro、iPhone 14 Pro Maxで常時表示ディスプレイが登場することが発表され、自転車でのナビゲーションとの親和性が高いのではと考え、対応に至りました。
また、「ナビはしたいがバックグラウンドにしておきたい」という需要は深刻かつ、『ライブアクティビティ』および『Dynamic Island』を利用した新しい価値をいち早く届けたいという想いから、iOS 16.1の公開初日をリリース日としました。

開発中に行き詰まったこと

開発環境/実装対象が明確でない状況下での開発

iOSアプリはXcodeを利用して開発するのが一般的です。
新OSが一般公開されるまでの間、新OSに対応したアプリを開発するためには、新OSに対応したβ版のXcodeを利用する必要があります。

そうした新しいバージョンでの実装例で公開されているものはほとんどなく、実際に手を動かしてみないと分からないといった状態だったため、最初から『自転車NAVITIME』アプリでライブアクティビティの実装をするのではなく、Xcodeでまっさらなアプリを新規作成して、ライブアクティビティ上で現在時刻を表示し続けるような簡単な実装をして「最低限の実装をするために必要な使い方」を理解する、といった仮実装から始めました。

また、利用するXcodeはあくまでβ版ですので、開発中にβ版のアップデートによる仕様変更もあったり、ドキュメントに記載されている範囲外のことが分からず、つまずくこともありました。

例えば、開発途中あるときからうまくライブアクティビティが動作せず、Appleのドキュメントを見ていると以下のような記述が該当しそうでした。

The updated dynamic data for both ActivityKit updates and ActivityKit push notifications can’t exceed 4KB in size.

https://developer.apple.com/documentation/activitykit/displaying-live-data-with-live-activities

つまり、ActivityKit、ライブアクティビティやDynamic Islandで表示する情報とアプリから発せられるリモートPushの両者の更新データの合計は4KBを超えることはできません、といった内容になりますが、筆者はこの4KBが具体的に何を指すものなのか分かりませんでした。
そこで原因の切り分けのため、矢印画像の解像度を下げたり、カスタムフォントを使用しないように変更してみた結果、再度動作するようになりました。
例えば「○○m先」のような数字の内部的な更新のサイズではなく、画像やカスタムフォントなどの更新対象の描画データ全てのサイズが影響していることが分かったのです。

その後もApple公式のDeveloper Forumや質問サイトで同時に開発している他の開発者から情報を集めたり、Appleの方との直接のやりとりで少しずつ仕様を把握してなんとか開発を続けられました。


仕様が決まりきっていない中での開発

新OSの公開前の開発を行うということは、当たり前ですが他のアプリでの実装例がない中での開発になるということになります。
一般的にはメンバー全体で仕様の検討・確定をした上で、デザイナーに表現方法の作り込みを依頼してからそれに合わせた開発工数や検証工数を見積もって、それらを組み合わせて最終的なリリーススケジュールを決める開発を行なっています。
しかしながら、今回は前述の仮実装を行なった上で実現可能な表現をデザイナーと相談し、また新OSの公開日から検証工数を逆算して開発時間を確保する、といったフローで開発を進めていきました。
また仕様が決まりきっていない中での開発だったため、プロダクトレビューを不定期に行い、プロダクトメンバー全員を集めて中間成果物を見せて挙がった改善点を元に、仕様の修正とともに開発を並行して進めていきました。

例えば元々、冒頭で紹介したライブアクティビティの表示に比べ、情報量が多く文字が小さいものを当初の仕様としておりました。しかし、端末をスマホホルダーにマウントしてナビゲーションを行うケースが多い『自転車NAVITIME』アプリでは、文字が小さいとユーザーが走行中に画面を注視してしまい事故のきっかけとなってしまうのではないかといった懸念がメンバーから挙がったため、当初よりも見やすさを重視し、かつ走行中に見てもらいたい情報に絞って表示するように開発中に仕様を変更しました。
また、プロダクトレビューでの第三者からのフィードバックだけでなく、市場のGPS搭載サイクルコンピュータの矢印案内の仕様も参考にしました。

ついにリリース

このような過程を経て、『自転車NAVITIME』アプリの『ライブアクティビティ』および『Dynamic Island』への対応は、予定通り2022年10月25日のiOS 16.1リリース初日にリリースを行うことができ、同月28日のプレスリリース発出後、各種メディアにも掲載いただきました。
また、社内のiOSの勉強会でもその知見を共有し、開発者として知識の整理を行う機会も作れました。

終わりに

普段『自転車NAVITIME』アプリでは、ユーザーからのご意見や要望に合わせた開発や当社の戦略に基づいた機能開発、その時々で見つかった不具合の改修などをメインに行っていますが、今回のように端末やOSの進化に合わせた新機能の搭載も行なっています。これからも自転車乗りの方のサイクリングのお供として使っていただけるよう努めて参りますので、よろしくお願いいたします。

自転車NAVITIMEの公式Twitterアカウント(@navitimebicycle)では新機能のリリースやお知らせなどを更新しています。是非こちらもご覧くださいませ。

最後までお読みいただきありがとうございました。