当我尝试使用我的 iphone 应用程序连接蓝牙 LE 时。它给 CoreBluetooth[ERROR] XPC 连接中断,重置。为什么。?
4 回答
“CoreBluetooth[ERROR] XPC 连接中断,正在重置”表示blued
蓝牙守护进程已崩溃。您可以通过打开控制台并查看系统日志和诊断报告来查看更多详细信息。
就我而言, blued 中的异常似乎是因为 SerialNumber 在某处为零。我没有解决方法,已将其报告给 bugreport.apple.com(错误 16075785)。
实际导致异常的方法是确定性的,但因计算机而异。在一台具有内部蓝牙 4.0 芯片的计算机上,调用-[CBPeripheral discoverCharacteristics:forService:]
. 在另一台带有蓝牙 4.0 USB 适配器的计算机上,调用-[CBPeripheral writeValue:forCharacteristic:type:]
或-[CBPeripheral setNotifyValue:forCharacteristic:]
'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: SerialNumber)'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff91b1141c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff9231de75 objc_exception_throw + 43
2 CoreFoundation 0x00007fff91a0c62e -[__NSDictionaryM setObject:forKey:] + 1102
3 blued 0x0000000103d5d422 blued + 336930
4 blued 0x0000000103d4b115 blued + 262421
5 IOBluetooth 0x00007fff97354093 -[IOBluetoothL2CAPChannel processIncomingData:] + 576
6 IOBluetooth 0x00007fff97353e3c -[IOBluetoothL2CAPChannel handleMachMessage:] + 45
7 Foundation 0x00007fff94d98e35 __NSFireMachPort + 94
8 CoreFoundation 0x00007fff91a42d04 __CFMachPortPerform + 388
9 CoreFoundation 0x00007fff91a42b69 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
编辑 2014-02-27:我的特定崩溃发生是因为设备 GATT 表包含服务 180A «设备信息»中的特征 2A25 «序列号字符串»的无效非 UTF8 值,并且 blued 守护程序正在从中创建一个 NSString*并将其放入 NSMutableDictionary。一个临时的解决方法是通过跳转到最近的 ret 命令使 setObject:forKey: 在 blued 内永远不会失败:
sudo /Applications/Xcode.app/Contents/Developer/usr/bin/lldb <<PID of blued>>
breakpoint set --fullname "-[__NSDictionaryM setObject:forKey:]" --condition "$rdx == 0"
breakpoint command add 1
register write pc `$pc+967`
continue
DONE
也发生在我身上 - 特别是当我停止 CM 扫描并重新启动它时启动 CBCentralManager (CM) 扫描时 - 它通常会得到解决。恐怕这是 CoreBluetooth 实现中的错误
我在向 CBPeripheralManager 添加服务时遇到了这个崩溃。事实证明,我在获取一些特征 id 的方法中有一个令人讨厌的错字(没有编译器错误或警告)。因此,使用 nil id 创建了几个特征。我得到的只是 iOS 7.1.1 下的日志中的这个错误,并且在查看我的设备日志时发现了 BTServer 崩溃报告。我的 iOS 8.1.2 设备没有将其记录到控制台,因此发现问题可能会更糟。
偶然发现了这个错误的另一个原因:USB集线器和连接或电源不佳导致我的调试环境损坏。这意味着它确实不定期地报告错误。
关于我的 Odyssee 的更多信息:通常我直接连接到构建机器,但是当我遇到这个问题时,它是通过我显示器的 USB 集线器连接的。我重新启动了 Xcode,重新启动了 buildmachine,但没有成功。有趣的事实:相同的设置现在可以正常工作 3 天,但是在星期五(今天)连接到调试器是不情愿的。
希望这个提示不是一次性的奇迹;-)