CoreBluetooth:测试状态保存和恢复

问题描述:

我正在使用Xcode 7,我想了解如何在iOS9中使用BLE附件和CoreBluetooth框架测试“状态保存和恢复”(请不要指出我已经找到this question,但我觉得有必要更深入地理解这一点)。CoreBluetooth:测试状态保存和恢复

我需要应用程序才能自动从附件中传输一些数据,只有当用户的手机处于范围内时,以及该应用程序以前没有运行过。

我试图打破这三种情况反映了这个用例,即方案A,方案B和方案的不同变化C.

会有人能够解释我测试所需的基本步骤以下情景?

也做这些情况是否有意义?

  • 情况A:

    1 - 应用程序发现附件并存储该附件信息

    2 - 应用程序/用户退出附件范围

    3 - 应用由用户

    杀死

    4 - 用户在App未运行时重新输入附件范围。

    5 - 预期事件:我希望状态恢复到被激活(被称为CentralManager以及didFinishLaunchingWithOptions在AppDelegate中willRestoreState方法

    在这里,我应该能够得到外设的列表。包括辅助设备,并决定我是否要连接到它

    6 - 。如果我决定进行连接,然后我希望应用程序保持后台运行(如后台模式被激活)

我该如何测试这种情况?


  • 场景B:

    1 - 应用程序发现附件并存储该附件信息

    2 - 应用程序连接到附件,并发送请求至一个特性来开始传送数据

    3 - 应用正在从配件接收数据

    4 - 应用程序/用户退出附件范围

    5 - 应用程序进入后台模式

    6 - 用户应用程序的同时在后台模式下运行重新进入附件范围。

    5 - 预期事件:我希望状态恢复到被激活(被称为CentralManager以及didFinishLaunchingWithOptions在AppDelegate中willRestoreState方法

    在这里,我应该能够得到外设的列表。包括配件,并看到状态是连接。我应该然后重新请求数据流(我认为没有办法恢复前一个流,是否正确?)

    6 - 应用程序应继续流背景和基础d

我该如何测试这种情况?


  • 场景C:

    1 - 应用程序发现附件并存储该附件信息

    2 - 应用程序连接到附件,并发送请求至一个特性来开始传送数据

    3 - 应用正在从配件接收数据

    4 - 应用程序/用户退出附件范围

    5 - 应用程序进入后台模式

    6 - 用户杀死该应用

    7 - 用户再次进入附件范围,而应用程序未运行

    8 - 预期事件:我期望激活状态恢复(willRestoreState在CentralManager中调用方法以及在AppDelegate中调用didFinishLaunchingWithOptions

    从这里我应该能够得到包括附件在内的外设列表,并重新连接并重新请求数据传输(如情景B所示)。

    9 - 我希望应用程序保持在后台运行(如后台模式被激活)和应用程序应该在后台继续流

如何测试这个场景?

希望不是太混乱。

+0

想知道你是否能找到你的问题的答案。我对同样的事情很好奇。从[这里](https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html#//apple_ref/doc/uid/TP40013257-CH7-SW5),我想它可能是可以实现的。 – Liangjun

对于情景A,我怀疑你可以做任何事情。如果用户通过双击主页按钮并向上滑动应用程序来杀死您的应用程序,该应用程序就会消失,并且不再参与所有这些奇特的蓝牙消息。对于从未启动的应用程序也是如此 - iOS不会告诉任何事情和/或尝试将其唤醒。

在场景B中,您很有可能不需要处理willRestoreState,因为现代智能手机(5s,6)似乎并不会杀死您的已暂停的应用程序,即使在其上启动了大量的重要应用程序之后。当您离开附件范围时,应用程序将悄然断开连接。然后,如果您要指示它立即开始再次扫描配件(在didDisconnectPeripheral),它会这么做很长时间。不经常,但仍然。所以,当你再次输入附件范围时,iPhone最终会连接到它并触发所有需要的回调。 willRestoreState似乎只与iPhone 4s,也许iPhone 5有关,但我没有玩这个功能很长时间才能确定。

如果你真的需要测试willRestoreState情况下,您可以A)添加本地通知didFinishLaunchingWithOptionswillRestoreState以确保他们触发和B)运行Xcode中的应用程序,然后按CMD +停止。或者点击Xcode中的方形按钮。这会导致应用程序以与系统在内存问题上终止相同的方式终止,所以您应该看到您的通知。从现在起,您可以编写代码,添加日志语句并观察设备日志中发生的情况。

测试状态恢复的另一种方法是在点击一个按钮后调用kill(getpid(), SIGKILL);

情景C - 抱歉,同样的故事。如果用户故意杀死你的应用程序,那么你就搞砸了。告诉他不要。