【Swift/iOS】AppShortcutsProviderの実装方法!ショートカット自動追加

【Swift/iOS】AppShortcutsProviderの実装方法!ショートカット自動追加

この記事からわかること

  • Swift/iOSAppShortcutsProvider実装方法
  • ショートカットSiri操作実行するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

公式リファレンス:App Intentでアプリのコア機能をユーザーに提供 - WWDC2024

App Intentsフレームワーク

公式リファレンス:App Intentsフレームワーク

App Intentsフレームワーク」はアプリがSiriやショートカット、ウィジェットと連携するための機能を提供しているフレームワークです。アプリで提供している機能やデータに対してユーザーが音声コマンドやショートカットを経由してアクセスできるようになります。

実際にコードベースで見るとSiriやショートカットと連携するためには「App Intent」という特定のインターフェースを定義する必要があります。「App Intent」の実装方法は以下の記事を参考にしてください。

AppShortcutsProvider

公式リファレンス:AppShortcutsProvider

App Intent」で定義したインテントはショートカットアプリから追加できるようになりますが、ユーザーが追加しないとそのインテントは使用できません。(Siriで問いかけても動作しない)

【Swift/iOS】App Intentsの実装方法!ショートカットやSiriの実装

アプリをインストールした段階でインテントを有効にさせたい場合AppShortcutsProviderを使用します。AppShortcutsProviderで定義するとショートカットアプリに以下のように表示されるようになり、ユーザーが追加作業を行わなくてもSiriなどを使用してインテントを実行できるようになります。

【Swift/iOS】AppShortcutの実装方法!ショートカット自動追加

実装方法

適応させるにはAppShortcutsProviderを継承した構造体を実装するだけです。構造体を定義しておくだけで自動でショートカットアプリに反映されるようになります。中に定義するのは[AppShortcut]型のappShortcutsプロパティです。

import AppIntents
  
struct AppTestShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: AppTestIntent(),
            phrases: [
                "Start a \(.applicationName)",
                "\(.applicationName)を起動して",
            ],
            shortTitle: "アプリを起動する",
            systemImageName: "swift"
        )
        AppShortcut(
            intent: FetchDataDialogIntent(),
            phrases: [
                "\(.applicationName)のデータを表示して",
            ],
            shortTitle: "データを取得する",
            systemImageName: "note.text"
        )
    }
}

配列で保持するAppShortcut型がデフォルトで用意できるショートカットのインターフェースになります。この中に実行したいインテントやSiriで起動するためのフレーズを定義しておきます。

AppShortcut(
    // 実行したいインテント
    intent: AppTestIntent(),
    // Siriで呼び出す時のフレーズ
    phrases: [
        // .applicationNameでアプリ名を取得できる
        "Start a \(.applicationName)",
        "\(.applicationName)を起動して",
    ],
    // 表示されるタイトル
    shortTitle: "アプリを起動する",
    // 表示されるアイコン
    systemImageName: "swift"
)

Siriのフレーズにはアプリ名である.applicationNameを含めないと動作しませんでした。またアプリ名はディスプレイ名に指定した値が反映されますが、アプリ名によってはうまく動作しない場合があるので注意してください。(TestAppという名前で進めてみたら動作しませんでした)

CFBundleDisplayNameが変更されている様子

ショートカットに表示されない

AppShortcutsProviderに定義しているのにショートカットに表示されない場合があるようです。再起動などしても表示されない場合はAppShortcutsProviderの定義を見直してみてください。[AppShortcut]の実装方法(配列をreturnするなど)によってもうまく動作しないこともあるようです。

明示的にupdateAppShortcutParametersメソッドを呼び出すことで表示されることもあるようなので試してみてください。

init() {
    AppTestShortcuts.updateAppShortcutParameters()
}

シミュレーターでSiriを有効/起動にする

シミュレーターでSiriを有効/起動にするためには上部メニュー「Device」>「Siri」をクリックすることでSiriが起動するので後はMacに話しかけると動作してくれます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index