Page 1 of 1

iOS17蓝牙连接失败解决方案

Posted: 2024年 Dec 31日 14:42
by God of BLE

背景

之前经常收到客户反馈蓝牙连接超时的报错。由于该问题之前没有必现路径,一般都是告知客户重启app或者重启蓝牙即可正常。嵌入式在近期的开发中频繁遇到无法连接的问题,并找到了必现路径,找到我们进行现场排查,才发现蓝牙底层库的缺陷。

复现路径

该问题属于偶现问题,目前发现的必现路径是:蓝牙连接后因为各种原因断连(断电、信息交互失败、拉锯太远、配网失败等),过一会,重新对设备发现连接,将无法连接蓝牙设备,日志上报超时错误,需要重启App才能恢复。

问题原因

使用nRF和lightblue三方app按照上述步骤进行对比测试

1.iOS16 nRF回连成功,lightblue回连成功

2.iOS17 nRF回连失败,lightblue回连成功

观察页面lightBlue每次是重新扫描刷新的,那么大概nRF的系统CBPeripheral对象是在内存中不更新的,且不更新的去连接的逻辑,从iOS17开始禁用。

编写demo验证了该猜想。而涂鸦的CBPeripheral对象从第一次发现设备之后就一直在整个APP生命周期中使用,导致在iOS17上无法连接蓝牙设备。

结论:在IOS17以后,不用最新系统发现回调的CBPeripheral对象去链接,有概率无法回连成功