ハイライト
このセッションでは、Siri とショートカットのデバッグ問題を特定するための最小限のプロセスが提供されます。Xcode を使用して Siri クエリを事前入力し、インテントとインテント UI プロセスをそれぞれアタッチし、10 秒の完了ハンドラー制約を確認し、デバイス ログと
os_logマルチプロセスのタイムラインをつなぎ合わせます。
主要内容
SiriKit がエラーを起こすと、多くの場合、ユーザーには「申し訳ありませんが、アプリに問題が発生しました。」という声が聞こえます。この文はユーザーにとっては有益ですが、開発者にとってはほとんど情報がありません。実際の問題は、Intents 拡張機能、Intents UI 拡張機能、ホスト プロセス、完了ハンドラー、またはデバイス クラッシュ ログのどこかにある可能性があります。
Roman のアドバイスはデバッグ エントリから始まります。毎回 Siri を呼び出したり、テスト フレーズをもう一度言い、システムがリクエストを内線にルーティングするのを待つ必要はありません。Xcode のスキーム エディターは、同じリクエストを繰り返し実行できるように、Siri インテント クエリを事前に入力できます。こうすることで、開発者はブレークポイント、ロギング、実行順序に集中できます。
2 番目のキーポイントはプロセス境界です。Intents 拡張と Intents UI 拡張は 2 つの独立したプロセスです。ハンドラー プロセスにのみアタッチされている場合、UI 拡張機能のブレークポイントはヒットしません。 1 つのプロセスのログだけを見ていると、リクエストがどのステップで停止したかを見誤る可能性があります。
最後に、セッションは一般的なエラーを 3 種類のチェックにまとめます。10 秒のタイムアウト前に完了ハンドラーが呼び出されるかどうか、1 回だけ呼び出されるかどうか、リクエストの途中でプロセスがクラッシュするかどうかです。次に、デバイスログと、デバイスとシミュレータの Console.app フィルタリングと連携します。os_logキーワードを使用すると、Siri リクエストを共同処理する複数のプロセスのタイムラインを復元できます。
詳細
1. Xcode を使用して Siri クエリを事前入力する
(00:19) トークは、Siri クエリの自動化から始まります。Xcode のスキーム エディターを使用すると、開発者はデバッグ前に Siri インテント クエリを提供できます。この方法では、Intents 拡張機能をデバッグするときに毎回手動で Siri をトリガーする必要がなく、同じ文を繰り返し読む必要もありません。
デバッグ前に固定する 3 つの項目:
- テストする Siri intent query
- アタッチする Intents extension
- ホストプロセスとして Siri または Shortcuts を選ぶ
キーポイント:
- Siri インテント クエリは、このデバッグの入力です。ブレークポイントとログを比較できるように、最初に入力を修正します。
- インテント拡張はリクエストを処理するメインプロセスであり、ハンドラー関連のブレークポイントはここに配置する必要があります。
- ホスト プロセスは Siri またはショートカット アプリを選択でき、2 つの入り口で同じインテントの動作の違いを比較するのに適しています。
2. 複数の拡張プロセスを同時にアタッチします
(00:33) Xcode が Intents 拡張機能にアタッチされている場合、デバッガーはこのハンドラーにのみ接続されます。Intents UI 拡張機能は別のプロセスであるため、UI ブレークポイントは自動的にヒットしません。Roman は、Xcode デバッグ メニューを介して複数のプロセスを同時にアタッチすることを明示的に推奨しています。
1 回の Siri リクエストで関係する可能性があるもの:
- Siri または Shortcuts のホストプロセス
- Intents extension
- Intents UI extension
キーポイント:
- 処理ロジックと UI 表示は同じプロセス内で実行されません。
- ハンドラー ブレークポイントは有効ですが、UI 拡張ブレークポイントも有効になるわけではありません。
- マルチプロセスのアタッチメントは、問題がリクエストの処理、結果のポストバック、または UI レンダリングの段階で発生したかどうかを特定するのに役立ちます。
3.「アプリの不具合」に対処するための3つのチェック
(00:57) Siri が「アプリに問題が発生しました」と報告したとき、セッションでは開発者に最初にエラー コードを推測させることはせず、3 つの基本的なチェックを行いました。
SiriKit リクエストが失敗したら、まず確認すること:
- completion handler が 10 秒のタイムアウト前に呼ばれたか
- completion handler が 1 回だけ呼ばれたか
- リクエストの途中でプロセスがクラッシュしていないか
キーポイント:
- インテント処理プロトコル メソッドの完了ハンドラーは、10 秒のタイムアウト前に呼び出す必要があります。
- 完了ハンドラーは 1 回だけ呼び出すことができます。繰り返し呼び出しを行うと、プロセスで例外がスローされます。
- リクエストの途中でプロセスがクラッシュした場合でも、Siri には一般的なエラー メッセージだけが表示される場合があります。
4. デバイスログとos_logタイムラインを復元する
(01:27) Xcodeのデバイスとシミュレーターウィンドウに「デバイスログの表示」があります。SiriKit リクエストが失敗した場合は、まず関連するプロセスがクラッシュしていないかどうかを確認します。このステップにより、「ハンドラーが戻らなかった」ことと「プロセスがクラッシュした」ことを区別できます。
(01:36)os_logブレークポイントを越えて情報を完成させるのに適しています。講演では、ログの前に絵文字やその他の一意のキーワードを追加し、Console.app を使用してこのキーワードをフィルタリングして、関連するすべてのプロセスの正確なイベント タイムラインを取得することを提案しました。
🍲 [Intents extension] <event>
🍲 [Intents UI extension] <event>
🍲 [Siri or Shortcuts host] <event>
キーポイント:
- unique キーワードにより、今回は Console.app が SiriKit のデバッグに関連するログのみを表示できるようになります。
- ログ内のプロセス名または拡張子名だけで、複数のプロセスの連携シーケンスを明確に確認できます。
- 完了ハンドラの呼び出しポイントを記録し、タイムアウトかどうか、繰り返し呼び出されているかどうかを直接確認できます。
重要ポイント
-
内容: SiriKit インテントごとにデバッグ クエリの固定セットを構築します。 実行する価値がある理由: セッションの最初のステップは、Siri のクエリを自動化することです。入力を修正するだけで、ブレークポイント、ログ、クラッシュを安定して再現できます。 開始方法: 最も一般的なユーザー ステートメントをテスト フレーズに整理し、Xcode スキーム エディターで 1 つずつ構成して実行し、Siri とショートカットの 2 つのホスト プロセス間の違いを記録します。
-
何をすべきか: Intents 拡張機能と Intents UI 拡張機能のブレークポイント チェックを個別に行います。 実行する価値がある理由: 2 つの拡張機能は独立したプロセスです。ハンドラーをアタッチするだけでは、UI 拡張機能のブレークポイントを見逃すことになります。 開始方法: 処理メソッドと UI 更新エントリにそれぞれブレークポイントを置き、Xcode のデバッグ メニューから 2 つのプロセスを同時にアタッチし、ハンドラーから UI までのリクエストの完全なパスを確認します。
-
内容: 完了ハンドラーのランタイム保護ログを作成します。 実行する価値がある理由: 10 秒以内の呼び出しの失敗、繰り返しの呼び出し、リクエスト中のクラッシュはすべて、Siri 側の一般的なエラー メッセージになります。 開始方法: 各インテント処理プロトコルのメソッドの入り口と完了ハンドラー呼び出しの前後に同様に記述します
os_logキーワードを入力し、リクエスト ID と呼び出し時間をログに記録します。 -
何をすべきか: デバイスのログを SiriKit QA プロセスに組み込みます。 実行する価値がある理由: 拡張機能がリクエストの途中でクラッシュした場合、Siri UI やブレークポイントのステータスを見るだけでは判断を誤る可能性があります。 開始方法: 「アプリの問題」が再発するたびに、デバイスとシミュレーターを開き、まず「デバイス ログの表示」を使用して Intents 拡張機能と Intents UI 拡張機能のクラッシュを見つけてから、Console.app に戻って確認します。
os_logタイムライン。
関連セッション
- SiriKit とショートカットの新機能 — iOS 14 の Siri とショートカットのコンパクトなインターフェイスの概要、および SiriKit インテント / ショートカット アクションがどのように構成されているか。
- インテントを強化する — アプリ内インテントの処理、インテント拡張機能のパフォーマンス、SiriKit アクション エクスペリエンスを改善する方法について説明します。
- 高品質の Siri メディア インタラクションを設計する — メディア再生を例として、高品質の Siri 音声インタラクションを設計、テスト、デバッグする方法を説明します。
- SiriKit Media Intents をより多くのプラットフォームに拡張 — HomePod、Apple TV、その他のプラットフォームでの SiriKit Media Intents へのアクセスと結果の処理について説明します。
- ショートカット アプリでアクションを特集する — ショートカット アプリ、自動提案、およびシステム推奨ポータルにアプリのアクションを表示する方法について説明します。
コメント
GitHub Issues · utterances