iosbluetooth-lowenergycore-bluetoothnrf51

CoreBluetooth on iOS10: Timeout after CBPeripheral discoverServices


Our App connects to Bluetooth LE Devices via CoreBluetooth.

On iOS 8 and 9 everything works correctly. On iOS 10 we geht a Timeout Error (Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly.")
in the CBCentralManagerDelegate:

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error;

after calling discoverServices on a connected CBPeripheral.

Does anyone know whats going wrong? Is this an iOS 10 issue? Is there a certain BLE Log to check?

Setup iOS 10.0.1 (14A403) on iPad Pro 9.7 with a Nordic Semiconductor nRF51822


Solution

  • OK, I solved the Problem. I mixed up CBUUID and NSUUID
    starting with iOS 10 CBPeripheral discoverServices only accepts CBUUID. NSUUID does not work anymore. Maybe NSUUID only worked accidentally on older iOS versions. The documentation clearly states:

    A list of CBUUID objects representing the service types to be discovered.

    NSArray *services = @[
        [CBUUID UUIDWithString:ServiceUUID] //Correct
        //[[NSUUID alloc] initWithUUIDString:ServiceUUID] //Does work on iOS 9 but not on iOS 10
    ];
    [self.peripheral discoverServices:services];
    

    looking forward to port the app to strongly typed Swift.