Live Activity の実装について。
0:01 – Introduction
- ライブアクティビティは進行中のタスクやイベントについてユーザーを常に最新状態に保つ
- 表示場所:ロック画面・ダイナミックアイランド・Apple Watch・CarPlay ダッシュボード
- 時間経過とともに変化する情報をリアルタイムに表示
1:53 – Create and update
- 最初のステップは優れたデザインを考えること
- 長期的に知る必要がある重要な情報を優先し、ひと目で分かるように
- 効率的なデータモデルの定義(静的なデータと動的なデータとを分けて考える)
ActivityAttributes:静的データ(変わらない情報 e.g. 店の名前や注文したドリンク)ActivityAttributes.ContentState:動的データ(変化する情報 e.g. 注文ステータスや残り時間)
- ビューの構築
- widge extension を追加、
ActivityConfigurationでビューを構築 - 各表示形式に合わせた UI の構築
- ロック画面用のアクティビティビューを実装
DynamicIsland:expanded・compactLeading・compactTrailing・minimalの 4 形式DynamicIslandExpandedRegion(.leading/.trailing/.bottom)で Dyanmic Island 周囲の各領域のビューを実装
- widge extension を追加、
- ライフサイクル管理
- ローカル:ActivityKit の
Activity.request(attributes:content:)で任意のタイミングか事前にスケジュールし開始(最も簡単) - リモート:Broadcast update or プッシュ通知で更新
- Broadcast updates は大多数のユーザーが同じアクティビティを同時に受ける場合に有効
- ローカル:ActivityKit の
Activity.update(_:)でContentStateを更新staleDateでいつ古くなるかを指定可能
9:51 – Optimize
- iOS 27では、compact / minimal ビューは画面縦横向きの両方で表示可能
- 縦向きでは幅を柔軟に調整できるが、横向きでは広げる余地がない
- 特定の制約に対するレイアウトの適応
- 横向き時のダイナミックアイランドで幅が制限される場合への対応
\.isDynamicIslandLimitedInWidth環境変数で判定
- StandBy での背景色拡張(edge-to-edge)
\.showsWidgetContainerBackground環境変数を使ってactivityBackgroundTintを適用
- 横向き時のダイナミックアイランドで幅が制限される場合への対応
- Apple Watch 対応:activityFamily .small の採用
.supplementalActivityFamilies([.small])をActivityConfigurationに追加\.activityFamily環境変数で small か否かを判定し、専用のSmallViewに切り替え
- App Intents を使ったインタラクティビティの追加
- Activity 上のボタンタップで、システムは対応するインテントを実行
LiveActivityIntentプロトコルに準拠した Intent を定義Button(intent:)でライブアクティビティ内のボタンに紐付け- ライブアクティビティ内から直接アクションを実行可能に