【iOS】App Intents 入門
App Intentsはユーザーのインタラクションを簡略化し、特定の処理や操作を実行するオブジェクトです。App Intentsフレームワークを使用することで、数行のSwiftコードを記述するだけでアプリのApp Intentを作成することができます。App IntentsフレームワークはWWDC2022で発表された後に、年々進化を遂げ、現在ではウィジェットやライブアクティビティといった様々なシーンで活用されるようになりました。
本記事では、これからApp Intentsフレームワークを学び始める方に向けて、App Intent開発の基本的な内容について解説します。
本記事を最後までお読みいただくことで、アプリにApp Intentを搭載し、アプリを起動しなくてもアプリの特定の機能を実行することができるようになります。また、App Intentを活用することでインタラクティブなウィジェットやライブアクティビティを開発することができるようになります。
App Intent
App Intentはユーザーのインタラクションを簡略化し、特定のタスクや操作を実行するためのものです。作成したApp Intentは、ショートカットアプリやアクションボタン経由で実行することができます。
App Intentの作成
まずは何も処理を実行しないシンプルなApp Intentを作成してみます。App IntentはAppIntent
プロトコルに準拠した構造体で定義します。
AppIntent プロトコル
AppIntent
はApp Intentを作成するためのインタフェースが定義されているプロトコルです。AppIntent
プロトコルに準拠するためには、title
とperform()
を定義します。iOSにプリインストールされているショートカットアプリで、App Intentをショートカットとして登録すると、title
に代入した文字列がショートカット名になります。perform()
にはApp Intent実行時に行いたい処理を記述します。
App Intentの実行
ショートカットアプリ経由でApp Intentを実行します。
App Intentをショートカットアプリ経由で実行することができました。 title
に代入したSimple Intent
がショートカット名に表示され、ショートカットを実行しても、何も処理が行われないことも確認することができます。
App Intent実行時にアプリを起動する
App Intentを実行した後に、App Intentに紐づいたアプリを起動することができます。AppIntent
プロトコルに準拠した構造体の中でopenAppWhenRun
を宣言し、true
を代入します。
App Shortcut
App ShortcutはApp Intentをショートカットとして定義したものです。先ほどは、ショートカットアプリを使用して、App Intentをショートカットとしてシステムに登録しましたが、App Shortcutはアプリをインストールした時点で、ショートカットとしてシステムに登録されます。
App Shortcutの作成
まずは何も処理を実行しないシンプルなApp Shortcutを作成してみます。App ShortcutはAppShortcutsProvider
プロトコルに準拠した構造体で定義します。
AppShortcutsProvider プロトコル
AppShortcutsProvider
はApp Shortcutを作成するためのインタフェースが定義されているプロトコルです。AppShortcutsProvider
プロトコルに準拠するためには、appShortcuts
を定義します。appShortcuts
には、AppShortcut
型インスタンスの配列を指定します。
AppShortcut
AppShortcut
はショートカットを定義するための構造体です。init(intent:phrases:shortTitle:systemImageName:)
で生成することができます。intent
にはショートカットで実行したいApp Intentを指定します。phrases
にはSiri経由でショートカットを実行する時のフレーズを文字列の配列で指定します。shortTitle
にはショートカットで表示するタイトルを文字列を指定します。systemImageName
にはショートカットで表示するシステム画像名を指定します。
App Shortcutの実行
AppShortcut
を定義したXcodeプロジェクトをビルドして、アプリを端末にインストールした後、ショートカットがシステムに登録されていることを確認します。
アプリを端末にインストールした時点で、ショートカットがシステムに登録されていることを確認できました。また、一部の端末機種ではショートカットをアクションボタンに登録できます。
App Intentの実行結果
AppIntent
プロトコルに準拠したオブジェクトのperform()
が実行された後に、IntentResult
プロトコルに準拠したオブジェクトがシステムに返されます。
IntentResult プロトコル
IntentResult
はApp Intentの実行結果をシステムに返すために必要なインタフェースが定義されているプロトコルです。App Intentを実行した結果の値をシステムに渡すことで、後続のショートカットで渡した値を使用することができます。また、IntentResult
プロトコルの静的メソッドを使用することで、perform()
が実行された後に、ダイアログやカスタムViewを表示することができます。
result(value:)
IntentResult
のresult(value:)
で、value
に指定した値をシステムに返すことができます。システムに返した値は、後続のショートカットで使用することができます。
App Intentを実行した後、システムにT型の値を返す時は、perform() の返り値の型に**some ReturnsValue<T>
** を記述する必要があります。システムに返したvalue
は、引き続きシステム側で利用することができます。例えば、以下のショートカットではRandomNumerIntent
がシステムに返した値が1
の時、天気アプリを表示しています。
result(value:dialog:)
IntentResult
のresult(value:dialog:)
で、App Intentを実行した後にダイアログを表示することができます。
result(value:dialog:)
のvalue
にはシステムに返す値を指定し、dialog
にはIntentDialog
オブジェクトを指定します。上記のコードでは、"Show Dialog Intent"という文字列を表示するダイアログを表示しています。
App Intentを実行した後にダイアログを表示する時は、perform()
の返り値の型に**ProvidesDialog
** を記述する必要があります。上記のコードのように、App Intentを実行した後にダイアログを表示し、T型の値を返す時は**some ReturnsValue<T> & ProvidesDialog
** と記述します。
以下のショートカットではShowDialogAppIntent
を実行した後に、返り値がSuccess
の時、天気アプリを表示しています。
result(value:dialog:content:)
IntentResult
のresult(value:dialog:content:)
で、App Intentを実行した後にカスタムViewを表示することができます。
App Intentを実行した後にカスタムViewを表示する時は、perform()
の返り値の型に**ShowsSnippetView
** を記述する必要があります。上記のコードのように、App Intentを実行した後にダイアログとカスタムViewを表示し、T型の値を返す時は**some ReturnsValue<T> & ProvidesDialog & ShowsSnippetView
** と記述します。
App Intentのパラメータ
事前にApp Intentに入力するためのパラメータを定義しておくことで、App Intentにパラメータを入力することができます。
App Intent入力用パラメータ
AppEnum
プロトコルに準拠したEnum
を定義することで、App Intent入力用のパラメータを作成することができます。
AppEnum プロトコル
AppEnum
はApp Intentに入力するパラメータを作成するためのインタフェースが定義されているプロトコルです。App Intentをショートカットとしてシステムに登録する時、ショートカット経由でApp Intentにパラメータを入力することができます。
AppEnum
プロトコルに準拠したEnum
の各要素がApp Intentに入力するパラメータとなります。typeDisplayRepresentation
はAppEnum
の名称、caseDisplayRepresentations
は各入力パラメータとそれに対応する表示名の文字列を、辞書形式で渡しています。
App Intentにパラメータを入力する時は、App Intent側では@Parameter
プロパティラッパーを付与した変数を用意します。@Parameter
プロパティラッパーのtitle
引数に指定した文字列は、ショートカットアプリでパラメータ入力項目として表示されます。
パラメータサマリ
AppIntent
にparameterSummary
を定義することで、パラメータをショートカットのサマリーに埋め込むことができます。
本記事では、App Intentsフレームワークを使用していくつかのApp Intentを作成しながら、App Intent開発の基本的な内容について解説しました。App Intentは年々使用できるシーンが拡大しており、WWDC2024では「Apple Intelligence」が発表され、App Intentsフレームワークに関する理解が必要不可欠になっています。参考資料に記載しているApp Intentsフレームワークについてのセッション動画をご視聴いただき、ぜひApp Intentsフレームワークに対する理解を深めてみてください。
参考資料
・App Intentでアプリのコア機能をユーザーに提供 - WWDC2024
・App Intentの新機能 - WWDC2024 ・Dive into App Intents - WWDC2022 ・Implement App Shortcuts with App Intents - WWDC2022
Discussion