🚀

【iOS】App Intents 入門

2024/07/15に公開


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 プロトコルに準拠するためには、titleperform() を定義します。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:)

IntentResultresult(value:) で、value に指定した値をシステムに返すことができます。システムに返した値は、後続のショートカットで使用することができます。

App Intentを実行した後、システムにT型の値を返す時は、perform() の返り値の型に**some ReturnsValue<T>** を記述する必要があります。システムに返したvalue は、引き続きシステム側で利用することができます。例えば、以下のショートカットではRandomNumerIntent がシステムに返した値が1 の時、天気アプリを表示しています。

result(value:dialog:)

IntentResultresult(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:)

IntentResultresult(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に入力するパラメータとなります。typeDisplayRepresentationAppEnum の名称、caseDisplayRepresentations は各入力パラメータとそれに対応する表示名の文字列を、辞書形式で渡しています。

App Intentにパラメータを入力する時は、App Intent側では@Parameter プロパティラッパーを付与した変数を用意します。@Parameter プロパティラッパーのtitle 引数に指定した文字列は、ショートカットアプリでパラメータ入力項目として表示されます。

パラメータサマリ

AppIntentparameterSummary を定義することで、パラメータをショートカットのサマリーに埋め込むことができます。

本記事では、App Intentsフレームワークを使用していくつかのApp Intentを作成しながら、App Intent開発の基本的な内容について解説しました。App Intentは年々使用できるシーンが拡大しており、WWDC2024では「Apple Intelligence」が発表され、App Intentsフレームワークに関する理解が必要不可欠になっています。参考資料に記載しているApp Intentsフレームワークについてのセッション動画をご視聴いただき、ぜひApp Intentsフレームワークに対する理解を深めてみてください。

参考資料

・App Intentでアプリのコア機能をユーザーに提供 - WWDC2024
https://developer.apple.com/jp/videos/play/wwdc2024/10210/
・App Intentの新機能 - WWDC2024
https://developer.apple.com/videos/play/wwdc2024/10134/
・Dive into App Intents - WWDC2022
https://developer.apple.com/videos/play/wwdc2022/10032/
・Implement App Shortcuts with App Intents - WWDC2022
https://developer.apple.com/videos/play/wwdc2022/10170/

Discussion