0

シンプルな WatchOS 2.0 機能をアプリに追加して、時計で簡単なアクションをトリガーし、iPhone のメイン アプリで効果を発揮できるようにしようとしています。このすべては、WCSession の sendMessage メソッドを使用して時計からメッセージを送信することによって決まります。

[[WCSession defaultSession] sendMessage:applicationData
                         replyHandler:^(NSDictionary *reply) {
                           //handle reply from iPhone app here
                           DbgLog(@"reply received=%@", reply);
                         }
                         errorHandler:^(NSError *error) {
                           //catch any errors here
                           DbgLog(@"error received=%@", error);
                         }
 ];

これまでのところ、すべて正常に機能しています。メッセージが送信され、メッセージが受信され、アプリが正しく反応します。アプリをバックグラウンドにすることもでき、すべてが正常に動作しているようです (iPhone がウォッチの接続コンテキストを更新し、ウォッチに反映されるため、iPhone がメッセージに反応したかどうかをウォッチで確認できます)。今すぐエッジケースのデバッグを開始したいだけです。

私の主な2つの心配は...

アプリが強制終了された場合、アプリを起動するシステムをどのように正確にデバッグできますか。Xcode からプロセスを生成することは明らかにできません。プロセスにアタッチしようとすると、明らかに遅すぎます。理想的には、ブレークポイントを非常に早く設定して、動作を確認できるようにしたいと考えています。最悪の場合、私が推測する多くのログに依存して、それらを調べることができます。このシナリオをデバッグする良い方法があるかどうか疑問に思っていますか?

最後に、状態の復元に関して、sendMessage が送信されるシナリオによって実行される、この強制終了されたアプリで何が起こるか。すなわち。

  • アプリが特定の状態で実行されていた (A)
  • ホームボタンを押してアプリをバックグラウンドにすると、そのときのアプリの状態 (A) に対して状態エンコードが実行されます。
  • その後、アプリはバックグラウンドで待機します。
  • 次に、Xcode での実行を停止して、アプリを強制終了します。
  • 最後に、時計から sendMessage を送信して、システムが強制終了されたアプリを再実行するようにします。
  • この段階で、状態の復元の読み込みが発生し、メッセージが届き、アプリの状態を状態 B に変更して処理され、アプリはバックグラウンドに戻ります。

私の問題は、アプリが最初にバックグラウンド化されたときに、状態エンコーディングが状態 A に保存されていることです。

ウォッチ接続 sendMessage の処理が完了した後、バックグラウンドで新しい状態エンコードを強制的に発生させる方法はありますか?

次にアプリを適切に開いたときに何が起こるか、時計の sendMessage を処理したときに状態 A に戻る状態の復元が発生し、状態 B にあるはずです。まだバックグラウンドで実行されていると推測しているので、アプリがバックグラウンドで生成されたアプリは持続し、新しい状態の復元は発生しません。ただし、システムが状態 B でバックグラウンドになっているときにアプリを再度強制終了した場合はどうなるでしょうか。このシナリオでは、新しい状態 B を保存するために新しい状態エンコードが必要なのか、それともアプリを強制終了して何もしないことを理解していますか。もしそうなら、最終的にそれを新たに起動したときに、アプリの状態 B ではなく、再びアプリの状態 A に戻る可能性があります。

余談ですが、この種のことを試してデバッグし始めたばかりですが、このシステムにデバッガーを接続する機能がないように見えますが、iPhone アプリのインスタンスを再実行しました。強制終了された iPhone アプリを起動する sendMessage を実行すると、時計アプリが適切に更新されないことに気付きました。電話アプリは、要求されたアクションを完全には実行しません。この状態で何が起こったのかは今のところわかりませんが、状態の回復が邪魔になるのではないかと思います. メッセージを受信し、アプリを起動し、状態の復元がまだ行われていないため、存在しないデータに対処しようとすると、状態の復元が行われます..時計から 2 回目にメッセージを送信すると、アプリは正しく動作するので、その最初のメッセージでアプリが起動するが、何らかの理由で起動しないかのように' メッセージを正しく処理しない。正常に起動すると、次の sendMessage は通常どおり処理されます。

申し訳ありませんが、iPhone アプリが sendMessage 呼び出しからバックグラウンドで再実行されたときに何が起こるかについて、ドキュメントがかなり曖昧です。誰でもアイデアはありますか?いつものようにあなたの時間は本当に感謝しています! 乾杯!

4

1 に答える 1

1

背景と状態の復元:

バックグラウンドで起動された (その後終了した) アプリは、状態を保存しません。これは、フォアグラウンドからバックグラウンド (状態の保存が行われるとき) に遷移しないためです。

状態の保存と復元から:

UIKit は、アプリがフォアグラウンドからバックグラウンドに移動するときなど、適切なタイミングでアプリの状態を保持します。

状態を保存しない理由は、バックグラウンドで直接起動されるためです。

アプリのライフサイクルから:

また、バックグラウンドで直接起動中のアプリは非アクティブ状態ではなく【バックグラウンド状態】になります。

バックグラウンドで起動されたアプリのデバッグ:

終了した状態からバックグラウンドで起動されたときにアプリにアタッチすることに関しては、このシナリオの正しいアプローチを既に提供しているという質問があります。

それについて具体的な質問がある場合は、その回答の作成者にコメントを残してください。

于 2016-03-31T01:40:50.560 に答える