0

我已经实现了恢复功能CoreBluetooth它工作正常,除了一件事 - 一周后(+/- - 不知道100%)的背景,没有开放,应用程序终止,而不是在任何基于BLE的事件上再次恢复(几次测试)。BLE恢复/保存意想不到的效果

我还将日志记录添加到所有BLE相关任务,为捕获崩溃添加分析功能,追踪追加过程/事件 - 并且在检查此日志/信息/报告后 - 未发现任何异常或可终止我的应用程序的内容。

问题是 - 有人能解释我为什么得到这样的行为吗?

回答

1

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

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

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

+0

哦,应该帮助,事件不会去想这样的可能性 – gbk

+0

是啊,这是iOS开发的宝藏之一。准备阅读蓝牙堆栈的许多C++日志记录;-)。 –

1

从我的CoreBluetooth状态保存和恢复的经验,我得出结论,它无法可靠地工作。您可以使它工作得很好,但在后台使用长时间运行挂起连接时,您永远无法可靠地重新连接。

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

另一个是,有时框架被“卡住”在一个糟糕的状态(可能通过内部竞赛条件或类似的)。这可能会随机发生,但通过在didFailToConnect或didDisconnect回调中立即调用connectPeripheral,您可以非常容易地重现此操作。发生这种情况时,connectionState将被设置为连接,而实际上不是。

等等......

/安东