You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CoreBluetooth在iPhone与Mac上的差异:制造商数据丢失问题

CoreBluetooth在iPhone上无法获取BLE广播的制造商数据(Mac正常)

我使用CoreBluetooth监听BLE设备的广播数据,以提取所需的制造商数据字节。代码在搭载硅芯片的Mac上运行正常,能获取预期数据;但在iPhone上运行完全相同的代码时,CBAdvertisementDataManufacturerDataKey对应的键完全不存在,制造商数据缺失。其他应用(如nRF Connect)可正常提取该数据。

相关代码片段

centralManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])

...

if let manufacturerData = fullAdvertisementData[CBAdvertisementDataManufacturerDataKey] as? Data {
    ... // iPhone上不会进入这里,因为数据不存在
}

可能的解决方向

  • 检查蓝牙权限配置
    iPhone对蓝牙权限的管控比Mac更严格:

    1. 在Info.plist中添加NSBluetoothAlwaysUsageDescription(iOS 13+推荐)或NSBluetoothPeripheralUsageDescription,填写明确的权限申请说明。
    2. 进入iPhone「设置-隐私与安全性-蓝牙」,确认应用已开启蓝牙权限。
  • 排查广播包长度限制
    BLE广播包总长度通常限制为31字节,iPhone可能会截断超出长度的广播数据,而Mac的处理逻辑更宽松。通过nRF Connect查看广播包总长度,若接近或超过31字节,需调整BLE设备的广播内容,精简非必要数据。

  • 尝试定向扫描服务UUID
    iPhone的CoreBluetooth对无过滤的全量扫描可能存在特殊处理逻辑,尝试指定目标设备的服务UUID进行扫描:

    let targetServiceUUID = CBUUID(string: "你的设备服务UUID")
    centralManager.scanForPeripherals(withServices: [targetServiceUUID], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
    
  • 检查iOS版本差异
    不同iOS版本的CoreBluetooth对广播数据的解析逻辑可能存在差异,尝试将iPhone升级至最新iOS版本后重新测试。

  • 打印完整广播数据排查
    在iPhone上打印fullAdvertisementData的所有键值对,确认制造商数据是否被解析到其他字段中:

    print("完整广播数据: \(fullAdvertisementData)")
    

内容的提问来源于stack exchange,提问作者Owen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:08:19