问题来了,iOS 18 的蓝牙权限弹框怎么不弹了?
最近有小伙伴在用 iOS 18 的手机开发 App 时遇到了一个问题:蓝牙权限弹框怎么都不弹出来,而且 CBCentralManager 的状态一直显示 Unknown。这可怎么办呢?别急,苏承栈这就来帮你排查一下。
一、问题排查
首先,我们来看看 Info.plist 文件,权限文案有没有漏配?配置是有的,所以不是这个问题。
然后,我们再看看 CBCentralManager 的写法,初始化和状态回调都正常,那问题出在哪呢?
我们加了几行日志,发现 CBCentralManager 创建成功了,但状态一直停在 Unknown,而且 centralManagerDidUpdateState: 永远不回调。
经过一番排查,我们发现这是 iOS 18.0 和 18.0.1 的系统 Bug,Apple 在 iOS 18.1 中已经修复了这个问题。
二、解决方案
既然是系统 Bug,那我们有两种解决方案:
- 升级系统到 iOS 18.1 或更高版本。
- 在代码里做一次自动兜底,如果 centralManagerDidUpdateState: 在 5 秒内还没回来,就销毁当前 CBCentralManager,重新创建一次。
如果自动重试也没救,那就提示用户重启手机。
三、小结与拓展
好了,今天的问题就讲到这里。如果你还有其他问题,欢迎在评论区留言,苏承栈会尽力帮你解答。另外,别忘了关注极星编程网(www.jxgpc.com),这里有更多精彩的技术内容等你来发现。
—— 苏承栈,极星编程网资深编辑
