跳转到主内容
极星编程网:以代码为星,赴技术山海!

iOS 18 蓝牙权限弹框不弹?CBCentralManager 一直 Unknown 的解决办法

问题来了,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),这里有更多精彩的技术内容等你来发现。

—— 苏承栈,极星编程网资深编辑

相关文章