記事

Intents App Extensionの開発

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

概要

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

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

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

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

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

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

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

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

図1

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

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

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

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

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

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

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

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

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

  6. iOS Appの場合、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の順序に従って、Appに送信するIntentを決定します。したがって、妥当性の高いIntentから順に並べてください。セマンティクスがよく似た複数のドメインに対応するIntents Extensionの場合、この順序は特に重要です。例えば、「VoIP通話」と「メッセージ交換」という2つのIntentを扱うAppの場合、Intentが曖昧であれば「メッセージ交換」を優先する、という設定が考えられます。

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

Intents App Extensionをテストする

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

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

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

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

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

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

関連項目

Siri Intents

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

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

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

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

Intentのリゾルブとハンドル

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

protocol INIntentHandlerProviding(英語)

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

Extension関連のクラス(英語)

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