Соединение CoreBluetooth XPC недействительно при запуске viewcontroller

После того, как я завершил отсоединение от своих устройств Bluetooth, увидев, что они отключились в делегате didDisconnectPeripheral, я пытаюсь отклонить мой контроллер view.

Когда это произойдет, я вижу сообщение: "[CoreBlueooth] Неправильное подключение XPC"

Есть ли что-то конкретное, которое нужно очистить с помощью Bluetooth до того, как диспетчер просмотра будет уволен?

Ответ 1

Я разместил CBCentralManager в одноэлементном режиме, и сообщение об ошибке было решено.

(CBCentralManager не будет освобожден)

Ответ 2

Я получил следующее сообщение:

[CoreBlueooth] Неверное подключение XPC

И я не смог сканировать устройства BLE, используя довольно простую реализацию:

NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>

Решение для меня состояло в том, чтобы добавить значение в мое Info.plist для Конфиденциальность - описание периферийного использования Bluetooth NSBluetoothPeripheralUsageDescription, описывающее, что я делаю с периферийным устройством Bluetooth.

Похоже на Info.plist:

<key>NSBluetoothPeripheralUsageDescription</key>
<string>Play with BLE Compatible devices<string>

Напишите здесь что-то более точное;)

Ответ 3

Ссылка CBCentralManager должна быть строгой ссылкой на класс как переменную-член. Он не может работать как локальная ссылка.

Ответ 4

попробуйте следующее:

CBPeripheral *mConnectedPeripheral;

-(void)viewDidDisappear:(BOOL)animated{
    [_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}

Ответ 5

Хорошо, я столкнулся с этой проблемой, и после попытки добавить необходимый ключ в Info.plist он все еще работал, и у меня не было представления о том, чтобы использовать его в данный момент (это было в AppDelegate). Так что, если это все еще не работает для вас, попробуйте следующее.

Я использовал для: (в Swift)

_ = BluetoothMngr.init(config: bleConfig)

Проблема здесь заключалась в том, что переменная, управляющая Bluetooth, не была сохранена, поэтому, когда мы добавляем обратный вызов BLE, они заканчиваются пустым классом, поэтому просто создайте глобальную переменную, в которой она будет сохранена (вот почему она работает с синглтоном, и просмотрите их сохраняются) вот так.

self.bleMngr = BluetoothMngr.init(config: bleConfig)

Работал на меня, надеюсь, это поможет.

Ответ 6

В моем случае я отключил тестовую среду приложения от возможностей, и это сработало

Ответ 7

Та же проблема произошла, когда я переместил все свои методы BLE в выделенный класс (BLEController) и сохранил ViewController в чистоте. Сначала я попытался инициализировать его внутри класса ViewController следующим образом:

let _ = BLEController()

Это приводит к проблеме "Недопустимое соединение XPC". Что действительно помогло, так это переместить объект в класс AppDelegate. Если честно, я понятия не имею, почему это помогло и в чем разница.