I am developing a macOS app that acts as a BLE peripheral using CBPeripheralManager.
On one MacBook M2, an established BLE connection to a central drops approximately every 14 seconds indefinitely.
The disconnect is reported as a supervision timeout. Immediately before the timeout, the controller reports excellent RF conditions, but the peripheral stops receiving packets and all transmitted packets become unacknowledged.
I can reproduce this with a minimal ~150-line sample project that publishes one service with a single notify characteristic and does nothing else. I use LightBlue on an iPhone as the central.
Hardware
Failing:
MacBook Air 15" M2
macOS 26.6 and macOS 26.6.2
BLE peripheral implemented with CBPeripheralManager
Bluetooth controller: BCM_4387, firmware 23.5.636.5347, PCIe
Working:
MacBook Pro 16" M1
macOS 26.6
identical application/build
On the MacBook M1, the identical sample holds the connection indefinitely.
I tested with the same iPhone and LightBlue central, as well as another iPhone.
The affected MacBook M2 Mac also worked correctly for approximately one month before the problem appeared suddenly after a normal restart.
There was no application or OS update immediately before the failure.
Updating the affected MacBook from macOS 26.6 to 26.6.2 did not change the behavior.
Reproduction:
Run the minimal CBPeripheralManager sample on the M2.
Publish one service with one notify characteristic.
Connect from LightBlue on an iPhone.
Subscribe to the characteristic.
Leave the connection idle.
The connection repeatedly drops after approximately 14 seconds.
Running the identical sample on the MacBook M1 with the same macOS version and the same central works indefinitely.
On the failing Mac, bluetoothd reports:
lsto: 72 (720 ms supervision timeout)
RSSI approximately -46 dBm
SNR 60+
receiver initially synchronized
during the final ~30 connection events before each timeout:
zero packets received
every transmitted packet is unacknowledged
So this does not appear to be a marginal-RF situation. The peripheral appears to stop receiving the central's connection-event packets, after which its own transmissions are no longer acknowledged and the controller eventually declares a supervision timeout.
I have already tried:
resetting Bluetooth settings
restarting the Mac
restarting bluetoothd
restarting rapportd
disabling Handoff (was already disabled)
disabling AirPlay (was already disabled)
Safe Mode
Bluetooth/system diagnostics
None changed the behavior.
There are no other applications involved in the reproduction; the minimal sample alone reproduces the problem on MacBook M2, works on MacBook M1 properly.
Could anything in CBPeripheralManager usage account for this behavior, such as connection parameters, peripheral latency, or supervision timeout configuration?
I have not found a public CBPeripheralManager API that allows the peripheral to configure connection interval, peripheral latency, or supervision timeout. The Generic Access service also appears to be reserved by the system.
Given that the identical peripheral application works indefinitely on another MacBook M1 running the same macOS version, could this indicate a Bluetooth controller/firmware or macOS Bluetooth stack issue affecting only some Mac hardware/configurations or system states?
I can provide the minimal reproduction project and relevant bluetoothd/Bluetooth controller logs.
The sample does not reproduce the issue on the MacBook M1, so the reproduction appears to be dependent on the affected MacBook M2 rather than the application alone.
1
0
364