はじめに
この連載は各記事がWWDC22からそれぞれ別のトピックを取り上げてWWDC22の振り返りを行う企画です。WWDCはAppleが提供するOSやサービスの最新情報をキャッチアップする良い機会ですが、そのコンテンツの量や大きさにはボリュームがあります。この記事ではiPhoneのロック画面、iPadのデスクトップ級の機能およびパスキーに絞ってご紹介するので、これらの要点を知りたい方はぜひ読んでみてください。
「Live Activities」の登場
Live ActivitiesはiPhoneのロック画面に表示される新しい機能です。スポーツ試合の中継情報(図1)やタクシーが到着するまでの時間(図2)などのライブ情報を表示することができます。この機能を利用するとアプリ内で時時刻刻と変化する情報をiPhoneのロックを解除することなく確認できます。体験としては音楽や動画の再生中に進捗確認と操作をロック画面で行える既存の機能と近いと思われます。
つまり、今までは音楽や動画再生などの一部の機能しかライブ情報をロック画面で表示できなかったのが、今回のアップデートによって全てのアプリの機能で表示できるようになったと捉えることもできそうです。


Live Activityの実装は非常にシンプルな印象を持ちました。まずロック画面に表示するUIは下記のようにWidgetとして実装します。図3のコードは、Timerアプリの残り時間を表示するLive Activityを想定しています。通常のWidgetと異なりActivityConfigurationメソッドの引数にSwiftUIのViewを構築することによって、見た目を決定することができます。
なお、アプリから送られてくる残り時間の情報はコード中のcontext変数に該当する変数から取得することができます。

アプリからLive Activityにライブ情報を渡し更新するには下記のように、Activityのインスタンスを作成し、そのインスタンスに対してLive Activityの開始や更新を命令します。UI側の表示に用いるライブ情報の状態はActivityAttributesに準拠した型を作って表現します。それをActivityのインスタンスに渡すことによってライブ情報の開始や更新が行えます。
下記のコードの例では、タイマーの残り秒数を状態として持っているTimerAttributesを生成し、Live Activityの開始や更新を行うメソッドに渡しています。下記のコードではActivityの終了を行っていませんが、終了を行わない場合は最大12時間ほどロック画面にLive Activityが残り続けるので注意が必要です。
このあたりのLive Activitiesの表示・非表示の制御は開発者側の責任であるうえ、誤った制御を行うとロック画面というよく目にする画面に不具合が発生するため、実装するうえでの勘所になりそうだと感じました。

なお、iOS 16の最初のリリースにはLive Activitiesは含まれない予定です。