When my Bluetooth peripheral device has both HID and MIDI services, the iOS Bluetooth host repeatedly sends different "Control Opcode: LL_CONNECTION_UPDATE_IND" to the peripheral, updating approximately every 100ms.
The Bluetooth peripheral cannot handle such high-frequency update requests and typically disconnects with an error 0x28. My Bluetooth device uses the NRF52832 chip, and I have communicated with NORDIC and replicated this issue.
This problem only occurs on iOS 26; it does not happen on earlier versions. I think it might be caused by the HID service in iOS requesting faster connection parameters for low latency, which then gets erroneously reverted for an unknown reason, leading to repeated competition and entering into a deadlock.
Here is the communication record with NORDIC: https://devzone.nordicsemi.com/f/nordic-q-a/124994/ios-26-bluetooth-disconnect-issues
This is the screenshot captured using the Bluetooth sniffer:
Playground Bluetooth
RSS for tagDisplay and manage connections to Bluetooth peripherals in Swift Playgrounds using Playground Bluetooth.
Posts under Playground Bluetooth tag
4 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I am using a Raspberry Pi 5 (BLE 5.0) to read sensor data and send it via D-Bus and BlueZ to a Flutter application (flutter_blue_plus) for both iOS and Android. The goal is to display these real-time sensor updates directly on the device.
On Android, the data transmission is immediate and the real-time visualization is extremely smooth and fast. However, on iOS, both BLE write and notification commands appear with noticeable latency—not only in real-time displays, but also when comparing ordinary notification feedback between the Raspberry Pi terminal and the iOS app. It seems that iOS buffers several BLE packets internally and then dispatches them in batches, which always introduces an additional delay.
Additional setup details:
I sample and transmit data every 25ms, sending binary packets of 20 bytes (length shouldn’t be a limiting factor).
On the iOS side I am using an iPhone 15 Pro with iOS 18.6.2 (BLE 5.3).
The Raspberry Pi (using btmon for logging) confirms after connection setup that the connection interval is fixed at 30ms (and cannot be changed).
I have tried sending BLE packets every 30ms so that exactly one packet arrives per interval, but this made no difference—the latency and batch delivery remain.
Interestingly, faster transmission rates (e.g. sending every 10ms) make the real-time display look smoother on iOS, but the guaranteed overall system latency does not improve.
Also these methods used: write-without-response, using app in release modus (no debugging)
Is there anyone familiar with this problem or a potential solution?
Or is iOS simply not optimized for true real-time BLE data streaming and visualization?
Any pointers, technical insights or workarounds would be greatly appreciated.
Topic:
App & System Services
SubTopic:
Core OS
Tags:
IOBluetooth
iOS
Playground Bluetooth
Core Bluetooth
Hello.
In my app, I need to implement the following mechanism: I need to collect data from nearby Bluetooth devices, process them, and send this information to the server at short intervals, including when the app is minimized. Is this possible on iOS?
BGProcessingTask has restrictions related to battery saving policies and does not guarantee task execution at specific intervals. Additionally, there is a limitation on background task execution, which can occur no more frequently than every 15 minutes.
However, some apps, such as Google Maps, work in the background and update geolocation data. Could you suggest a solution for this task?
Thanks for any help on this topic
Topic:
App & System Services
SubTopic:
Core OS
Tags:
IOBluetooth
External Accessory
Playground Bluetooth
Core Bluetooth
Hello,
Our device firmware has a companion iOS app that allows a user to rename it. We are connected to the iPhone via BT Classic. The new name is reflected on the app, however, the iPhone BT device list still shows the old name. It doesn't seem to get updated to the new name unless we unpair/re-pair the device to the phone.
Is there a way to get the iPhone to update to the new name in the Settings BT device list without unpairing the device? Is this possible in BT Classic?
Thanks.
Topic:
App & System Services
SubTopic:
Core OS
Tags:
IOBluetooth
Playground Bluetooth
Core Bluetooth