hello
We found that our app had a lot of crashes on iOS 26. The crash stack showed [CBXpcConnection _sendBarrier]. The following is the crash log:
Thread 0 name: com.apple.main-thread (cpu_usage: 0.00%)
1
libsystem_kernel.dylib
_semaphore_wait_trap (in libsystem_kernel.dylib)
2
libdispatch.dylib
__dispatch_sema4_wait (in libdispatch.dylib)
3
libdispatch.dylib
__dispatch_semaphore_wait_slow (in libdispatch.dylib)
4
CoreBluetooth
-[CBXpcConnection _sendBarrier] (in CoreBluetooth)
5
CoreFoundation
___CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ (in CoreFoundation)
6
CoreFoundation
____CFXRegistrationPost_block_invoke (in CoreFoundation)
7
CoreFoundation
__CFXRegistrationPost (in CoreFoundation)
8
CoreFoundation
__CFXNotificationPost (in CoreFoundation)
9
Foundation
-[NSNotificationCenter postNotificationName:object:userInfo:] (in Foundation)
10
UIKitCore
___47-[UIApplication _applicationDidEnterBackground]_block_invoke (in UIKitCore)
11
UIKitCore
+[UIViewController _performWithoutDeferringTransitionsAllowingAnimation:actions:] (in UIKitCore)
12
UIKitCore
-[UIApplication _applicationDidEnterBackground] (in UIKitCore)
13
UIKitCore
___101-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]_block_invoke_2 (in UIKitCore)
14
UIKitCore
__UIScenePerformActionsWithLifecycleActionMask (in UIKitCore)
15
UIKitCore
___101-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]_block_invoke (in UIKitCore)
16
UIKitCore
-[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] (in UIKitCore)
17
UIKitCore
-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] (in UIKitCore)
18
UIKitCore
-[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] (in UIKitCore)
19
UIKitCore
___186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke (in UIKitCore)
20
UIKitCore
+[BSAnimationSettings(UIKit) tryAnimatingWithSettings:fromCurrentState:actions:completion:] (in UIKitCore)
21
UIKitCore
__UISceneSettingsDiffActionPerformChangesWithTransitionContextAndCompletion (in UIKitCore)
22
UIKitCore
-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] (in UIKitCore)
23
UIKitCore
__64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke.218 (in UIKitCore)
24
UIKitCore
-[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] (in UIKitCore)
25
UIKitCore
-[UIScene scene:didUpdateWithDiff:transitionContext:completion:] (in UIKitCore)
26
UIKitCore
-[UIApplicationSceneClientAgent scene:handleEvent:withCompletion:] (in UIKitCore)
27
FrontBoardServices
__76-[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:]_block_invoke.129 (in FrontBoardServices)
28
FrontBoardServices
-[FBSScene _callOutQueue_maybeCoalesceClientSettingsUpdates:] (in FrontBoardServices)
29
FrontBoardServices
-[FBSScene updater:didUpdateSettings:withDiff:transitionContext:completion:] (in FrontBoardServices)
30
FrontBoardServices
__94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2.cold.1 (in FrontBoardServices)
31
FrontBoardServices
___94-[FBSWorkspaceScenesClient _queue_updateScene:withSettings:diff:transitionContext:completion:]_block_invoke_2 (in FrontBoardServices)
32
FrontBoardServices
-[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] (in FrontBoardServices)
33
libdispatch.dylib
__dispatch_client_callout (in libdispatch.dylib)
34
libdispatch.dylib
__dispatch_block_invoke_direct (in libdispatch.dylib)
35
BoardServices
___BSSERVICEMAINRUNLOOPQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ (in BoardServices)
36
BoardServices
_BSServiceMainRunLoopSourceHandler (in BoardServices)
37
CoreFoundation
___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (in CoreFoundation)
38
CoreFoundation
___CFRunLoopDoSource0 (in CoreFoundation)
39
CoreFoundation
___CFRunLoopDoSources0 (in CoreFoundation)
40
CoreFoundation
___CFRunLoopRun (in CoreFoundation)
41
CoreFoundation
__CFRunLoopRunSpecificWithOptions (in CoreFoundation)
42
GraphicsServices
_GSEventRunModal (in GraphicsServices)
43
UIKitCore
-[UIApplication _run] (in UIKitCore)
44
UIKitCore
_UIApplicationMain (in UIKitCore)
Thanks
Core Bluetooth
RSS for tagCommunicate with Bluetooth 4.0 low energy devices using Core Bluetooth.
Posts under Core Bluetooth tag
187 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Recently, I've noticed that background Bluetooth scanning stops when I move an app to the background on an iPhone 17 device with Bluetooth 6. I'm curious about a solution. Background Bluetooth scanning doesn't stop on devices older than iOS 26, or on devices that were updated from an iPhone 17 or earlier to iOS 26.
PLATFORM AND VERSION
Model - iPhone 13 Pro Max (Potentially for other models also)
OS - iOS 26
DESCRIPTION OF PROBLEM :
BLE discoverability (advertising) is not working on iOS 26 but works reliably on older iOS versions.
Details: Our app acts as a Bluetooth peripheral. When advertising, the app only adds CBAdvertisementDataLocalNameKey in advertisement data.
Format of local name - "NTDI:103202400001"
We have observed that in iOS 26, the local name is getting truncated. This breaks the parsing logic in our IOT device central code, which expects the full local name to be present. We have also observed that some extra data is getting added to the advertisement data by the OS.
As of now, updating the IOT device logic for parsing is not possible.
STEPS TO REPRODUCE
Create an instance of CBPeripheralManager.
Start advertising with a local name with the format "NTDI:103202400001"
Capture the advertisement data using a Bluetooth sniffer tool.
Observe that the local name is getting truncated
Legacy ADV_IND as received by IoT device (truncated name):
HCI Event: LE Meta Event (0x3e) plen 27
LE Advertising Report (0x02)
Event type: ADV_IND (0x00)
Data length: 15
Flags: 0x1a
TX power: 12 dBm
12 09 4e 54 44 49 3a 31 30 ..NTDI:10
RSSI: -47 dBm
Only partial Local Name (“NTDI:10…”) is present in this primary PDU.
Is it possible to avoid the extra data introduced by iOS or avoid local name truncation?
Our app scans Bluetooth in the background.
However, the iPhone 17 device does not scan in the background.
ios 26
Is there anything I need to do?
Hello.
Is there a solution to the issue where Core Bluetooth does not run in the background on the iPhone17?
https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html
The bluetooth-central Background Execution Mode
When an app that implements the central role includes the UIBackgroundModes key with the bluetooth-central value in its Info.plist file, the Core Bluetooth framework allows your app to run in the background to perform certain Bluetooth-related tasks. While your app is in the background you can still discover and connect to peripherals, and explore and interact with peripheral data. In addition, the system wakes up your app when any of the CBCentralManagerDelegate or CBPeripheralDelegate delegate methods are invoked, allowing your app to handle important central role events, such as when a connection is established or torn down, when a peripheral sends updated characteristic values, and when a central manager’s state changes.
Although you can perform many Bluetooth-related tasks while your app is in the background, keep in mind that scanning for peripherals while your app is in the background operates differently than when your app is in the foreground. In particular, when your app is scanning for device while in the background:
The CBCentralManagerScanOptionAllowDuplicatesKey scan option key is ignored, and multiple discoveries of an advertising peripheral are coalesced into a single discovery event.
If all apps that are scanning for peripherals are in the background, the interval at which your central device scans for advertising packets increases. As a result, it may take longer to discover an advertising peripheral.
These changes help minimize radio usage and improve the battery life on your iOS device.
Recently, I've noticed that background Bluetooth scanning stops when I move an app to the background on an iPhone 17 device with Bluetooth 6. I'm curious about a solution. Background Bluetooth scanning doesn't stop on devices older than iOS 26, or on devices that were updated from an iPhone 17 or earlier to iOS 26.
Our app scans Bluetooth in the background.
However, the iPhone 17 device does not scan in the background.
ios 26
Is there anything I need to do?
The setting values are as follows.
device
connection interval min : 60
connection interval max : 75
***** latency : 0
supervision timeout : 4000
advertising interval : 20
Our app scans Bluetooth in the background.
However, the iPhone 17 device does not scan in the background.
ios 26
Is there anything I need to do?
device1
connection interval min : 60
connection interval max : 75
***** latency : 0
supervision timeout : 4000
advertising interval : 20
We are develop an application with corebluetooth framework. we connect to device with ble. and open two l2cap channels. it can transfer data with stream. but when it close the second l2cap channel, it always close the first l2cap channel.
Dear Apple Team,
We are reaching out regarding several compatibility issues our app users have encountered after upgrading to iOS 26. These issues not only affect our application but also seem to impact the system's native settings, which has raised concerns about the universality of these problems.
Problem Description
Bluetooth Functionality: When users attempt to use the Bluetooth feature within our app after upgrading to iOS 26, the app freezes completely. What's more, when accessing the Bluetooth section in the system Settings app, it also freezes and ultimately crashes.
Location Service: The location service on the device becomes inoperable after the iOS 26 upgrade. However, both the Bluetooth and location service issues are resolved after the user restarts the device.
2. Questions
Universality: We are eager to know if these issues are exclusive to our app or are a more widespread problem among other applications on iOS 26. Are these known compatibility glitches in iOS 26?
Avoidance: Is there any guidance or best - practice that we, as developers, can follow to avoid these issues in our app? For example, are there specific API calls or configurations that need to be adjusted?
System - level Impact: If these are system - level bugs related to Bluetooth and location services, will they affect all apps that rely on these features? Or are there certain app - level mitigations that can be implemented?
We would greatly appreciate it if you could provide us with any insights, solutions, or information regarding these issues. Your prompt response will be crucial for us to address these problems and ensure a smooth user experience for our customers.
Thank you in advance for your assistance.
Best regards,
I am currently developing a BLE device that connects to iPhone and transmits a large amount of data within a certain period of time. The BLE device sends data to iPhone under the following conditions, but the transfer speed does not meet my expectations. Could you guys tell me how I can further increase the transfer speed.
Conditions:
iPhone14 Pro iOS 17.0
Connection Interval = 15ms
More Data Flag = valid
Characteristic sending = Notification
Environment:
iOS Version: 26.0
Device Model: iPhone 12 Pro Max
Peripheral: [Fill in peripheral name/model/firmware version]
Steps to Reproduce:
Connect to the peripheral using CoreBluetooth.
Discover services via discoverServices.
Discover characteristics via discoverCharacteristics.
Call setNotifyValue:YES for a characteristic that supports notifications (Notify or Indicate).
Capture the HCI log during the above process.
Expected Result:
After calling setNotifyValue:YES, CoreBluetooth should write the appropriate value to the Client Characteristic Configuration descriptor (UUID: 0xFCF8) to enable notifications, and subsequent notifications should be received from the peripheral.
Actual Result:
After calling setNotifyValue:YES, no subscription action is triggered.
HCI logs show that the subscription write to the CCC descriptor (0xFCF8) is missing.
The target service and characteristic values have already been discovered prior to calling setNotifyValue:YES.
Additional Information:
HCI log screenshot attached below highlights the moment after setNotifyValue:YES was invoked, showing no GATT Write Request to the CCC descriptor.
Full HCI log file is also attached for reference.
11:29:38:165: Call setNotifyValue: YES
Hi Team,
I’ve tried downloading the EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig certificate from multiple sources, but all the links I found point to expired versions.
Could you please help me with the URL to the latest version of this certificate?
Here are the links I’ve already tried, but none of them worked:
https://project-chip.github.io/connectedhomeip-doc/guides/darwin.html#profile-installation
https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/darwin.md
Apple Site
Looking forward to your support.
Thanks,
Mantosh Kumar
I work for a large medical device company.
We have a 1st party BLE enabled medical device that must be very battery efficient. To this end, if a connection is lost, the BLE radio is powered down after 60 seconds and will only turn back on when a physical button on the device is pressed.
I've been tasked with connecting to the device, staying connected to the device, and being able to retrieve data from the device upon a timed action. For instance, this could include a data read and transmission while they sleep. The key part of this is staying reliably connected for extended periods of time.
This is a BYOD setup, and we cannot control power profiles.
I would very much appreciate any information, recommendations, and/or insights into solving this problem.
Thanks!
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Tags:
External Accessory
iOS
Application Services
Core Bluetooth
Hello world!
Given some suitable byte sequences b1, b2 and a Bluetooth Low Energy device that provides two GATT characteristics c1 and c2, can I call CBPeripheral.writeValue(b1, c1) and then CBPeripheral.writeValue(b2, b2) without waiting for the callback of the corresponding CBPeripheralDelegate to occur for the first write operation to c1 and without causing one of both operations to fail due to iOS's BLE implementation? Is there any official documentation or specification that states what would or could happen in such scenario?
The background of this question is that on Android, you usually can only perform one GATT operation on a single BluetoothGatt instance at a time. Consecutive operations, even for different characteristics, that do not await the callback invocations of previously requested GATT operations, usually just fail. However, experimenting with CBPeripheral, I can see that such accesses seem to be working on iOS. Now, is that undefined behavior and I am just observing a forgiving implementation or this actually specified behavior?
I would be glad about any hints or comments on this matter that have foundation in the official Apple developer documentation or any official Bluetooth specification. Since I already tried my luck with search engines, I would assume that this is just undefined behavior. Thank you!
Regards, Luis.
macOS15.6 Bluetooth status always returns CBManagerStateUnsupported
Apple recently announced DL-TDoA (Downlink TDoA) support on iOS 26, and the API is currently marked Beta. Using two iPhones (16 Pro and 13) on iOS 26.0 Beta, I’m starting a Nearby Interaction session and need to read NITLDOA parameters (address, carrier frequency offset, signal strength/RSSI), but I can’t find a supported way. I’m also seeing asymmetry: iPhone 13 reports distance+direction, while 16 Pro reports distance only. Is there a supported workflow/API to access those parameters, and any known device/OS constraints that would cause direction to be unavailable on 16 Pro?
Hi all,
In InfiniTime, somebody finally implemented ANCS which forced iOS to encrypt the ble connection. As a result, my PineTime appears in the battery widget. Unfortunately, I only get a Bluetooth logo as the icon. Ideally it would be a smartwatch glyph. The GAP appearance value is being set to 0xC2 (smartwatch)
Note: I've used CMF watches in the past, and they display with a smartwatch icon
Any thoughts?
Application has specified the bluetooth-central background mode.
Peripheral Device(BLE) is connected to the iPhone.
Application will initiate a request 'retrieveConnectedPeripheralsWithServices' along with list of services to scan for.
Application will receive a list of peripherals connected to the system whose service UUID's match.
From the list of peripherals, application will initiate a request 'connectPeripheral' with the interested peripheral along with the option set to 'CBConnectPeripheralOptionEnableAutoReconnect'. This option is available from iOS 17+.
CBConnectPeripheralOptionEnableAutoReconnect - This option will help in reconnect back to peripheral when peripheral becomes available. (Turn OFF and Turn ON)
How do we achieve the same thing in earlier IOS version
Hello, dear Apple engineers.
We have recently tried to pair our Android phones and iPhones via BLE SMP, but have encountered a very high probability of pairing failures. Through PacketLogger and Android phone HCI, we have determined that the issue is caused by the iOS side sending an SMP Pairing Failed message during the SMP process. Please help us analyze the reason for this.