恢复/保存意外效果



我已经为CoreBluetooth实现了恢复功能,并且在后台一周(/--不确定100%)之后,它可以正常运行,而无需打开,应用程序终止。并且不再恢复任何基于BLE的事件(经过几次测试)。

我还将日志记录添加到所有相关任务中,添加用于捕获崩溃的分析,跟踪附加的恢复过程/事件 - 在检查此日志/信息/报告之后 - 找不到任何例外或可以终止我的应用程序的其他例外。/p>

问题是 - 有人可以向我解释我这样的行为的原因吗?

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

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

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

根据我在Corebluetooth状态保存和恢复的经验,我得出的结论是,它不能可靠地起作用。您可以使它工作的"确定",但是在后台使用长期运行的连接时,您将永远无法获得可靠的重新连接。

我已经报告了几个错误,但是我认为最严重的是,如果蓝牙管理器在终止该应用程序时切换状态iOS堆栈)。由于蓝牙状态开关不会导致您的应用重新启动,因此仅意味着在任何时间点可能会丢失您的待处理连接,而您将不知道。这有效地意味着国家恢复是没有用的。您可以说这不是一个错误,而是一个糟糕的设计选择……

另一个是有时框架"卡住"状态(可能是通过内部种族条件或类似状态)。这可以随机发生,但是您可以通过立即在didFailToconnect或DidDisconnect回调中调用ConnectPheral来轻松地复制此功能。发生这种情况时,连接态将设置为连接,而实际上不是。

等等…

/anton

最新更新