【iOS】App Intentsでアプリのショートカットを作成する
App Intentsはユーザーのインタラクションを簡略化し、特定のタスクや操作を実行するショートカットです。App Intentsフレームワークを使用することで、数行のSwiftコードを記述するだけでアプリのIntent
を作成することができます。App IntentsフレームワークはWWDC2022で発表されましたが、App Intentsフレームワークが登場する前はIntentdefinition
ファイルに必要なメタデータを入力し、Intent
を定義する必要がありました。この工程がSwiftコードに置き換わることにより、コードレビューやマージ後のコンフリクト解消が容易になり、Intent
のメンテナンス性を向上させることできます。
本記事では、最初にApp IntentsフレームワークでIntent
を作成し、Intent
をAppショートカットに設定するための最小実装方法を説明します。続けて最小実装コードをベースにIntent
機能を拡張していきます。
本記事をお読みいただくことで、アプリにApp Intentsを搭載し、アプリを起動しなくてもアプリの特定の機能を実行することができるようになります。
Intentの作成
Intent
はAppIntent
プロトコルに準拠した構造体で定義します。
AppIntent プロトコル
AppIntent
はIntent
を作成するためのインタフェースが定義されているプロトコルです。AppIntent
プロトコルに準拠するためには title
プロパティとperform()
メソッドを定義する必要があります。ショートカットのタイトルはtitle
プロパティに定義し、Intent
実行時に行いたい処理をperform()
メソッド内に定義します。Intent
実行時にアプリを起動したい時はopenAppWhenRun
プロパティをtrue
にします。 openAppWhenRun
プロパティの定義は任意ですが、デフォルトはfalse
です。
ショートカットの追加
作成したIntent
をSpotlightやショートカットAppで表示させるために、AppShortcutsProvider
プロトコルに準拠した構造体を定義します。
AppShortcutsProvider プロトコル
AppShortcutsProvider
はAppインストール時にショートカットを作成するためのインタフェースが定義されているプロトコルです。AppShortcut
のintent
プロパティには実行したいIntent
を指定し、phrases
プロパティにSiriを経由してショートカットを実行するためのフレーズを指定します。また、shortcutTileColor
プロパティにカラーを指定することで、ショートカットAppに表示するショートカットアイコンボタンのカラーを変更することができます。
AppIntent
、AppShortcutsProvider
各プロトコルに準拠した構造体を定義するだけで、Appのショートカットを作成することができました。次章以降ではIntent
機能を拡張する方法を説明します。
ショートカット実行結果の表示
ダイアログ
IntentResult
オブジェクトのdialog
引数に文字列を指定することで、実行結果をダイアログで表示することができます。
カスタムView
IntentResult
オブジェクトのview
引数にカスタムViewを指定することで、
ショートカットの実行結果をカスタムViewで表示することができます。
パラメータの追加
Intent
にあらかじめ用意したパラメータを設定できるようにします。以下のサンプルコードではショートカットで開きたい教科書の科目情報をパラメータとして設定しています。
AppEnum
プロトコルに準拠したEnum
の各要素がショートカットのパラメータとなります。AppIntent
オブジェクト側では、パラメータは@Parameter
プロパティラッパーで宣言され、title
引数に指定した文字列はパラメータの初期表示として表示されます。
AppEnum プロトコル
AppEnum
はショートカットに設定する変数を作成するためのインタフェースが定義されているプロトコルです。typeDisplayRepresentation
プロパティはAppEnum
の名称、caseDisplayRepresentations
プロパティに定義した辞書配列の値は、ショートカットのパラメータ名として表示されます。
パラメータサマリ
AppIntent
オブジェクトのparameterSummary
プロパティを定義することで、パラメータをショートカットのサマリーに埋め込むことができます。
所感
Swiftコードのみでショートカットを作成することができ、Appにショートカットを導入する敷居がグッと下がったように感じました。
参考資料
Dive into App Intents
Implement App Shortcuts with App Intents
Discussion