WWDC26:Discover new capabilities in the App Intents framework

App Intents に関する2026年のアップデートについて。実装未経験で未知の領域なのだが、アプリコンテンツをシステムが既知のデータ型として与えることが可能になったことでアプリ内の連携がより密になったり、システムによるアプリコンテンツの提案をよりユーザーのコンテクストベースで行えるようになったり、さらに Siri がデバイスまたいで会話継続できるようになったりで、よりアプリのコンテンツがアプリの箱から飛び出して生活に偏在できるようになった感がある。

Discover new capabilities in the App Intents framework


0:00 – Introduction

  • App Intents フレームワークの 2026 年アップデート概要
  • Siri、Shortcuts、Spotlight、Widgets、Apple Intelligence にわたる制御・柔軟性・開発体験の向上

2:40 – Share entities across apps with ValueRepresentation

  • ValueRepresentation でアプリのエンティティをシステムが理解できる構造化型に変換して共有
    • エンティティ自体が Transferable に準拠していれば、エンティティの情報を ValueRepresentation でシステムの理解する構造体に変換して transferRepresentation として返すだけ
    • 例:ランドマークを GeoToolbox.PlaceDescriptor として書き出し、Maps でナビゲーション可能にする
  • エンティティにすでに対応プロパティがある場合はキーパスで簡潔に記述可能
    • ValueRepresentation(exporting: \.placeDescriptor)

3:45 – Register relevant entities with RelevantEntities

  • システムに自アプリのコンテンツを登録する方法
    • 1. Spotlight にインデックスする:Siriで検索取得させたい場合
    • 2. インタラクションドネーション(IntentDonationManager API):Siriとシステムにユーザーの使い方を学習させたい場合(繰り返しアクション)
      • → システムがパターンを学習し将来提案するようになる
    • 3. 未知のコンテンツの場合は? Spotlight にインデクスされていないし、インタラクションもまだドネートされていない → ReleavantEntities でシステムにヒントを与える
  • RelevantEntities API で「いつ、なぜ」のコンテキスト付きでエンティティを提案
    • 例:ワークアウト開始時に再生中プレイリストを提案
  • updateEntities(_:for:) でコンテキスト付きエンティティを登録
  • コンテキスト・エンティティ・全体の 3 段階での削除 API が用意されている

7:05 – Handle entities efficiently with EntityCollection

  • 大規模なエンティティセットを効率的に扱うための EntityCollection
  • パラメータ型を [PhotoEntity] から EntityCollection に変更するだけ
    • perform() 内では photos.identifiers を使うことでフル解決を回避
    • 1000 枚の写真のタグ付けがほぼ瞬時に完了するほどのパフォーマンス改善

8:55 – Use entities across devices with SyncableEntity

  • OS 27 から Siri デバイスを跨いで会話を継続でき、エンティティも共有可能に
    • エンティティにはIDが採番されシステムはこれを鍵に特定するが、ローカル生成されたものかもしれない(ローカルID) → デバイス共通のIDが必要(安定ID) → SyncableEntity プロトコル
  • エンティティの ID がデバイスをまたいで安定している場合はプロトコル準拠を宣言するだけ
  • ローカル ID と安定 ID が異なる場合は SyncableEntityIdentifier でペアリング
    • サーバー UUID や Cloud Kit レコード ID などが安定 ID の典型例

11:01 – Richer parameter types

  • DurationPersonNameComponents のネイティブサポートが追加
    • Siri、Shortcuts、Widgets でピッカー UI とローカライズが自動的に機能

12:38 – Union value parameters

  • @UnionValue 列挙型により 1 つのパラメータが複数の型を受け付けられるようになる
    • 例:ランドマークコレクションまたはフォトアルバムのどちらかを受け取るパラメータ
  • 各ケースの表示名を caseDisplayRepresentations で定義すると自動的にピッカーが生成される

13:26 – Extend execution with LongRunningIntent

  • LongRunningIntent で 30 秒の実行制限を超える処理が可能になる(e.g. アプリを開かずにウィジェット経由で大きな画像をアップロード)
  • performBackgroundTask ブロック内で progress を更新すると Live Activity として進捗を表示
  • CancellableIntent を組み合わせるとキャンセル処理(クリーンアップ)も実装可能
  • バックグラウンドでの GPU アクセスもサポート

15:27 – Target the right process with ExecutionTargets

  • allowedExecutionTargets でインテントの実行先プロセスを明示的に指定可能
    • .main:書き込み操作など、メインアプリが必要な場合
    • .appIntentsExtension:スタンドアロンのダウンロードなど、エクステンションで完結する場合
    • .widgetKitExtension:表示専用の読み取り操作
    • 複数指定でシステムに選択を委ねることも可能

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です