能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

Custom Intent トラブルシューティング(Siri, Siri Shortcut,WidgetConfiguration) - iOS App

iOS14のウィジットの設定ダイアログを出すためにCustom Intentを使う機会を得たのでその際に遭遇した大小様々なトラブルと対処方法についてのメモ。

Custom Intentでのボイラープレートコードを排除すべくintentdefinitionファイルに実現したいやりとりを記述させる。バイラープレートコードは排除できたが反面トラブルの多くはSiriKit Intent Deginition File(intentdefinitionファイルに)伴うものである。

1) コードジェネレーターの弊害

intentdefinitionファイルの情報に基づいてCustom Intent用の定義を生成しXcodeプロジェクト内のターゲットに追加してくれるがビルドしないと最新結果を反映しない。SwiftLintを使うプロジェクトではSwiftLintによるコードの整形とソースコード編集が競合(と警告メッセージが出てきてコーディング作業が寸断される)するような、開発者自身がプロジェクトを制御できていない状況になってしまう。

対処としてはintentdefinitionファイルを扱う際はコードジェネレーターが走ることを頭の片隅において作業を行う。具体的にはintentdefinitionファイル内の変更を行った際は一度ビルドを実行してコードジェネレートされたコードを逐一確認した方が良い。

2)検索不能

Custom Intentでは開発しているアプリ固有のIntent(意図)を作成することになる。Xcodeはintentdefinitionファイルから得られた情報からカスタムな定義を生成することになるが、カスタムな定義であるが故にWeb検索でCustom Intentに関係する情報を見つけにくい状況になってします。

対処方法は、Siriとかウィジットの設定ダイアログなどCustom Intentなど用途で検索するといくばくかの情報が出てくる。本ブログではCustom Intentについていくつか書いているので参考にしてほしい。

3)Xcodeバージョン違い

intentdefinitionファイル はXcode経由で編集する前提となっているが複数のXcodeをmacOS上にインストールしているとintentdefinitionファイルの一部設定にアクセスできない場合が出てくる。

例としては、WidgetConfigurartion(ウィジット設定ダイアログ)用のintentdefinitionファイルをXcode12より前のXcodeでオープンするとWidgetConfigurartion用の設定が出てこないなどの問題が発生する。

まとめ

Custom Intent はSiriとSiri Shortカットへアプリ機能を提供するためにボイラープレートコードを回避するために用意された。

Custom IntentはSiri とは関係ないが、ユーザーの意図を伝達する手段として使われ始めておりiOS14でのWidget設定ダイアログを構築する際に利用された。開発者がCustom Intentにかかわる機会も増え、結果同じようなトラブルに遭遇する可能性はある。