XcodeプロジェクトでIntents App Extensionを追加および構成します。
概要
SiriKitとのやり取りは、Intents App Extensionを通じて行われます。Intents App ExtensionはiOSまたはwatchOS App Bundle内に組み込みます。SiriKitとのほとんどのやり取りはIntents App Extensionによって処理されます。ただし、アプリはそれらのやり取りを認識している必要があり、やり取りを行うためにアプリが積極的な役割を持つ場合もあります。
Xcodeプロジェクトの構成はいくつかのステップに分かれます。プロジェクトにIntents App Extensionをターゲットとして追加するだけでなく、アプリ側にも若干の変更が必要です。
「Siri」ケイパビリティを有効化する
「Siri」ケイパビリティを有効化すると、アプリにエンタイトルメントのセットが追加されます。iOSアプリまたはwatchOSアプリにIntents Extensionが含まれる場合、App Storeでこれらのエンタイトルメントの存在が求められます。
-
Xcodeを起動し、アプリのプロジェクトを開きます。
-
プロジェクトの設定で、適切なターゲットを選択します。iOSの場合は、ターゲットとして「iOS app」を選択します。watchOSの場合は、ターゲットとして「WatchKit Extension」を選択します。
-
「Capabilities」タブに切り替えます。
-
ここで「Siri」ケイパビリティを有効にしてください。
プロジェクトにIntents App Extensionを追加する
Intents App Extensionターゲットを追加すると、Intents Extensionのビルドに必要な初期ファイルが用意され、ExtensionをビルドしてApp Bundleに組み込めるようにXcodeプロジェクトが構成されます。
-
Xcodeを起動し、既存のアプリプロジェクトを開きます。
-
「File」>「New」>「Target」の順に選択します。
-
iOSまたはwatchOSのプラットフォームの「Application Extension」グループから、「Intents Extension」を選択します。
-
「Next」をクリックします。
-
Extensionの名前を指定し、言語その他のオプションを設定します。
-
iOSアプリの場合、Siriのインターフェイスをカスタマイズする予定であれば、「Include UI Extension」を有効化します。
-
「Finish」をクリックします。
メモ
複数のIntents Extensionを追加することもできますが、それぞれ異なるIntentをハンドルするものでなければなりません。複数のIntents Extensionの追加は、そうすることでExtensionそれぞれの処理性能が向上する場合、またはメモリ消費量を削減できる場合に限り行ってください。
Extensionが扱うIntentを指定する
プロジェクトのターゲットとしてIntents Extensionを追加したら、Xcodeで用意されたデフォルトのInfo
ファイルを構成し、どのIntentをサポートするかを指定します。SiriKitはExtensionのInfo
ファイルに基づいて、どのIntentをExtensionに渡すかを判断します。
-
Xcodeで、Intents App Extensionの
Info
ファイルを選択します。.plist -
NSExtension
キーおよびNSExtension
キーを展開し、Attributes Intents
キー(iOSおよびwatchOS)およびSupported Intents
キー(iOSのみ)を表示します。Restricted While Locked -
Intents
キーに、Extensionが扱う各IntentのString項目を追加します。各項目の値を、Intentのクラス名に設定してください。Supported -
Intents
キーに、デバイスのロックを解除する必要がある各Intentについて、String項目を追加します。各項目の値を、Intentのクラス名に設定してください。Restricted While Locked
iOSでは、Intents
キーを含めるかどうかは任意です。このキーは、デバイスのロックを解除する必要があるIntentのリストを拡張するために使用します。金銭の授受を伴うIntentなど、デバイスのロック解除が必須のものもあります。そのようなIntentの場合は、Intents
キーにIntentの項目を入力したかにかかわらず、Siriが自動的にユーザーに対してデバイスのロック解除を求めます。watchOSでは、すべてのIntentでデバイスのロック解除が必要です。
重要
info
でWKRuns
を設定しない場合、watchOSアプリでサポートするIntentは、iOSアプリでサポートするIntentのサブセットでなければなりません。つまり、iOSアプリのIntents Extensionは、watchOSアプリのIntents Extensionによって処理されるIntentsをすべて処理できる必要があります。watchOSアプリでサポートするIntentをiOSアプリでサポートしないのは、プログラマーのエラーとなります。WKRuns
が設定されている場合、またはWatchアプリがスタンドアロンアプリの場合は、このサブセットのルールが適用されません。
ユーザーの発話が曖昧で複数のIntentでリゾルブされる場合、SiriKitはIntents
キーに設定されているIntentの順序に従って、アプリに送信するIntentを決定します。したがって、妥当性の高いIntentから順に並べてください。セマンティクスがよく似た複数のドメインに対応するIntents Extensionの場合、この順序は特に重要です。たとえば、「VoIP通話」と「メッセージ交換」という2つのIntentを扱うアプリの場合、Intentが曖昧であれば「メッセージ交換」を優先する、という設定が考えられます。
Intentによっては、Xcodeプロジェクト用またはアプリ用に、さらに設定が必要になる場合があります。たとえば配車予約アプリを実装する場合、マップは、サービスの対応地域を記載したGeoJSONファイルが提供されることを想定しています。特別な要件に関する情報は、リファレンス文書を参照してください。
Intents App Extensionをテストする
Xcodeでは、Intents App ExtensionをXcodeプロジェクトから直接起動して、シミュレータまたはデバイスで実行しながらデバッグすることができます。以下の手順で、Intents Extensionを実行、デバッグします。
-
Intents Extensionのビルドスキームを選択してください。Intents Extensionターゲットの作成時に、Xcodeによってビルドスキームが自動的に作成されます。
-
コードを実行するターゲット(シミュレータまたはデバイス)を選択します。
-
「Product」>「Run」の順に選択して、デバッグセッションを開始します。
-
Xcodeからの確認に応じて、実行するメインのアプリとしてSiriまたはマップを選択します。XcodeによってアプリとExtensionがビルドされ、デバイスにインストールされ、選択したアプリが起動します。
Extensionを初めてインストールした場合、SiriがすぐにApp Extensionを認識しない場合があるので、数分待ってから関連するコマンドを発行してください。同様に、ExtensionのInfo
ファイルを変更した場合も、Siriが変更を認識するまでに数分かかることがあります。