「Get to know App Intent 」つながりで。AI要約してもらったが、要約されすぎて動画の内容が網羅されてなかったのと、そもそも App Intent 自体に全然馴染みなかったので理解追いつかず、追加で詳解してもらった(Result/Confirmation snippets の更新手順まわり)。なので正しいかわからないが個人的には腑に落ちた。
0:00 – Introduction
- App Intentsは、アプリの機能をショートカット、Spotlight、Visual Intelligenceなどに統合するためのフレームワーク
- 本セッションでは、インタラクティブスニペット、新しいシステム統合、ユーザー体験の改善、便利なAPIなど、App Intentsの最新の進化について解説
0:55 – Interactive snippets
- App Intentの結果や確認画面を、インタラクティブなUI(スニペット)として表示できる新機能
- 冒頭のスライドでは、Control Center 上のボタンからアクションし、その場で Interactive snippets を表示している
- Snippet Intentプロトコルに準拠し、パラメータとアプリの状態に基づいてビューをレンダリング
- スニペット内のボタンやトグルに既存のApp Intentを関連付け、ユーザー操作に応じてアプリの状態を更新し、スニペットを再描画できる
- Result Snippet の更新手順
- 最初の app intent が実行され、その結果として、どの情報を表示するかのテンプレート(Parameterized Result Snippet Intent)を返す
- 次にシステムが、先ほどのテンプレートに具体的なデータ(パラメータ)を埋め込む。例えば「最も近いランドマーク」の情報を、クエリを通じて取得、設定する
- データが設定されたインテントが perform メソッドを実行し、最終的にユーザーが見るUI(SwiftUI view)を描画する
- 描画されたビュー内のボタンやトグルには、他の app intent が関連付けられている。ユーザーがこれらをタップすると、新しいアクションが実行され、スニペットが更新される、というサイクルが生じる
- Confirmation Snippet の更新手順
- Result Snippet上のボタンをユーザーがタップすると、関連付けられた intent が実行される
- ↑の intent は、最終的なアクションをすぐに実行するのではなく、
requestConfirmation
を呼び出して、確認用の新しいスニペット(Parameterized Confirmation Snippet Intent)を返す - この Confirmation Snippet の表示以降は Result Snippet と同じ手順
- ユーザーが最終的な確認ボタン(「検索開始」など)をタップすると、
requestConfirmation
が完了し、リクエスト元の inten 処理が再開される(チケット検索などの本来の処理)
- システムは、snippet が表示されている限りアプリを終了しないため、メモリやデータベースに状態を保持しようとする必要はない
8:15 – New system integrations
- Image Search: カメラやスクリーンショットからの画像検索結果に、アプリのコンテンツを表示可能に。
IntentValueQuery
に準拠し、SemanticContentDescriptor
を入力としてエンティティを返すクエリを実装。- さらに検索結果を見たい場合にアプリに遷移する導線の実装:
semanticContentSearch
schema @UnionValues
- 従来、1つのクエリは1つの型のエンティティしか返せなかった
- 「この写真に関連するランドマークと、そのランドマークが含まれるコレクションの両方を同時に表示したい」というニーズが実現できなかった
UnionValues
により、1つのクエリで複数の型を返せる
- さらに検索結果を見たい場合にアプリに遷移する導線の実装:
- Onscreen Entities:
NSUserActivity
を使い、画面上のコンテンツにエンティティを関連付けることで、SiriやChatGPT (にスクリーンショットを送ることで) がそのコンテンツについて応答できるようになる。Transferable
でPDFなどのデータ形式も提供可能。 - Spotlight: MacのSpotlightから直接アクションを実行可能に。
IndexedEntity
やPredictableIntent
を活用し、検索候補の精度や関連性を向上。
15:01 – User experience refinements
UndoableIntent
: App Intentで実行したアクションを、標準の「取り消し」ジェスチャーで元に戻せるようになるプロトコル。- Multiple-choice API: 複数の選択肢を提示し、ユーザーに選ばせるUIを簡単に実装可能。requestChoiceメソッドで選択肢を提示し、結果に応じて処理を分岐。
- Supported Modes:
background
foreground
(immediate/dynamic/deferred
)などのモードをサポートし、Siriからの実行時やアプリ内での実行時で、Intentの振る舞い(UI表示の有無など)を動的に制御。
21:02 – Convenience APIs
- View Control APIs: UIナビゲーションのロジックを Intent から分離し、SwiftUI ビュー側で
onAppIntentExecution
モディファイアを使ってハンドリング。コードの関心を分離し、見通しを良くする。 ComputedProperty
: App Entity のプロパティを、値をコピーするのではなく、元のデータソースから直接算出できるマクロ。DeferredProperty
: App Entity のプロパティの値を、必要になるまで(例:ショートカットアプリで表示されるまで)非同期で遅延取得できるマクロ。高コストな処理を効率化。