WidgetKit
概要
WidgetKitを使用すると、アプリのコンテンツがアプリ外のコンテキストで利用可能になります。一目で内容がわかる最新のユーザー体験のエコシステムを構築して、アプリのリーチを拡大できます。
WidgetKitで構築できるエコシステムは、以下の要素で構成されます。
- ウィジェット
-
ウィジェットは、アプリからのパーソナライズされたタイムリーな情報をコンパクトに取り込み、ユーザーが一目でチェックできる場所に表示します。ユーザーはこれにより、特定のアプリ機能をアプリを起動せずに利用できます。iPhoneやiPadでは、ウィジェットは「今日」の表示、ホーム画面、ロック画面に配置できます。Macでは、ネイティブのMacアプリウィジェットをデスクトップや通知センターに配置できます。また、iOS 17およびmacOS 14以降では、iPhoneウィジェットをMacのデスクトップと通知センターに配置することもできます。Apple Watchでは、ウィジェットはスマートスタックに表示されます。
- スマートスタック
-
iPhoneでは、ウィジェットを重ねてスマートスタックを作成できます。スマートスタックでは、WidgetKitはスマートローテーションのためのApp Intentフレームワークにより提供されるオンデバイスのインテリジェンスと機能を使用します。スマートローテーションは、ユーザーの現在のコンテキストに合うウィジェットをスタックの一番上に表示します。Apple Watchでは、ユーザーはウィジェットをスマートスタックに配置して固定できます。また、ユーザーのコンテキストに合わせて自動で並べ替えるようシステムを設定することもできます。
- Watchコンプリケーション
-
Apple Watchの文字盤にWatchコンプリケーションを配置すると、手首を離したとき、その時々に応じたタイムリーな情報が表示されます。さらに、Apple Watchのスマートスタックには最大3つのコンプリケーションを配置できるスペースがあります。
- ライブアクティビティ
-
ライブアクティビティは、ロック画面やDynamic Islandにイベントやタスク情報などのアプリからの最新コンテンツを表示します。ライブアクティビティは更新にActivityKitを使用します。また必要に応じて、Apple Push Notification Service(APNs)を使用してActivityKitプッシュ通知を送信します。詳細については、「ActivityKit」をご参照ください。
- コントロール
-
コントロールを使用すると、ユーザーはコントロールセンター、ロック画面、アクションボタンからアプリのアクションを実行できます。ボタンやトグルとして機能するコントロールを作成でき、たとえばボタンでアプリのアクションを実行したり、アプリを特定のビューで開いたりできるほか、トグルでライトのオン/オフを切り替えたり、ガレージのドアを開閉したりできます。
注
visionOSは、互換性のあるiPadおよびiPhoneアプリのWidgetKit拡張機能をロードできません。
一目で内容がわかる機能を反復的に開発する
WidgetKitにより実現される機能はiPad、iPhone、Mac、Apple Watchで利用できますが、各ユーザーのデバイスやニーズに最も適した形でのみ提供されます。たとえばウィジェットは、すべてのプラットフォームにおいてさまざまなサイズのものがWidgetKitによりサポートされます。一方ライブアクティビティとコントロールは、iPhoneとiPadでのみサポートされます。
WidgetKitが提供するすべての機能をすべてのプラットフォームやデバイスで利用できるわけではありませんが、ウィジェット、ライブアクティビティ、コントロール、Watchコンプリケーションの間にはテクノロジーとデザインの面で共通点があります。そのため、複数の機能を並行して開発し、さまざまなコンテキストに対応できるよう用途を拡大しやすくなっています。
反復的アプローチを使用して、1つの機能のサポートから始めるか、ウィジェットのサイズを選択して開発を開始しましょう。たとえば、「Widget Extensionの作成」の記載に従って小さなウィジェットから始めることができますが、開始の時点から、複数のプラットフォーム向けの追加のサイズと機能を計画、設計しておきます。そうしておけば、開発が進むにつれて、できるだけ多くのコンテキストでユーザーがコンテンツを表示することができます。詳細については、「WidgetKit戦略の策定」をご参照ください。
インタラクティブ性とパーソナライゼーションを理解する
WidgetKitエコシステムにより、ユーザーはアプリのコンテンツを新しいコンテキストで表示して、必要に応じた最適な場所およびタイミングでアプリとの特定のインタラクションを行うことができます。
-
ウィジェット、Watchコンプリケーション、またはライブアクティビティをタップすると、対応するアプリや、関連する情報や機能を提供するアプリのシーンが起動します。たとえば、Emoji RangerのウィジェットやWatchコンプリケーションをタップすると、表示されているヒーローに関連するアプリのシーンが起動します。
-
ユーザーは、ウィジェット、コントロール、ライブアクティビティのボタンやトグルを使用して、アプリを起動せずに操作できます。たとえば、「Emoji Rangers:ライブアクティビティ、インタラクティブ機能、アニメーションのサポート」のサンプルコードプロジェクトの大きなウィジェットには、タップするとヒーローの回復能力を一時的に強化できるボタンがあります。
ウィジェット、Watchコンプリケーション、ライブアクティビティ、コントロールは、関連する情報や特定のインタラクティブ機能を一目で確認できるだけでなく、デバイスのパーソナライゼーションにも使用できます。
-
ユーザーはウィジェットやWatchコンプリケーションを設定することで、自身のニーズに合った詳細情報を表示できます。たとえば、「Emoji Rangers:ライブアクティビティ、インタラクティブ機能、アニメーションのサポート」のサンプルコードプロジェクトのウィジェットでは、ウィジェットに表示されるヒーローを設定できます。
-
ユーザーは自身にとって最適な方法でウィジェットやWatchコンプリケーションを配置できます。ユーザーがiPhoneやiPadでウィジェットをスタックしてスマートローテーションを有効にすると、WidgetKitは最も関連性のあるウィジェットをスタックの一番上に自動的に配置して、ユーザーが適切なタイミングで最も重要な詳細情報を確認できるようにします。Apple Watchのスマートスタックでは、ウィジェットのデフォルト表示位置がありますが、ユーザーがウィジェットをスマートスタックの固定位置に配置することもできます。
タイムラインを使用してコンテンツを更新する
ウィジェットとWatchコンプリケーションのコンテンツの更新には、デベロッパがデータ更新のタイムラインを作成してWidgetKitに渡す、特別なメカニズムを使用します。WidgetKitはタイムラインを受け取ると、エネルギー効率の高い方法でウィジェットやコンプリケーションのコンテンツが更新されるよう調整します。タイムラインの詳細については、「ウィジェットを最新の状態に維持」をご参照ください。
ライブアクティビティはコンテンツの更新にタイムラインを使用しません。代わりに、ActivityKitを使用してコンテンツを更新し、Apple Push Notification Service(APNs)を使用してActivityKitプッシュ通知を送信します。詳細については、「ActivityKit」をご参照ください。
コントロールはコンテンツの更新にタイムラインを使用しません。代わりに、ユーザーがコントロールを使用したり、アプリがコントロールを再読み込みしたり、システムがApple Push Notification Service(APNs)からリモートプッシュ通知を受信したりしたときにコンテンツを更新します。
焦点を絞り、一目で確認できるデザインの作成
ウィジェット、Watchコンプリケーション、ライブアクティビティ、コントロールは、焦点を絞り、一目で確認できるコンパクトなデザインにする必要があります。デザインのガイダンスについては、ヒューマンインターフェイスガイドラインのウィジェット、コンプリケーション、ライブアクティビティ、およびコントロールをご参照ください。
トピック
@MainActor @preconcurrency protocol Widget
@MainActor @preconcurrency protocol WidgetBundle
struct StaticConfiguration
enum WidgetFamily
struct WidgetRenderingMode
struct WidgetAccentedRenderingMode
Image
がaccented
モードのウィジェットに表示される際のレンダリングモードを指定するための定数です。struct AccessoryWidgetBackground
struct WidgetLocation
struct AppIntentConfiguration
struct WidgetInfo
struct AppIntentRecommendation
struct IntentConfiguration
struct IntentRecommendation
protocol TimelineProvider
protocol IntentTimelineProvider
struct TimelineProviderContext
protocol TimelineEntry
struct Timeline
class WidgetCenter
protocol AppIntentTimelineProvider
struct TimelineEntryRelevance
struct WidgetPreviewContext
struct ActivityConfiguration
struct DynamicIsland
let NSUserActivityTypeLiveActivity : String
enum ActivityPreviewViewKind
enum ActivityFamily
struct ControlWidgetToggle
struct ControlWidgetButton
class ControlCenter
protocol ControlValueProvider
protocol AppIntentControlValueProvider
struct StaticControlConfiguration
struct AppIntentControlConfiguration
struct ControlInfo
protocol ControlPushHandler
struct ControlPushInfo
struct AccessoryWidgetGroup
struct AccessoryWidgetGroupStyle
AccessoryWidgetGroup
ビューのスタイルを示します。struct ControlWidgetButtonDefaultActionLabel
ControlWidgetButton
のアクションラベルが指定されていない場合に使用されるデフォルトのアクションラベルを表すビューです。struct ControlWidgetToggleDefaultLabel
ControlWidgetToggle
のラベルが指定されていない場合に使用されるデフォルトのラベルを表すビューです。struct WidgetRelevance
struct WidgetRelevanceAttribute
macro Preview<Widget, Provider>(String?, as: WidgetFamily , using: Provider.Intent, widget: () -> Widget, timelineProvider : () -> Provider)
macro Preview<Widget, Provider>(String?, as: WidgetFamily , using: Provider.Intent, widget: () -> Widget, timelineProvider : () -> Provider)