CoreBluetooth [ERROR] Соединение XPC прервано, сброс

Когда я пытаюсь подключиться к Bluetooth LE с помощью своего приложения iphone. Это приводит к прерыванию соединения CoreBluetooth [ERROR] XPC, сбросу. Почему?

Ответ 1

"CoreBluetooth [ERROR] Соединение XPC прервано, сброс" означает, что демон blued разбился. Вы можете увидеть более подробную информацию, открыв консоль и посмотрев системный журнал и DiagnosticReports.

В моем случае кажется, что исключение внутри blued происходит потому, что SerialNumber где-то ничто. У меня нет обходного пути и сообщил об этом bugreport.apple.com(ошибка 16075785).

Метод, который фактически вызывает исключение, является детерминированным, но зависит от компьютера. На одном компьютере с внутренним чипом Bluetooth 4.0 это вызов -[CBPeripheral discoverCharacteristics:forService:]. На другом компьютере с USB-адаптером Bluetooth 4.0 это вызов -[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 устройства содержит недопустимое значение не UTF8 для характеристики 2A25 "Serial Number String" в Service 180A "Информация об устройстве", а blued-daemon создает NSString * от него и помещая его в NSMutableDictionary. Временным обходным путем является создание setObject: forKey: никогда не терпит неудачу, если вы прыгаете до ближайшей команды ret:

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

Ответ 2

Случается со мной тоже - особенно при запуске сканирования CBCentralManager (CM) когда я останавливаю CM-сканирование и перезапускаю его - он обычно разрешается. Я боюсь, что это ошибка в реализации CoreBluetooth.

Ответ 3

Я получил этот сбой при добавлении сервиса в CBPeripheralManager. Оказывается, у меня была неприятная опечатка (без ошибок компилятора или предупреждений) в моих методах, чтобы получить некоторые характерные идентификаторы. Таким образом, пара характеристик была создана с идентификаторами nil. Все, что я получил, это ошибка в журналах под iOS 7.1.1, и при просмотре журналов устройств обнаружены отчеты о сбоях BTServer. Мое устройство с iOS 8.1.2 не записывало это на консоль, поэтому, возможно, было еще хуже, чтобы найти проблему.

Ответ 4

Случайно нашел еще одну причину этой ошибки: USB-концентратор и плохое подключение или питание сделали мою среду отладки поврежденной. Это означает, что сообщение об ошибке было зарегистрировано нерегулярно.

Больше на моем Odyssee: Обычно я подключаюсь непосредственно к машине сборки, но когда я получил эту проблему, она была подключена через USB-концентратор моего монитора. Я перезапустил Xcode, перезапустил buildmachine без успеха. Забавный факт: та же настройка работала правильно уже 3 дня, но в пятницу (сегодня) подключение к отладчику было неохотным.

Надеюсь, что этот намек не вызывает удивление, -)