
iOSでライブアクティビティ(Live Activities)を実装したい時に必要になるのが ActivityAttributes です。
Dynamic Island やロック画面上に、進捗や状態をリアルタイムで表示したい場面で使われ、ユーザーの体験を大きく高める仕組みです。
この記事では ActivityAttributes の基本的な意味や使い方、主要な引数、活用シーン、注意点までをわかりやすく丁寧に解説します。
ActivityAttributes とは?
ActivityAttributes は、ライブアクティビティの表示に必要なデータ構造を定義するためのプロトコルです。
例えば、デリバリーアプリなら、「配達状況」「到着予定時刻」「配達員の名前」などの情報をユーザーにリアルタイムで表示したい時に、この ActivityAttributes を用いてデータを管理します。
構造としては、以下のように ActivityAttributes プロトコルに準拠した struct を定義し、その中に ContentState という構造体で動的に更新される値を定義します。
具体例:料理の配達状況を表示する
以下の例では、料理の配達状況をライブアクティビティで表示するための ActivityAttributes を定義しています。
|
1 2 3 4 5 6 7 8 9 10 |
import ActivityKit struct DeliveryAttributes: ActivityAttributes { public struct ContentState: Codable, Hashable { var estimatedDeliveryTime: Date } var orderNumber: String } |
この例では、以下のような設計になっています。
DeliveryAttributes:ライブアクティビティ全体を定義する構造体ContentState:アクティビティ中に変化する動的な値(例:到着予定時刻)orderNumber:アクティビティ開始時に設定し、その後は変化しない静的な値
このように、状態の変化を明示的に分けて管理できるのが大きな特徴です。
主要な構造とプロパティ
ActivityAttributes を使う際の基本的な構造は以下の通りです。
| 項目 | 説明 |
|---|---|
| ライブアクティビティ全体を定義する構造体 | ライブアクティビティの基礎構造を定義する。 この構造体は固定の名前ではなく、開発者が自由に命名した構造体を指します(例: DeliveryAttributes、WorkoutAttributes など)。これは必ず ActivityAttributes プロトコルに準拠する必要があります。 |
| ContentState サブ構造体 | 表示中に変更される動的な状態(位置・進捗・時刻など)を定義する。 通常は ActivityAttributes 構造体の中にネストして書かれる。 |
| 静的プロパティ | アクティビティ開始時に設定し、その後は変化しない属性(IDやユーザー名など)を定義する。 |
このように 「静的プロパティ」と「動的プロパティ(ContentState)」を分離する設計にすることで、SwiftUI の View や Widget が状態の変化を適切に反映しやすくなっています。
活用シーン
ActivityAttributes を利用したライブアクティビティは、以下のような場面で特に効果を発揮します。
- フードデリバリーの進捗表示(到着時間のカウントダウンなど)
- 配車アプリでの車の到着予測
- タイマーアプリでの残り時間表示
- スポーツ速報アプリでのスコアや試合時間の表示
- タスクの進捗や完了までの残りステップの提示
特に Dynamic Island やロック画面に自然に馴染む表示ができるため、通知よりも継続的なフィードバックが求められる場面に最適です。
Activityの起動と更新方法(概要)
ActivityAttributes を定義した後は、以下のような流れでライブアクティビティを操作します。
- 起動(start)
Activity.request(attributes:contentState)で開始します。 - 更新(update)
アクティビティ中の状態を更新するには、Activity.update(using:)を使います。 - 終了(end)
Activity.end(dismissalPolicy:)でアクティビティを終了できます。
これらの操作により、ロック画面や Dynamic Island にリアルタイムで情報を反映できます。
注意点と前提条件
ActivityAttributes を利用するためには、いくつかの前提条件や注意点があります。
- iOS 16.1 以降が必要(Dynamic Island は iPhone 14 Pro以降)
ActivityKitをimportする必要があるContentStateとActivityAttributes本体はともにCodable & Hashableに準拠させる- Live Activities は Info.plist で有効化が必要(
Supports Live Activities= YES) - Widget Extension の中で表示内容(UI)を定義する必要がある
また、ライブアクティビティはデフォルトで一定時間で自動終了するため、定期的に状態更新を行う設計も検討しましょう。
まとめ
今回は Swift の ActivityAttributes について詳しく解説しました。
ActivityAttributesは Live Activities 用のデータ構造ContentStateでリアルタイムに変化する情報を管理- 状態と属性を分離することで、UIと連携しやすい設計が可能
- 配達・配車・タイマーなどの進行状況を可視化する場面に活用
- iOS 16.1 以降で利用可能、Widgetと連携して表示を構築
ユーザー体験をよりリッチにしたいアプリでは、ライブアクティビティとともにこの ActivityAttributes の理解が欠かせません。
アプリにリアルタイム性を持たせたい場面で、ぜひ活用してみてくださいね!

