🛠️

【iOS】App IntentsでAppショートカットを作成する

2022/11/02に公開

WWDC2022でApp Intentsフレームワークが紹介されました。App Intentsフレームワークを使用することで、数行のSwiftコードでAppのIntent を作成することができます。App Intentsフレームワークが登場する前は、Intentdefinition ファイルに必要なメタデータを入力し、Intent を定義する必要がありました。この工程がSwiftコードに置き換わることにより、コードレビューやマージ後のコンフリクト解消が行いやすくなり、Intent のメンテナンス性を向上させることが期待できます。
本記事では最初にApp IntentsフレームワークでIntent を作成し、Intent をAppショートカットに設定するための最小実装方法を説明します。続けて最小実装コードをベースにIntent 機能を拡張していきます。

Intentの作成

IntentAppIntent プロトコルに準拠した構造体で定義します。

AppIntent プロトコル

AppIntentIntent を作成するためのインタフェースが定義されているプロトコルです。AppIntent プロトコルに準拠するためには title プロパティとperform() メソッドを定義する必要があります。ショートカットのタイトルはtitle プロパティに定義し、Intent 実行時に行いたい処理をperform() メソッド内に定義します。Intent 実行時にアプリを起動したい時はopenAppWhenRun プロパティをtrue にします。 openAppWhenRun プロパティの定義は任意ですが、デフォルトはfalse です。

ショートカットの追加

作成したIntent をSpotlightやショートカットAppで表示させるために、AppShortcutsProvider プロトコルに準拠した構造体を定義します。

AppShortcutsProvider プロトコル

AppShortcutsProvider はAppインストール時にショートカットを作成するためのインタフェースが定義されているプロトコルです。AppShortcutintent プロパティには実行したいIntentを指定し、phrases プロパティにSiriを経由してショートカットを実行するためのフレーズを指定します。また、shortcutTileColor プロパティにカラーを指定することで、ショートカットAppに表示するショートカットアイコンボタンのカラーを変更することができます。

AppIntentAppShortcutsProvider 各プロトコルに準拠した構造体を定義するだけで、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
https://developer.apple.com/videos/play/wwdc2022/10032/
Implement App Shortcuts with App Intents
https://developer.apple.com/videos/play/wwdc2022/10170/

Discussion