Post

Replies

Boosts

Views

Activity

Reply to BLE advertising/scanning communication broken on iPhone 17 — CBPeripheralManager + CBCentralManager workflow
On iPhone 17 (N1), our app advertises a custom 128-bit service UUID via CBPeripheralManager.startAdvertising() (opcode encoded in UUID, no GATT). peripheralManagerDidStartAdvertising succeeds, and nRF Connect on another iPhone clearly shows kCBAdvDataServiceUUIDs: 074700FE-.... The same command from iPhone 14 causes our embedded sensor nodes to react; from iPhone 17 they do not, even though scanners see the packet. Is the 128-bit UUID being placed in scan response or overflow on N1 while Apple scanners merge ADV+scan response? Is there a supported way to force the service UUID into the primary legacy ADV PDU for non-Apple receivers? We can provide sysdiagnose and sniffer captures from iPhone 14 vs 17.
Topic: App & System Services SubTopic: Hardware Tags:
Jul ’26
Reply to BLE advertising/scanning communication broken on iPhone 17 — CBPeripheralManager + CBCentralManager workflow
this is actually happening when we do self.peripheralManager?.startAdvertising(self.uuidData) ? do you have any idea.? func startAdvertiser(uuid: CBUUID, timeout: Double) -> Single<AdvertiserErrorCode> { return Single.create { emitter in Utils.blePrint("@startAdvertiser uuid: \(uuid.uuidString), timeout: \(timeout), state: \(self.peripheralManager?.state.rawValue ?? -1), isAdvertising: \(self.advertising)") if (self.peripheralManager?.state == CBManagerState.poweredOn) { self.timeout = timeout self.uuidData = [ CBAdvertisementDataServiceUUIDsKey: [uuid] ] self.emitter = emitter self.restartAdvertising() } else { Utils.blePrint("@startAdvertiser BT not powered on, state: \(self.peripheralManager?.state.rawValue ?? -1)") emitter(.success(AdvertiserErrorCode.BLUETOOTH_NOT_ON)) } return Disposables.create { } } }
Topic: App & System Services SubTopic: Hardware Tags:
Feb ’26
Reply to BLE advertising/scanning communication broken on iPhone 17 — CBPeripheralManager + CBCentralManager workflow
On iPhone 17 (N1), our app advertises a custom 128-bit service UUID via CBPeripheralManager.startAdvertising() (opcode encoded in UUID, no GATT). peripheralManagerDidStartAdvertising succeeds, and nRF Connect on another iPhone clearly shows kCBAdvDataServiceUUIDs: 074700FE-.... The same command from iPhone 14 causes our embedded sensor nodes to react; from iPhone 17 they do not, even though scanners see the packet. Is the 128-bit UUID being placed in scan response or overflow on N1 while Apple scanners merge ADV+scan response? Is there a supported way to force the service UUID into the primary legacy ADV PDU for non-Apple receivers? We can provide sysdiagnose and sniffer captures from iPhone 14 vs 17.
Topic: App & System Services SubTopic: Hardware Tags:
Replies
Boosts
Views
Activity
Jul ’26
Reply to BLE advertising/scanning communication broken on iPhone 17 — CBPeripheralManager + CBCentralManager workflow
this is actually happening when we do self.peripheralManager?.startAdvertising(self.uuidData) ? do you have any idea.? func startAdvertiser(uuid: CBUUID, timeout: Double) -> Single<AdvertiserErrorCode> { return Single.create { emitter in Utils.blePrint("@startAdvertiser uuid: \(uuid.uuidString), timeout: \(timeout), state: \(self.peripheralManager?.state.rawValue ?? -1), isAdvertising: \(self.advertising)") if (self.peripheralManager?.state == CBManagerState.poweredOn) { self.timeout = timeout self.uuidData = [ CBAdvertisementDataServiceUUIDsKey: [uuid] ] self.emitter = emitter self.restartAdvertising() } else { Utils.blePrint("@startAdvertiser BT not powered on, state: \(self.peripheralManager?.state.rawValue ?? -1)") emitter(.success(AdvertiserErrorCode.BLUETOOTH_NOT_ON)) } return Disposables.create { } } }
Topic: App & System Services SubTopic: Hardware Tags:
Replies
Boosts
Views
Activity
Feb ’26