ドキュメント

Intents App Extensionの開発

XcodeプロジェクトでIntents App Extensionを追加および構成します。

概要

SiriKitとのやり取りは、Intents App Extensionを通じて行われます。Intents App ExtensionはiOSまたはwatchOSアプリバンドル内に組み込みます。SiriKitとのほとんどのやり取りはIntents App Extensionによって処理されます。ただし、アプリはそれらのやり取りを認識している必要があり、やり取りを行うためにアプリが積極的な役割を持つ場合もあります。

Xcodeプロジェクトの構成はいくつかのステップに分かれます。プロジェクトにIntents App Extensionをターゲットとして追加するだけでなく、アプリ側にも若干の変更が必要です。

「Siri」ケイパビリティを有効化する

「Siri」ケイパビリティを有効化すると、アプリにエンタイトルメントのセットが追加されます。iOSアプリまたはwatchOSアプリにIntents Extensionが含まれる場合、App Storeでこれらのエンタイトルメントの存在が求められます。

  1. Xcodeを起動し、アプリのプロジェクトを開きます。

  2. プロジェクトの設定で、適切なターゲットを選択します。iOSの場合は、ターゲットとして「iOS app」を選択します。watchOSの場合は、ターゲットとして「WatchKit Extension」を選択します。

  3. 「Capabilities」タブに切り替えます。

  4. ここで「Siri」ケイパビリティを有効にしてください。

図1

プロジェクトで「Siri」ケイパビリティを有効にする

プロジェクトで「Siri」ケイパビリティを有効にする

プロジェクトにIntents App Extensionを追加する

Intents App Extensionターゲットを追加すると、Intents Extensionのビルドに必要な初期ファイルが用意され、Extensionをビルドしてアプリのバンドルに組み込めるようにXcodeプロジェクトが構成されます。

  1. Xcodeを起動し、既存のアプリプロジェクトを開きます。

  2. 「File」>「New」>「Target」の順に選択します。

  3. iOSまたはwatchOSのプラットフォームの「Application Extension」グループから、「Intents Extension」を選択します。

  4. 「Next」をクリックします。

  5. Extensionの名前を指定し、言語その他のオプションを設定します。

  6. iOSアプリの場合、Siriのインターフェイスをカスタマイズする予定であれば、「Include UI Extension」を有効化します。

  7. 「Finish」をクリックします。

図2

XcodeプロジェクトにIntents App Extensionを追加する

XcodeプロジェクトにIntents App Extensionを追加する

Extensionが扱うIntentを指定する

プロジェクトのターゲットとしてIntents Extensionを追加したら、Xcodeで用意されたデフォルトのInfo.plistファイルを構成し、どのIntentをサポートするかを指定します。SiriKitはExtensionのInfo.plistファイルに基づいて、どのIntentをExtensionに渡すかを判断します。

  1. Xcodeで、Intents App ExtensionのInfo.plistファイルを選択します。

  2. NSExtensionキーおよびNSExtensionAttributesキーを展開し、IntentsSupportedキー(iOSおよびwatchOS)およびIntentsRestrictedWhileLockedキー(iOSのみ)を表示します。

  3. IntentsSupportedキーに、Extensionが扱う各IntentのString項目を追加します。各項目の値を、Intentのクラス名に設定してください。

  4. IntentsRestrictedWhileLockedキーに、デバイスのロックを解除する必要がある各Intentについて、String項目を追加します。各項目の値を、Intentのクラス名に設定してください。

iOSでは、IntentsRestrictedWhileLockedキーを含めるかどうかは任意です。このキーは、デバイスのロックを解除する必要があるIntentのリストを拡張するために使用します。金銭の授受を伴うIntentなど、デバイスのロック解除が必須のものもあります。そのようなIntentの場合は、IntentsRestrictedWhileLockedキーにIntentの項目を入力したかにかかわらず、Siriが自動的にユーザーに対してデバイスのロック解除を求めます。watchOSでは、すべてのIntentでデバイスのロック解除が必要です。

ユーザーの発話が曖昧で複数のIntentでリゾルブされる場合、SiriKitはIntentsSupportedキーに設定されているIntentの順序に従って、アプリに送信するIntentを決定します。したがって、妥当性の高いIntentから順に並べてください。セマンティクスがよく似た複数のドメインに対応するIntents Extensionの場合、この順序は特に重要です。たとえば、「VoIP通話」と「メッセージ交換」という2つのIntentを扱うアプリの場合、Intentが曖昧であれば「メッセージ交換」を優先する、という設定が考えられます。

Intentによっては、Xcodeプロジェクト用またはアプリ用に、さらに設定が必要になる場合があります。たとえば配車予約アプリを実装する場合、マップは、サービスの対応地域を記載したGeoJSONファイルが提供されることを想定しています。特別な要件に関する情報は、リファレンス文書を参照してください。

Intents App Extensionをテストする

Xcodeでは、Intents App ExtensionをXcodeプロジェクトから直接起動して、シミュレータまたはデバイスで実行しながらデバッグすることができます。以下の手順で、Intents Extensionを実行、デバッグします。

  1. Intents Extensionのビルドスキームを選択してください。Intents Extensionターゲットの作成時に、Xcodeによってビルドスキームが自動的に作成されます。

  2. コードを実行するターゲット(シミュレータまたはデバイス)を選択します。

  3. 「Product」>「Run」の順に選択して、デバッグセッションを開始します。

  4. Xcodeからの確認に応じて、実行するメインのアプリとしてSiriまたはマップを選択します。XcodeによってアプリとExtensionがビルドされ、デバイスにインストールされ、選択したアプリが起動します。

Extensionを初めてインストールした場合、SiriがすぐにApp Extensionを認識しない場合があるので、数分待ってから関連するコマンドを発行してください。同様に、ExtensionのInfo.plistファイルを変更した場合も、Siriが変更を認識するまでに数分かかることがあります。

関連項目

Siri Intents

App Extensionをサポートするためのコード構成

バックエンドサービスをプライベートフレームワークに移動し、アプリとApp Extensionがサービスを使用できるようにします。

Intentを適切なhandlerオブジェクトに振り分ける

SiriKitに、特定のIntentを処理できるオブジェクトを提供します。

Intentのリゾルブとハンドル

アプリのサービスに対するユーザーリクエストをリゾルブ、コンファーム、ハンドルします。

protocol INIntentHandlerProviding(英語)

Intentを処理するカスタムオブジェクトにIntentを振り分けるインターフェイスです。

Extension関連のクラス(英語)

Intents Extensionのビルドに使用するクラスについて説明します。