CoreBluetooth [ОШИБКА] Соединение XPC прервано, сброс

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


person Kamala Tennakoon    schedule 01.03.2013    source источник
comment
Пожалуйста, добавьте более подробную информацию об исключении   -  person Niroshan Abayakoon    schedule 01.03.2013
comment
Я тоже столкнулся с этой проблемой на своем Mac Mini @ 10.9 (для приложения Mac я использую IOBluetooth/IOBluetooth.h вместо CoreBluetooth/CoreBluetooth.h, все остальное то же самое). Я заметил, что эта проблема не возникает, если я одновременно передаю некоторые данные по Wi-Fi. 500 кбит/сек достаточно, чтобы избавиться от этой проблемы. Как только я прекращаю передачу данных по Wi-Fi, проблема возникает снова. Я подозреваю, что основная причина заключается в проблеме синхронизации, т. Е. В стеке CoreBluetooth есть что-то, что происходит быстрее, чем ожидалось, поэтому проблема в том.   -  person Sergey    schedule 04.11.2013
comment
Я получаю эту проблему на Mac Mini конца 2012 года (набор микросхем Broadcom: 20702B0, версия прошивки: v78 c8621), работающем под управлением 10.9 Mavericks (версия программного обеспечения Apple Bluetooth 4.2.0f6 12982). CBCentralManager прерывает соединение XPC, а затем сбрасывает себя всегда через 500 мс после подключения к периферийному устройству. Попытка @Sergey передать данные через Wi-Fi с помощью nc, похоже, не помогла. С другой стороны, я не сталкиваюсь с этой проблемой на более старом Mac Mini середины 2011 года (набор микросхем Broadcom: 20702A3, версия прошивки: v131 c5495), также работающем под управлением Mavericks.   -  person yonran    schedule 06.12.2013


Ответы (4)


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

В моем случае кажется, что исключение в 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 «Строка серийного номера» в службе 180A «Информация об устройстве», и демон blued создает из нее NSString* и помещая его в NSmutableDictionary. Временный обходной путь состоит в том, чтобы сделать setObject:forKey: никогда не ошибаться в blued, перейдя к ближайшей команде 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
person yonran    schedule 15.02.2014
comment
Просто чтобы добавить к этому. Если во время разработки вы столкнетесь с плохой таблицей GATT в OSX, вы сбросите ее, перезагрузив компьютер. Я потратил два часа, пытаясь понять, почему я не могу обнаружить какие-либо службы, прежде чем пытаться перезагрузить компьютер. Перезагрузка решила. Плохие таблицы GATT можно очистить на iOS, отключив адаптер и снова включив его (это очистит кеш GATT). - person Sandy Chapman; 26.03.2014
comment
@SandyChapman, для некоторых неправильных записей GATT перезапуска недостаточно. См. раздел Кэширует ли blued значения ATT и как очистить кеш? для удаления вручную. - person yonran; 26.03.2014
comment
Как вы получили трассировку стека? Я работаю на iOS, и все, что я получаю, это журнал - person André Fratelli; 10.08.2015
comment
@AndréFratelli, трассировка стека, которую я получил, была получена из-за сбоя в OSX, и она доступна в консоли в разделе «Диагностика». Мне не приходилось получать отчеты о сбоях системных демонов на iOS, но, надеюсь, это руководство окажется полезным: Chromium: получение отчетов о сбоях на iOS - person yonran; 10.08.2015
comment
испытал нечто подобное - было решено путем сброса настроек сети на iOS, который очистил кеш устройства Bluetooth. - person Cherpak Evgeny; 17.02.2016

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

person mindbomb    schedule 18.03.2013
comment
Все, пожалуйста, продолжайте сообщать в Apple. Нам нужно заставить их решить эти проблемы. Я также получаю те же ошибки, и это совершенно неприемлемо. - person Tommy Devoy; 05.04.2013
comment
такая же проблема здесь. Запуск 10.9.2 на Macbook PRO Retina 15. - person valvoline; 26.03.2014

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

person SuperGuyAbe    schedule 16.03.2015

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

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

Надеюсь, эта подсказка не разовая ;-)

person andreas-supersmart    schedule 21.10.2016