react-native-ble-plx搭配Expo Run时iOS端构建失败问题求助
报错原因
该value of optional type 'CBService?' must be unwrapped to a value of type 'CBService'报错是react-native-ble-plx库iOS原生代码的Swift类型校验兼容问题,仅出现在Xcode 14及以上版本搭配Expo SDK 47及以上版本的iOS构建环境中,Android端不受影响。
可行解决方法
方案一:使用兼容版本依赖(操作最简单,优先级最高)
- 卸载当前安装的react-native-ble-plx:
npm uninstall react-native-ble-plx - 安装经过验证的兼容版本:
npm install react-native-ble-plx@2.0.3 - 删除项目根目录下的
ios文件夹、node_modules文件夹、package-lock.json文件 - 重新执行依赖安装:
npm install - 再次运行iOS构建命令:
expo run:ios -d即可正常构建
- 卸载当前安装的react-native-ble-plx:
方案二:补丁修复(需要使用最新版ble-plx时选择)
- 安装patch-package工具:
npm install patch-package --save-dev - 找到
node_modules/react-native-ble-plx/ios/RNBlePlx/Converter.swift文件,将所有直接调用CBService属性的位置添加强制解包符号! - 执行补丁生成命令:
npx patch-package react-native-ble-plx,补丁会自动保存到项目根目录的patches文件夹 - 重新执行
expo run:ios -d即可正常构建
- 安装patch-package工具:
配置校验项
确认app.json中蓝牙插件的配置包含正确的权限声明,示例配置如下:{ "expo": { "plugins": [ [ "@config-plugins/react-native-ble-plx", { "bluetoothAlwaysPermission": "App需要蓝牙权限连接周边设备", "bluetoothPeripheralPermission": "App需要蓝牙权限连接周边设备" } ] ] } }
内容的提问来源于stack exchange,提问作者Tymoxx
相关产品推荐
相关产品推荐

