Hi Core Bluetooth team,
I’m seeking official clarification on iOS system-level BLE connection management policy, specifically regarding idle timeouts.
Question:
When iOS disconnects a BLE peripheral with the error:
"The connection has timed out unexpectedly."
Is this timeout enforced:
Per peripheral (each connection has its own idle timer), or
Per app / per Bluetooth radio session (one idle timer for all BLE connections in the app)?
In other words:
Does a single GATT operation (e.g., a write or notification) on any one peripheral reset the idle timeout for all other BLE connections in the same app?
Context (General, No App Code):
This is about system behavior, not a bug in any specific app.
Applies to foreground and bluetooth-central background mode.
No state restoration involved.
iOS 17–18, all modern devices.
Why This Matters:
If per-app, one keep-alive can protect multiple peripherals → simplifies design.
If per-peripheral, each connection needs independent activity → higher power use.
Reference:
Core Bluetooth docs recommend “regular GATT operations” but don’t specify scope.
WWDC sessions mention “shared Bluetooth radio” but not timeout granularity.
Official Answer Requested:
Is the BLE idle timeout per peripheral or per app/radio session in iOS?
Thank you for the authoritative guidance.
Selecting any option will automatically load the page