iOS BLE Connection Timeout Policy: Per-Peripheral or Per-App Radio Session?

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:

  1. Per peripheral (each connection has its own idle timer), or
  2. 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.

iOS BLE Connection Timeout Policy: Per-Peripheral or Per-App Radio Session?
 
 
Q