是否可以以编程方式访问CoreBluetooth记录的错误代码?

我正在iPhone上实现一个BLE中央设备,使用开发的定制BLE设备作为外围设备(其固件由同事编写)。

某些操作的外设将返回BLE错误代码,符合BLE规范中定义的标准蓝牙ATT错误代码。

在iPhone方面,我正在使用CoreBluetooth堆栈来开发中央设备,我在xCode的调试器输出窗口上收到此类错误的通知:

CoreBluetooth [警告]未知错误:XX

然后我在回调中收到一个CBError *对象。 我的问题是我在回调中得到的CBError *对象(例如,在CBPeripheralDelegate的didWriteValueForCharacteristic回调中)只包含code = 0和localizedDescription =“Unknown error”。

是否有可能以某种方式检索CoreBluetooth堆栈在调试器输出窗口上记录的错误代码?

根据我的研究,似乎CoreBluetooth几乎将所有BLE标准错误代码映射到“未知错误”(内部代码为0,参见CBError参考 ); 我想获得更详细的错误代码,如CBAttError编码的代码 。

在应用程序中,您只能使用CoreBluetooth API。 那些只暴露CBError,正如你在许多情况下看到的那样可以掩盖真正的错误。 因此,正式访问源错误的答案是您无法做到这一点。

但是,如果需要,可以以编程方式访问Apple系统日志。 (请参阅文章: 使用Objective C读取发布到设备控制台的日志消息 )您可以定义查询以返回您感兴趣的项目,并尝试扣除错误的真正原因。 这是一种启发式方法,但不幸的是,目前我们没有其他方法可以做到这一点。