BLE恢复/保存意外效果

时间:2017-03-14 06:50:44

标签: ios objective-c bluetooth-lowenergy core-bluetooth state-restoration

我已经为CoreBluetooth实现了恢复功能,它可以正常工作,除了一件事 - 在一周后(+/- - 不确定为100%)在后台,没有打开,应用已终止且不再恢复在任何基于BLE的事件上(经过几次测试)。

我还将日志记录添加到所有与BLE相关的任务,添加分析以捕获崩溃,跟踪还原过程/事件 - 并在检查此日志/信息/报告后 - 未找到任何可以终止我的应用程序的异常或事情。< / p>

问题是 - 有人能解释我之所以有这种行为吗?

2 个答案:

答案 0 :(得分:1)

蓝牙相关问题可能很难识别。我们在过去遇到过几个无法解释的错误。确定BLE不再工作或行为不当的唯一方法是查看设备上的CoreBluetooth日志。

如果您尚未尝试过,可以通过配置文件启用这些日志,您可以从Apple Developer Pages下载(查找蓝牙并按照说明操作)。

只要启用日志记录,就可以从底层BLE堆栈下载完整的日志,告诉您出现了什么问题。他们甚至会告诉您是否以某种方式滥用了API。希望有所帮助。

答案 1 :(得分:1)

根据我对CoreBluetooth状态保存和恢复的经验,我得出的结论是它无法可靠地工作。你可以使它工作正常,但是在后台使用长时间运行的挂起连接时,你永远不会让它可靠地重新连接。

我已经报告了几个有关此问题的错误,但我认为最严重的一个问题是,如果蓝牙管理器在应用程序终止时切换状态,则所有待处理的连接都将丢失(因为它们不会被模块记住或者iOS堆栈)。由于蓝牙状态切换不会导致您的应用重新启动,因此它只是意味着在任何时候您的挂起连接可能会丢失,您将无法了解它。这本身就意味着国家恢复是无用的。你可以说这不是一个错误,而是一个糟糕的设计选择......

另一个问题是,有时框架会“陷入”状态(可能是内部竞争条件或类似情况)。这可能是随机发生的,但您可以通过在didFailToConnect或didDisconnect回调中立即调用connectPeripheral来轻松地重现这一点。当发生这种情况时,connectionState将被设置为连接,而实际上它不是。

等等......

/安东