Hello. I am building a BLE device that is Activity Fitness based and would like a "System Level" BLE connection on WatchOS using an ESP32 (I have built a test of this on the firmware side). Meaning I do not want my iOS app to pass the BLE connection to the WatchOS app. It seems like these App Level connections do not get as many background updates as a System Level connection, and also requires the WatchOS app to be launched to connect to the BLE device
The System Level BLE connection (WatchOS Settings > BLE > Health Devices) allows for auto connection in the background, and gets more reliable background communication between the BLE device and the Apple Watch
On the Apple MFi Page it only mentions iOS:
From Apple MFi Page:
:: Who does NOT need to join -
Developers and manufacturers of accessories that connect to an Apple device using only Bluetooth Low Energy, Core Bluetooth, or standard Bluetooth profiles supported by iOS
Does this apply to WatchOS as well?
So, if I am making an BLE device that is Activity Based, and has one of the allowable Health Device UUIDs, is the BLE System Connection allowed using any BLE chip? Including say an ESP32
I have built a test BLE firmware that is a Health Device UUID, and the WatchOS sees it as a health device
Is this fine then? No need for MFi application and also no need to worry about which BLE chip is used?
thanks
Hardware
RSS for tagDelve into the physical components of Apple devices, including processors, memory, storage, and their interaction with the software.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I’m encountering an unexpected issue while using NEHotspotConfigurationManager.shared.apply(...) to connect to a Wi-Fi network. Specifically, I’m receiving a userDenied error, even though the user did not interact with any system prompt.
Here’s a version of the code I’m using:
let config = NEHotspotConfiguration(ssid: ssid, passphrase: passphrase, isWEP: false)
// config.joinOnce = true
NEHotspotConfigurationManager.shared.apply(config) { error in
if let err = error {
let nsErr = err as NSError
mlog("err.code:\(nsErr.code)")
if nsErr.code == NEHotspotConfigurationError.alreadyAssociated.rawValue {
self.findWiFiListAndConnect(ssid, passphrase, overtimeSec, timeStart)
} else {
self.cmdDelegateQueue.async {
self.delegate?.wifiClose(nsErr.code)
}
}
}
}
The error returned is:
wifiClose status: 7
Which corresponds to NEHotspotConfigurationError.userDenied. According to the official Apple documentation, this error should only occur when the user explicitly cancels the system dialog. However, in my case:
• No system dialog appears.
• The user does nothing, yet the error is still returned.
• This issue does not happen every time, but it has been observed across multiple devices.
Additional info:
• iOS version: 18.5
• Device model: iPhone
• joinOnce is not set (defaults to false)
• Existing configuration is removed using removeConfiguration(...) before applying
Is it possible that under certain system states (e.g. backgrounded, network restrictions, or app permissions), iOS silently fails without showing the prompt?
Has anyone else encountered this issue, or does anyone know what could cause this behavior?
Any help is greatly appreciated!
我在Core Bluetooth中发现了连接数量相关的错误码:CBError.Code.connectionLimitReached。
但是并没有找到最大连接数量相关的定义。请问在哪里可以找到最大连接数量相关的定义?
We have an application that is built for communication for emergency first responders. Our app streams video from emergency responder mobile devices to other responders, however, when the app moves into the background, or the screen locks, the stream is terminated. Is there a way to allow the stream to persist.
Topic:
App & System Services
SubTopic:
Hardware
We have developed a live iOS application, built using Swift and UIKit, that enables users to connect via Bluetooth to an EV charging box. Once connected, users can start and stop the charging process directly from the app.
The app also requires an active internet connection initially, as it uses server-side functionality to select and authorize the charging box. However, we recently discovered an issue affecting users on iPhone 14 and iPhone 15 models, specifically when the device enters Satellite mode (Emergency SOS via Satellite) — i.e., when there is no mobile data or Wi-Fi.
In this mode, the system Satellite screen is triggered and Bluetooth stops functioning, preventing our app from connecting to the EV box. Users are unable to proceed, even though the app would still be usable via Bluetooth once the box is selected.
We have already declared required Bluetooth background modes (bluetooth-central, bluetooth-peripheral) in Info.plist, and the app functions perfectly outside of this scenario. However, the behavior in Satellite mode appears to either disable Bluetooth entirely or restrict access from third-party apps.
We’d like to know
Is this the expected default behavior on iOS in Satellite mode?
Is there any entitlement or exception available to allow Bluetooth access in such emergency scenarios (especially for critical utilities like EV charging)?
Can an app like ours be made visible under the Satellite settings, or request access under this mode?
This is a concern for users in remote or basement locations where mobile data is unavailable, and they rely solely on Bluetooth to charge their vehicles.
Please advise if there is a workaround or planned support in future iOS versions.
Thank you.
I'm using AirPods Pro 2 with an iPhone 15 Pro Max. After installing the IOS 26 beta I'm not able to get the new features to work. Does anyone have thoughts or info? Thanks
Hello, I put the mac into hard reset, deleted all data and prepared for sale. But the restore did not complete and is in boot loop
Can't go into recovery mode
It is completely bricked or can be somehow "revived" as I read on the apple website. Thank you
I have bought iphone 16 pro max on October 28, ( 9 months ago) and rarely dropped by battery health below 20%. I also set limit to 80% so I can preserve my Battery Health. I am not a multitasking user. I used fan to keep the phone cool during charging. But today I update to iOS26 public beta, It dropped to 99% at 88 Cycle which is quite low cycle. Many other user are getting their battery health dropped to 99% after 120, 130+ cycle with daily usage. Why mine got dropped after updating. I am quite unhappy with it, and iOS 26 is so jittery in my phone
Hello,
The application I'm working on must report new hardware connections. To retrieve connected displays information and monitor new connections, I'm using the "Core Graphics" framework (see recommendation https://developer.apple.com/forums/thread/779945).
The monitoring logic relies on a callback function which invokes when the local display configuration changes(kCGDisplayAddFlag/kCGDisplayRemoveFlag).
#import <Cocoa/Cocoa.h>
static void displayChanged(CGDirectDisplayID displayID, CGDisplayChangeSummaryFlags flags, void *userInfo)
{
uint32_t vendor = CGDisplayVendorNumber(displayID);
if (flags & kCGDisplayAddFlag)
{
if (vendor == kDisplayVendorIDUnknown)
{
NSLog(@"I/O Kit cannot identify the monitor. kDisplayVendorIDUnknown. displayId = %u", displayID);
return;
}
NSLog(@"%u connected. vendor(%u)", displayID, vendor);
}
if (flags & kCGDisplayRemoveFlag)
{
NSLog(@"%u disconnected", displayID);
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool
{
CGDisplayRegisterReconfigurationCallback(displayChanged, NULL);
NSApplicationLoad();
CFRunLoopRun();
}
return 0;
}
The test environment is a Mac mini with an external display connected via HDMI. Everything works correctly until the system enters sleep mode. Upon wakeup, the app reports two displays: the first with vendor ID kDisplayVendorIDUnknown and the second with the expected vendor ID.
Why does Core Graphics report two connections during wakeup? Is there any way to avoid this?
Thank you in advance.
Hello,
I would like to discuss the behavior of the expiration of NFCPresentmentIntentAssertion (test in iOS 18.5).
In the documentation we have :
The intent assertion expires if any of the following occur:
The intent assertion object deinitializes
Your app goes into the background
15 seconds elapse
BUT; in fact ; only the 1st rule is applied.
The expiration seems to be random after the usage of CardSession and that's difficult to give to the user a good experience.
Has someone faced the same kind of issue; or can give an explanation?
Regards,
François
I am writing to seek assistance regarding an iBeacon implementation issue we are experiencing in our iOS application.
Issue Description: We have successfully implemented iBeacon functionality in our app, but we are encountering a specific problem with background region monitoring:
When app is in foreground: Our app successfully detects iBeacon signals and triggers notifications when entering beacon regions.
When app is terminated: Our app fails to respond when entering our own iBeacon regions. However, we have observed an interesting behavior:
Third-party iBeacon apps can still detect and trigger notifications for their beacon regions
After a third-party app triggers, our app suddenly starts receiving notifications for our own iBeacon hardware
Technical Details:
iOS Version: 18.0
Xcode Version: 16.。4
Device Models Tested: iPhone 15 Pro
Questions:
What could be causing our app to fail detecting iBeacon regions when terminated, while third-party apps work correctly?
Why does our iBeacon detection start working only after another iBeacon app triggers?
Are there specific implementation requirements or best practices for reliable background iBeacon monitoring?
Could this be related to iOS background app refresh policies or system resource management?
Current Implementation: We have implemented the standard Core Location framework with:
CLLocationManager with appropriate authorization
Region monitoring setup with CLBeaconRegion
Background modes enabled for location services
Proper delegate methods implemented
We would greatly appreciate your guidance on resolving this issue, as it significantly impacts our app's user experience.
Thank you for your time and support.
Topic:
App & System Services
SubTopic:
Hardware
I am debugging ImageCaptureCore to communicate with external cameras.
When I called the PTP function below to send a command and add data, the response timed out for more than 5 seconds. After waiting for a period of time, I obtained the response. However, the response callback function obtained responsivData.length as zero and ptpResponseData.length as zero too.
(void)requestSendPTPCommand:(NSData *)ptpCommand
outData:(NSData *)ptpData
completion:(void (^)(NSData *responseData, NSData *ptpResponseData, NSError *error))completion;
data is below:
Wrote 1 = 0x1 bytes PTP:send data: (hexdump of 1 bytes)
[ ] I/PTP (14564): 0000 01 - .
Topic:
App & System Services
SubTopic:
Hardware
We have recently encountered an App crash, as shown in the picture.
We call this function as:
let session = AVAudioSession.sharedInstance() guard session.currentRoute.outputs.isEmpty == false else { return false }
The TestFlight caught this issue, and the iOS device information is attached:
Do you have any suggestions to avoid this crash?
Topic:
App & System Services
SubTopic:
Hardware
We are preparing to implement document signing using USB tokens on iOS and macOS. Several other applications already support this feature.
From my testing and development efforts, I've been unable to reliably access or utilize certificates stored on a smartcard through the iOS APIs. Here are the specifics:
Environment
iOS: 15 and later
Xcode: Versions 18 and 26
Smartcard/Token: ePass 2003 (eMudhra), Feitien token (Capricorn)
Observed Issue :
The token is recognized at the system level, with certificates visible in Keychain Access.
However, programmatic access to the private keys on the smartcard from within the app is not working.
Signing attempts result in Error 6985 and CACC errors.
Approaches Tried:
Updated provisioning profiles with the following entitlements:
com.apple.developer.smartcard
com.apple.security.device.usb
TKSmartCard
Employed TKSmartCard and TKSmartCardSession for interaction.
The token is detected successfully.
A session can be established, but there's no straightforward method to leverage it for certificate-based signing.
Access to signing functions is unavailable; operations yield Error 6985 or CACC errors.
if let smartCard = TKSmartCard(slot: someSlot) {
smartCard.openSession { session, error in
if let session = session {
let command: [UInt8] = [0x00, 0xA4, 0x04, 0x00]
session.transmit(Data(command)) { response, error in
print("Response: \(String(describing: response))")
print("Error: \(String(describing: error))")
}
}
}
}
TokenKit (macOS/iOS)
- Utilized TKTokenWatcher to identify available tokens on macOS (not available on iOS).
watcher.setInsertionHandler { tokenID in
print("Token detected: \(tokenID)")
}
CryptoKit / Security Framework
- Attempted to retrieve SecCertificate using SecItemCopyMatching queries, which succeeded on macOS but failed on iOS.
let query: [CFString: Any] = [
kSecClass: kSecClassCertificate,
kSecReturnRef: true,
kSecMatchLimit: kSecMatchLimitAll
]
var items: CFTypeRef?
let status = SecItemCopyMatching(query as CFDictionary, &items)
print("Status: \(status)") // macOS succeeds, iOS fails
ExternalAccessory Framework (EAAccessory)
* Investigated using EAAccessory and EASession for external token communication, but it did not function as expected.
This functionality is critical for my project. Has anyone successfully implemented smartcard-based signing on iOS? Any guidance, sample code, or references to relevant Apple documentation would be greatly appreciated.
Topic:
App & System Services
SubTopic:
Hardware
Tags:
iOS
Apple CryptoKit
USBDriverKit
CryptoTokenKit
Hello, we are developing hardware that needs to connect to an iPhone via Wi-Fi to send requests to a server. On Android, we have managed to create a programmatic local hotspot within the app to facilitate connection and improve the user experience.
On iOS, however, Personal Hotspot must be manually enabled from the system settings, and the user must manually enter the SSID and password, which significantly degrades the UX.
My questions are:
Is there a workaround, unofficial method, or private API to generate a local hotspot from an app on iOS, similar to what can be done on Android?
Is there an alternative within the MFi program or through specific frameworks to facilitate a quick and automatic connection between the hardware and the iPhone without relying on the manual Personal Hotspot?
Are there any best practices for improving the local Wi-Fi connection experience between an accessory and an iPhone in the absence of hotspot controls?
I would appreciate any guidance, experience, or resources that would help me better understand the feasible options in iOS for scenarios where fast and direct communication between hardware and mobile devices via Wi-Fi is required.
Translated with DeepL.com (free version)
Topic:
App & System Services
SubTopic:
Hardware
For what iPhone and iPad models under iOS 26 SpeechTranscriber.isAvailable is true
Hi everyone — I’m developing an iOS passkey/password manager where the private key material must be stored on a physical device (NFC card / USB token). I’m hitting a hard limitation: CoreNFC is not available for use from app extensions, which prevents an appex (e.g. password/credential provider or other extension) from talking directly to an NFC card during an authentication flow. 
My questions:
1. Is there any plan to make CoreNFC (or some limited NFC-API) available to app extensions in a future iOS version? If not, could Apple clarify why (security/entitlements/architecture reasons)?
2. Are there any recommended/approved workarounds for a passkey manager extension that needs to access a physical NFC token during authentication? (For example: background tag reading that launches the containing app, or some entitlement for secure NFC card sessions.) I’ve read about background tag reading, but that seems to be about system/OS handling of tags rather than giving extensions direct NFC access. 
3. Is the only supported pattern for my use case to have the containing app perform NFC operations and then share secrets with the extension via App Groups / Keychain Sharing / custom URL flow? (I’m already evaluating App Groups / Keychain access groups for secure sharing, but I’d like official guidance.) 
Implementation details that may help responders:
• Target: iOS (latest SDK), building a Credential Provider / password manager extension (appex).
• Intended physical token: NFC smartcard / ISO7816 contactless (so CoreNFC APIs like NFCISO7816Tag would be ideal).
• Security goals: private key never leaves the physical token; extension should be able to trigger/sign during a browser/app AutoFill flow.
Possible alternatives I’m considering (open to feedback): designing the UX so that the extension opens the main app (only possible for Today widget in a supported way) which runs the NFC flow and stores/returns a short-lived assertion to the extension. Are any of these patterns sanctioned / recommended by Apple for credential providers? 
Thanks — any pointers to docs, entitlement names, or example apps/samples would be extremely helpful.
Since I updated my iPhone 13 to this new update I have two problems
First: the battery discharges too fast or it gets stuck and doesn't discharge until I turn it off and turn it back on.
Second: I see in my screen time a page that I had never seen is called imasdk.googleapis.com which I had never occupied and they tell me that it is a failure of the new update
I hope you can help me fix that, since this mobile phone is new and already brings the faults by the ios
I have an iOS/iPadOS app and 'm trying to communicate with usb smart card reader using CryptoTokenKit on all platforms (ios/ipados/macos).
Minimal Repro Code
import CryptoTokenKit
import SwiftUI
struct ContentView: View {
@State var status = ""
var body: some View {
VStack {
Text("Status: \(status)")
}
.padding()
.onAppear {
let manager = TKSmartCardSlotManager.default
if manager != nil {
status = "Initialized"
} else {
status = "Unsupported"
}
}
}
}
And my entitlement file has only one key:
com.apple.security.smartcard = YES
Behavior
• iPadOS (on device): status = "Initialized" ✅
• macOS (native macOS app, with the required CryptoTokenKit entitlement): status = "Initialized" ✅
• macOS (Designed for iPad, regardless of CryptoTokenKit entitlement): status = "Unsupported" → TKSmartCardSlotManager.default is nil ❌
Expectation
Given that the same iPadOS build initializes TKSmartCardSlotManager, I expected the iPad app running in Designed for iPad mode on Apple silicon Mac to behave the same (or to have a documented limitation).
Questions
Is CryptoTokenKit (and specifically TKSmartCardSlotManager) supported for iPad apps running on Mac in Designed for iPad mode?
If support exists, what entitlements / capabilities are required for USB smart-card access in this configuration?
If not supported, is Mac Catalyst the correct/only path on macOS to access USB smart-card readers via CryptoTokenKit?
Are there recommended alternatives for iPad apps on Mac (Designed for iPad) to communicate with USB smart-card readers (e.g., ExternalAccessory, DriverKit, etc.), or is this scenario intentionally unsupported?
Thanks!
I have poked around the web looking for a good example to do this and I haven't found a working example.
I need to connect to a USB Device, its multiple ports and supports what looks to be a root port and 4 other ports
I am no expert in USB but I do know how to write a kext and client drivers, but thats really not the way to solve this.
I need to display the serialized output from these USB ports for a development board.
I would rather do this on my Mac than have to cobble up a Linux machine and mess around with Linux.
Here is the output from ioreg
MCHP-Debug@03100000 <class IOUSBHostDevice, id 0x105f6fdc2, registered, matched, active, busy 0 (20 ms), retain 27>
MCHP-Debug@0 <class IOUSBHostInterface, id 0x105f6fdc8, registered, matched, active, busy 0 (13 ms), retain 5>
+-o MCHP-Debug@0 <class IOUSBHostInterface, id 0x105f6fdc8, registered, matched, active, busy 0 (13 ms), retain 5>
+-o MCHP-Debug@1 <class IOUSBHostInterface, id 0x105f6fdc9, registered, matched, active, busy 0 (11 ms), retain 5>
+-o MCHP-Debug@2 <class IOUSBHostInterface, id 0x105f6fdcb, registered, matched, active, busy 0 (9 ms), retain 5>
| | | | | +-o MCHP-Debug@3 <class IOUSBHostInterface, id 0x105f6fdcc, registered, matched, active, busy 0 (7 ms), retain 5>
I have been able to open a inservice to the device at the top level, but I get an error when I use.
usbHostInterface = [[IOUSBHostInterface alloc] initWithIOService:usbDevice
options: IOUSBHostObjectInitOptionsNone
queue: queue
error: &error
interestHandler: handler];
Error:Failed to create IOUSBHostInterface. with reason: Unable to obtain configuration descriptor.
Assertion failed: (usbHostInterface), function main, file main.m, line 87.
I started using DeviceKit but I received signing errors and I shouldn't have to go down that path just to dump data from a USB port?
Any suggestions would be great, most of the Apple documentation on USB ports is like 20 years old and the new stuff pushes you towards DeviceKit.