2

私は Xcode 7 を使用しており、BLE アクセサリと CoreBluetooth フレームワークを使用して iOS9 で「状態の保存と復元」をテストする方法を理解したいと思います (この質問を既に見つけたわけではありませんが、これをもっと理解する必要があると感じています)。深さ)。

アプリが以前に実行されていなかった場合でも、ユーザーの電話が範囲内にある場合にのみ、アクセサリから一部のデータを自動的に転送するアプリが必要です。

これを、このユース ケースのさまざまなバリエーションを反映する 3 つのシナリオ、つまりシナリオ A、シナリオ B、およびシナリオ C に分類しようとしました。

次のシナリオをテストするために必要な基本的な手順を誰かが説明してくれますか?

また、これらのシナリオは理にかなっていますか?

  • シナリオ A:

    1 - アプリはアクセサリを検出し、アクセサリ情報を保存します

    2 - アプリ / ユーザーがアクセサリ範囲を終了

    3 - アプリがユーザーによって強制終了されました

    4 - アプリが実行されていないときに、ユーザーがアクセサリ範囲に再び入ります。

    5 - 予想されるイベント: 状態の復元がアクティブ化されることを期待しています ( willRestoreStateメソッドが CentralManager で呼び出され、AppDelegateで didFinishLaunchingWithOptions が呼び出されます。

    ここから、アクセサリを含む周辺機器のリストを取得し、それに接続するかどうかを決定できるはずです。

    6 - 接続することにした場合、アプリはバックグラウンドで実行され続けると思います (バックグラウンド モードが有効になっているため)。

このシナリオをテストするにはどうすればよいですか?


  • シナリオ B:

    1 - アプリはアクセサリを検出し、アクセサリ情報を保存します

    2 - アプリがアクセサリに接続し、特性にリクエストを送信してデータ転送を開始します

    3 - アプリはアクセサリからデータを受信して​​います

    4 - アプリ / ユーザーがアクセサリ範囲を終了

    5 - アプリがバックグラウンド モードになる

    6 - アプリがバックグラウンド モードで実行されている間に、ユーザーがアクセサリの範囲に再び入りました。

    5 - 予想されるイベント: 状態の復元がアクティブ化されることを期待しています ( willRestoreStateメソッドが CentralManager で呼び出され、AppDelegateで didFinishLaunchingWithOptions が呼び出されます。

    ここから、アクセサリを含む周辺機器のリストを取得し、ステータスがCONNECTEDであることを確認できるはずです。その後、データ ストリームを再リクエストする必要があります (以前のストリームを再開する方法はないと思いますよね?)

    6 - アプリはバックグラウンドでストリームを継続する必要があります

このシナリオをテストするにはどうすればよいですか?


  • シナリオ C:

    1 - アプリはアクセサリを検出し、アクセサリ情報を保存します

    2 - アプリがアクセサリに接続し、特性にリクエストを送信してデータ転送を開始します

    3 - アプリはアクセサリからデータを受信して​​います

    4 - アプリ / ユーザーがアクセサリ範囲を終了

    5 - アプリがバックグラウンド モードになる

    6 - ユーザーがアプリを強制終了

    7 - アプリが実行されていないときに、ユーザーがアクセサリ範囲に再び入りました

    8 - 予想されるイベント: 状態の復元がアクティブ化されることを期待しています ( willRestoreStateメソッドが CentralManager で呼び出され、AppDelegateで didFinishLaunchingWithOptions が呼び出されます。

    ここから、アクセサリを含む周辺機器のリストを取得して再接続し、データ転送を再リクエストできるはずです (シナリオ B の場合と同じように再開します)。

    9 - アプリがバックグラウンドで実行され続けることを期待しており (バックグラウンド モードが有効になっているため)、アプリはバックグラウンドでストリームを継続する必要があります

このシナリオをテストするにはどうすればよいですか?

希望はあまり混乱しません。

4

1 に答える 1

1

シナリオ AI については、何でもできます。ユーザーがホーム ボタンをダブルクリックし、アプリを上にスワイプしてアプリを強制終了すると、そのアプリは消えてしまい、Bluetooth のおしゃべりには参加しなくなります。起動されたことのないアプリについても同じことが当てはまります。iOS はアプリに何も通知したり、アプリを起動しようとしたりしません。

willRestoreStateシナリオ Bでは、最新のスマートフォン (5s、6) は、重いアプリを多数起動した後でも、中断されたアプリを強制終了しないように見えるため、対処する必要はほとんどありません。アクセサリの範囲を離れると、アプリは静かに切断されます。次に、( で) アクセサリのスキャンをすぐに開始するように指示すると、didDisconnectPeripheral何年にもわたってスキャンが実行されます。あまり頻繁ではありませんが、それでも。そのため、アクセサリの範囲に再び入ると、iPhone は最終的にそれに接続し、必要なすべてのコールバックをトリガーします。willRestoreStateiPhone 4s、おそらく iPhone 5 にのみ関連するようですが、私はこの機能を本当に長い間試していませんでした。

本当にシナリオをテストする必要がある場合willRestoreStateは、A) ローカル通知を追加didFinishLaunchingWithOptionswillRestoreStateて、それらがトリガーされることを確認し、B) Xcode でアプリを実行してから、CMD+ を押して停止することができます。または、Xcode で四角いボタンをクリックします。これにより、システムがメモリの問題でアプリを強制終了するのと同じ方法でアプリが終了するため、通知が表示されるはずです。これからは、コードを記述し、ログ ステートメントを追加して、デバイス ログで何が起こるかを観察できます。

状態の復元をテストする別の方法はkill(getpid(), SIGKILL);、ボタンをタップした後に呼び出すことです。

シナリオ C - 申し訳ありませんが、同じ話です。ユーザーが故意にあなたのアプリを殺したら、あなたは失敗します。彼にそうしないように言いなさい。

于 2016-02-09T12:15:29.083 に答える