Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

AlarmKit alarms fire late (or not until you wake up the iPhone)
Hey all, I've submitted a couple Feedback reports on this (FB22887867 on iOS 26 and FB24483266 on iOS 27), but wanted to share here for 1. validation that I'm not the only one experiencing this issue and 2. ask for ideas or experience with potential workarounds. The issue is that AlarmKit alarms, even when properly configured and scheduled from an app, will intermittently fire late, or not fire at all until the iPhone is woken up. For example, you might create an AlarmKit alarm with a relative schedule for 6:00am, then lock your iPhone before bed. When 6:00am passes, nothing happens. Then, at 6:13am it fires (with the full screen alert, audio and haptics) Or, you might wake up at 6:53am, notice that it didn't fire, tap the screen on your iPhone, the Lock Screen displays for about a second, then all of a sudden, the AlarmKit alert presents (with the full screen alert, audio and haptics). The issue has been present from iOS 26.0 up through the iOS 27.0 RC. I'm fairly confident that this is not a configuration issue. I've reproduced it using the WWDC 25 AlarmKit sample code and if you read from AlarmManager.shared.alarms, these alarms show up as expected: with a scheduled state and the correct times. The issue seems to be more common overnight, when the iPhone has been asleep for a while. It's less common on my personal iPhone but occurs probably once out of every 3 to 5 alarms on my test iPhones (which have much less interaction and background activity etc.). Of our app's few thousand daily users, we get complaints at least once a day. I've dropped a few sysdiagnose reports into Claude. In every instance, it claims that when the alarm was scheduled, mobiletimerd successfully registered an XPC wake-up for the alarm. However, during a completely unrelated event overnight (ex: a wifi packet), launchd drops the scheduled wake-up and nothing re-schedules it. So when 6:00am rolls around, nothing wakes up the iPhone to let the alarm fire. On days when it fires late, it's simply because another unrelated event (ex: a wifi packet) woke up the iPhone while the late alarm was queued. Looking forward to hearing your thoughts. Thank you.
1
1
544
Sep ’26
CallKit does not activate audio session with higher probability after upgrading to iOS 18.4.1
Hi, We've noticed that this issue occurs more frequently after upgrading to iOS 18.4.1 and can result in one-way audio. Our app uses CallKit with WebRTC to establish VoIP connections. However, on iOS 18.4.1, CallKit no longer triggers: func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) We're currently comparing the occurrence rate across different iOS versions to better understand the impact. Could you please help analyze the root cause of this issue?
40
1
5.9k
Sep ’26
Is DeviceActivitySchedule a supported way to wake an extension for periodic work?
I'm building a parental-control app using FamilyControls, ManagedSettings and DeviceActivity. A guardian can lock a child's device from their own device, and the child's device applies the shield locally. The delivery problem: a background push can't wake our app once it has been force-quit, which is common on a child's device, so guardian-initiated changes sit undelivered until the child happens to open the app. I've found that DeviceActivityMonitorExtension still receives intervalDidStart / intervalDidEnd while the app is force-quit, and that a URLSession request started from the extension completes. So I could register a couple of short recurring DeviceActivitySchedule activities purely to wake the extension every ~15 minutes, check the server, and apply the resulting shield. My question: is using DeviceActivitySchedule purely as a wake mechanism — where the schedule doesn't correspond to any real usage-monitoring window — a supported use of the API, or is it working by accident? I'd rather not build on it if it's the latter. Two smaller ones, if anyone knows: Is network activity from the monitor extension expected to be given time to complete, and is there a documented execution budget? I've seen reports here that the extension stops being invoked after some days without the host app launching. Is that expected, and what re-arms it? If there's a supported mechanism for this that I've missed, I'd much rather use it.
0
0
162
Sep ’26
Internal PDF links stop working on iOS 27 / macOS 27 beta — every link opens the first page
On iOS 27 beta / Xcode 27.0, PDFDocument.write(to:) no longer serializes destinations for link annotations that are created at runtime. The annotation and its PDFActionGoTo action are both written, but the destination's page reference is not, so every internal link is dead. This worked correctly on iOS 26. PDFs generated on iOS 26 still navigate correctly; the same code on iOS 27 beta produces PDFs whose links are all dead.
2
4
1.4k
Sep ’26
Bundle preferred languages mechanism
Hi there, I’m curious to understand how the system determines which language to use for an app. The system is currently set to en-IN (English - India). My app supports the following languages: en (the default development language) en-GB (United Kingdom) en-IE (Ireland) en-US (United States) When I run the app, the Bundle.main.preferredLanguages returns [„en-GB“, „en“], which causes the app to be set to en-GB. However, when the app doesn’t support the preferred system language, I would expect it to default to the en language. Surprisingly, this is not the case. This behavior is precisely described in Technical Note TN2418. Unfortunately, there’s no explanation provided. Is this behavior related to the CLDR Linguistic Distance? I also attempted to replace the default development language en with en-001 (English - world), but it had no effect.
4
0
1.5k
Sep ’26
NSMetaDataQuery and MD-Spotlight Backed APIs Suddenly Stop Working
I'm testing code that uses NSMetadataQuery and I noticed some odd behavior. I run a query where the search scope is set to my Desktop directory. The predicate is set to search for a file name that contains 'we' (display name to be precise: kMDItemDisplayName). And I get no results. So I stop the app from Xcode then I create a new folder on the Desktop and name it we exactly. Then I rerun my app and start the query again - still no results. Unfortunately none of the Spotlight based APIs I'm using report errors. There is no delegate method -queryDidFailWithError: or anything like that. So in another place my app uses the lower level MD prefixed APIs in Core Services to read file metadata and I notice that those APIs are failing as well. Specifically I try to load metadata for a PNG image. I create an MDItemRef via MDItemCreateWithURL (and I do get an MDItemRef). Then I call MDItemCopyAttributes with the MDItemRef and an array of metadata attribute names: CFDictionaryRef fetchedData = MDItemCopyAttributes(mdItem, attributeNames); I step through it in the debugger and fetchedData is NULL. Since there is no error handling APIs available for any of this my app just silently fails. I have Console.app open when I step through MDItemCopyAttributes call in the debugger and this logs out every time: com.apple.spotlightserver Bad checksum on fetch attributes reply from store, 0x123ea456.... FWIW I do not have Spotlight indexing turned off on my system. Also jumping to Finder I'm experiencing the same failures (metadata isn't populating and the Desktop search for we produces no results). Actually on further inspection it looks like all searches are producing no results. Spotlight appears to be in a broken state system wide. I'm pretty sure a system restart will 'fix' it - until it starts occurring again. But for obvious reasons I'd like to avoid releasing a feature in my app that results in this kind of experience. Is there anything I can do on my end to workaround or avoid this issue? And tips or advice would be greatly appreciated.
2
0
600
Sep ’26
Low-level event-posting help needed.
Hi there, I am working on a little application which processes cursor and graphics tablet data and adds some extra control to the output. So far it makes use of... if let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap, //.cghidEventTap place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: eventMask, callback: handleTapEvent, userInfo: userInfo) ... to modify existing events. The issue that in some cases arises (it's a globally working app) - that some other applications pull and process pointer-data aside the event stream and therefor create conflicting values. Would creating and posting events to a 'virtual pointing device' on a lower system level (kext) help? Let's discuss. BR, E
1
0
914
Sep ’26
ShieldConfigurationExtension & SwiftData
Hi, I am developing a Screen Time App and I am having issues with the ShieldConfigurationExtension (ShieldConfigurationDataSource). I know this extensions is sandboxed but I should be able to read data from the main app. I am using SwiftData as my database, but I am unable to initialize it in the extensions with an error indicating insufficient file permissions. I have App Group set up and I am able to share data using UserDefaults but that is just inconvenient. Is there any way I could just open the SwiftData in read only mode so that I could display the user some info on the shield? SwiftData Init: private func setupContainer() throws { let schema = Schema([ DogEntity.self, HouseEntity.self ]) // Use app group container if available let config: ModelConfiguration if let containerURL = FileManager.default.containerURL( forSecurityApplicationGroupIdentifier: "group.\(Bundle.app.bundleIdentifier ?? "")" ) { config = ModelConfiguration(schema: schema, url: containerURL.appendingPathComponent("default.sqlite")) } else { config = ModelConfiguration(schema: schema) } self.container = try ModelContainer(for: schema, configurations: [config]) } Error in extension: fault: Attempt to add read-only file at path file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite read/write. Adding it read-only instead. This will be a hard error in the future; you must specify the NSReadOnlyPersistentStoreOption. error: (3) access permission denied error: Encountered exception error during prepareSQL for SQL string 'SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_METADATA'' : access permission denied with userInfo { NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite"; NSSQLiteErrorDomain = 3; } while checking table name from store: <NSSQLiteConnection: 0x154100300> error: Store failed to load. <NSPersistentStoreDescription: 0x15402d590> (type: SQLite, url: file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite) with error = Error Domain=NSCocoaErrorDomain Code=256 "The file “default.sqlite” couldn’t be opened." UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite, NSSQLiteErrorDomain=3} with userInfo { NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite"; NSSQLiteErrorDomain = 3; } Any help appreciated 🙂
2
0
395
Sep ’26
How to change the color of a PKInk in iPadOS27?
Hi, Shortly: On iPadOS27, when changing the color of a PKInk programmatically, it doesn't reflect in PKDrawing on screen. In all previous versions of iPadOS I was able to change the color of a PencilKit stroke via: canvasView.drawing.strokes[0].ink.color = .red And it changed on screen. As of iPadOS 27 - it doesn't. However, the underlying data is changing correctly: print(canvasView.drawing.strokes[0].ink.color) //prints: "UIExtendedSRGBColorSpace 0 0.533333 1 1" - blue color. canvasView.drawing.strokes[0].ink.color = .red print(canvasView.drawing.strokes[0].ink.color) //prints: "UIExtendedSRGBColorSpace 1 0 0 1" - red color, good. But the stroke stays blue on screen. I've filed a Feeback at FB24771438. And am using a temp workaround to "refresh" the drawing with: let current = canvasView.drawing canvasView.drawing = PKDrawing() //blank one canvasView.drawing = current IMHO, it should be possible to change the color like that and re-render it in the View right away, since the PKInk's .color property is a { get set } property. Is this the intended behavior? A bug or a feature? Thanks!
0
0
243
Sep ’26
How to read monitor built-in ambient light sensor in real time?
I’m developing a macOS menu-bar app intended for distribution on the Mac App Store. Is there a supported public API or an available entitlement that allows a sandboxed macOS app to read the built-in ambient light sensor in real time? The feature would be optional, process readings locally, and adjust display dimming and warmth. It would not use the camera or transmit sensor data. SensorKit’s ambient light API is unavailable on macOS in our SDK, and its research-only access and delayed data do not meet this use case. We want to avoid private APIs. Could you confirm whether a supported approach exists, or advise how to submit an enhancement request?
1
0
313
Sep ’26
Default App Clip URL (appclip.apple.com) shows website preview instead of triggering App Clip card
We have a published, approved App Clip that works correctly via QR code and the Safari Smart App Banner, but URL-based invocation does not trigger the App Clip card in any context. Most notably, Apple's own default App Clip URL does not work either: https://appclip.apple.com/id?p=hazel-torus.Clip **Tapping this link in Messages or Notes does nothing. ** Long-pressing it shows a generic website link preview rather than the App Clip card, even though appclip.apple.com is Apple's domain and requires no configuration on our end. Setup details: App Clip bundle ID: hazel-torus.Clip Team ID: 2UNR2APH47 App Clip experience URL: https://passportreader.app/open AASA includes a correctly formatted appclips key with 2UNR2APH47.hazel-torus.Clip (confirmed via https://app-site-association.cdn-apple.com/a/v1/passportreader.app that AASA is correctly cached) Associated Domains entitlements (appclips:passportreader.app) are present on the App Clip target App and App Clip experience are both Approved / Ready for Sale Tested on two physical devices, neither with the full app installed Since QR and Safari banner invocation work, the App Clip itself and its entitlements appear correctly configured. The fact that even Apple's own appclip.apple.com URL fails, and is treated as an arbitrary website link, suggests this may be a backend indexing issue specific to this App Clip rather than a client-side configuration problem. Has anyone else encountered this, or know what could cause appclip.apple.com to not be recognized as an App Clip URL?
23
0
1.9k
Sep ’26
Is there an API for detecting if NSMetadataQuery is unavailable for a given URL (as a search scope)?
If the user prohibits Spotlight in System Settings for a given directory and I set that URL as one of the search scopes on an NSMetadataQuery- I believe the query will return no results. Is there an API for detecting Spotlight unavailability? Ideally I would like to display something in the UI for this kind of situation to explain why a feature built on top of this API is not working.
0
0
373
Sep ’26
Nearby Interaction (UWB) becomes unusable after prolonged ranging sessions on iPhone 17
Hello, We are developing applications using Apple's Nearby Interaction framework for continuous UWB ranging between an iPhone and a UWB-enabled accessory. We have identified a reproducible issue on iPhone 17 where, after running several prolonged UWB ranging sessions (sometimes more than 2 hours), the UWB ranging functionality eventually enters a state where it no longer operates correctly. Once the issue occurs, restarting the application does not recover the UWB functionality. The iPhone must be fully restarted before UWB ranging starts working normally again. We strongly believe the issue is not related to application-specific logic but is a OS issue Device: iPhone 17 UWB: U2 iOS: iOS 26 & iOS 27 beta 4 Framework: Nearby Interaction Steps to reproduce Establish a Nearby Interaction UWB ranging session between the iPhone 17 and a compatible UWB device. Keep the ranging session running continuously for a prolonged period. Repeat this process several times if needed, using long-running sessions. Eventually, the OS will stop delivering didUpdate OS callbacks with ranging distance. After the issue occurs, start a new Nearby Interaction session. Actual result Once the issue occurs, a newly started UWB ranging session only delivers one valid didUpdate ranging callback to the application. After this first callback, no further valid ranging updates are delivered. The issue persists when: the current ranging session is stopped; the application is completely terminated; the application is launched again; a new Nearby Interaction session is created. The only way we have found to recover the device is to fully restart the iPhone. After restarting the phone, Nearby Interaction UWB ranging works normally again. The issue is not in the UWB accessory, the accessory will keep doing valid ranging with other phones, this is only affecting the iPhone that entered the invalid UWB state. Expected result After stopping a Nearby Interaction session and creating a new session, UWB ranging should start normally again, regardless of how many previous ranging sessions have been executed. Terminating and relaunching the application should also release any application-owned resources associated with the previous session. Request Could you please investigate whether this behavior is related to the Nearby Interaction framework, the iPhone 17 UWB subsystem, or an internal UWB state that is not correctly reset between ranging sessions? If any other iOS developer has experienced similar behaviour it would be great if you can share your findings. Material delivered I am attaching a console log that I captured on my iPhone 17. Here the prolonged session was already executed and UWB already entered the invalid state. The iPhone and the UWB accessory are close to each other. We can observe that valid ranging notification (didUpdate) is only delivered for the first ranging round, following ranging rounds will lead to error (the OS does not deliver ranging distance notfs anymore. After this the only way to recover UWB technology is to restart the iPhone. Let us know if you need any additional information for debugging this issue. Feedback assistant issue identifier: FB24484779 logs-iphone17-uwb-issue.rtf
1
0
533
Sep ’26
App Clip default invocation URL requires two taps to launch (first tap unresponsive) in Safari and Notes
I would like to clarify the expected behavior of a default App Clip link regarding tap responsiveness. Issue: When I tap the default App Clip invocation URL in Safari or the Notes app, the first tap does not respond (no App Clip card appears). Only the second tap successfully presents the App Clip card. Steps to Reproduce: Place the default App Clip URL in Safari (or Notes app) Tap the link once → no App Clip card appears Tap the same link again → App Clip card appears as expected Environment: Invocation source: Safari / Notes app App Clip type: Default App Clip experience (appclip.apple.com URL) Observation: This issue reliably occurs when there is no cached App Clip metadata on the device. When the metadata is already cached, the App Clip card appears on the first tap as expected. What I've already checked: Not in Private Browsing mode Question: Is this the expected behavior? Is there a recommended way to make the first tap reliably present the App Clip card even without a pre-existing cache? Thank you for your assistance.
2
1
812
Sep ’26
DeclaredAgeRange: older-iOS fallback and consent revocation for a server-free utility
I am integrating Declared Age Range into the initial release of an all-ages iPhone utility with an iOS 17 deployment target. It stores user-created records only on the device and has no app accounts, backend, in-app purchases, subscriptions or remotely accessible data. The planned distribution includes the United States. On iOS 26.4 and later, the planned implementation checks AgeRangeService.shared.requiredRegulatoryFeatures and requests a range when .declaredAgeRangeRequired is present. On iOS 26.2–26.3, it uses isEligibleForAgeFeatures. Returned age information would be used transiently on-device, without persistence or export. A requested boundary of 18 would not restrict this all-ages app to adults. Two technical points remain unclear: The current Q&A says existing Apple Accounts on iOS/iPadOS 18 or earlier are unaffected. What supported fallback should an app use for affected new accounts on older supported versions, including iOS 26.0–26.1 without the eligibility property? When a required eligibility or age-range request temporarily fails, is there documented guidance for the access/retry behavior of an all-ages app? The documented notAvailable outcome can represent refusal or unavailability; the implementation should not misreport either as a completed check. The Q&A says Apple prevents app launch after parental consent revocation and also directs developers to RESCIND_CONSENT App Store Server Notifications V2. For a utility with no server, app account or remote data/access to revoke, is any additional client action or notification endpoint required? If so, what technical mechanism should connect that action to the fully local installation? I am seeking the documented API and system behavior, not a determination of legal compliance. References: Age assurance Q&A Update for apps distributed in Texas Requesting an age range
0
0
385
Sep ’26
Asset Pack Creation Fail: Error reading Manifest.json
Hello, I've been following the Background Assets documentation, and so far everything has worked. However, when I attempt to archive my asset pack in Terminal, I receive the following error: Error: Reading the contents of the file at “Manifest.json” failed. I've double checked the provided instructions, tried archiving in different directories, and tried every permutation of Manifest.json I could think to try. Same error every time. Here's my Manifest.json code in case the issue is there. Thanks in advance! "assetPackID": "classic", "downloadPolicy": { "essential": { "installationEventTypes": [ "firstInstallation" ] } }, "fileSelectors": [ { "directory": "audio" }, ], "platforms": ["tvOS"] }
1
1
166
Sep ’26
CNContact poster
Hi all, From what I’ve seen on forums and other sources, it appears that nothing can be done to set the contact poster programmatically. Setting the imageData property affects only the thumbnail image. Does anyone know if this is explicitly documented somewhere? I need this information for a POC document. I watched the iOS 17 keynote (where it was introduced), the Platform State of Union, and other WWDC videos, but I couldn’t find any mention of it. The Contacts framework documentation only explains what can be retrieved from this property and doesn’t mention any way to set the contact poster. If anyone has any information on this, please help! Thanks in advance!
1
1
480
Sep ’26
iOS26 beta: AppClips are not working properly
Hi, As a company, we have several apps in the AppStore that contain AppClips. With the latest iOS18 it works without any problems. With all iOS26 betas so far, however, there is always the problem “ASDErrorDomain- Error 507” and the AppClip cannot be opened. You can easily test this by scanning the following QR code with the system camera: You only ever get this error instead of the option to open the AppClip. As the iOS26 beta phase is already at an advanced stage, we are naturally concerned as to whether the problem will be solved.
18
4
2.0k
Sep ’26
iOS 26.4 — How to return from main app to host app after a keyboard-extension dictation round-trip, without private APIs?
I'm building a custom keyboard extension that offers voice dictation. Because keyboard extensions are constrained (memory cap ~30–48 MB, restricted audio session access), I delegate recording to my container app: User in a host app (e.g., Safari) taps the mic in my keyboard extension. The keyboard calls extensionContext.open(URL("myapp://dictation")) to launch the container app. The container app records audio via AVAudioEngine + SFSpeechRecognizer, writes the final transcript to the App Group, and signals completion via a Darwin notification. 4. The user is expected to be returned to the original host app (Safari) automatically so they can keep typing. The problem (step 4): On iOS 26.4 I can no longer identify which app was the host. Every previously-known path returns nil for the keyboard extension's host: parent.value(forKey: "_hostBundleID") → returns the literal string parent.value(forKey: "_hostApplicationBundleIdentifier") → returns NSNull xpc_connection_copy_bundle_id on the underlying XPC connection (via PKService.defaultService.personalities[…]) → returns NULL NSXPCConnection.processBundleIdentifier on extensionContext._extensionHostProxy._connection → returns nil proc_pidpath(hostPID, …) → EPERM from the keyboard sandbox LSApplicationWorkspace.frontmostApplication → selector unavailable from the extension RBSProcessHandle.handleForIdentifier:error: → returns an RBSServiceErrorDomain error Without the host's bundle ID, the container app has no way to call LSApplicationWorkspace.openApplicationWithBundleID: (the technique that worked on iOS 25 and earlier). UIApplication.suspend() correctly sends the container to background, but iOS treats us as a "fresh launch" — it returns the user to the Home Screen instead of Safari, because the container app was launched by an extension, not directly by Safari. KeyboardKit's maintainer reached the same conclusion (issue #1014) and shipped 10.4 without the feature. My questions: Is there a public, App-Store-safe API in iOS 26+ for a custom keyboard extension to identify its host application, or for the container app (launched via the extension's openURL) to identify which app initially hosted the extension that opened it? UIOpenURLContext.options.sourceApplication reports the extension's own container, not the actual host. 2. Is there a public mechanism for "return to source app" when the container app was launched by an extension's openURL? Equivalent to the ← Source affordance iOS shows for normal inter-app openURL, but triggered programmatically by the launched app. 3. Some popular keyboards (e.g., 微信输入法 / WeChat Keyboard) still appear to round-trip through their container app on iOS 26.4 and return the user to the original host — including the iOS ← WeChat back affordance in the host's status bar afterward. What's the recommended approach to achieve this? If it requires a specific scene-activation flow, NSUserActivity pattern, or extension-context configuration, please point at the relevant docs. 4. If there is no public path today, is FB22247647 (or a related radar) the right place to track this? Should developers in this position migrate to in-extension audio capture (which has its own significant constraints in keyboard extensions)? I'd much rather not rely on private APIs. Concrete guidance — or even an acknowledgment of which direction Apple intends — would help thousands of custom-keyboard developers who currently have a degraded voice-input experience on iOS 26.4+. Tested on iPhone 12 Pro Max running iOS 26.4.2 (build 23E261), Xcode 26.x, Swift 5. Thanks!
5
0
2.0k
Sep ’26
AlarmKit alarms fire late (or not until you wake up the iPhone)
Hey all, I've submitted a couple Feedback reports on this (FB22887867 on iOS 26 and FB24483266 on iOS 27), but wanted to share here for 1. validation that I'm not the only one experiencing this issue and 2. ask for ideas or experience with potential workarounds. The issue is that AlarmKit alarms, even when properly configured and scheduled from an app, will intermittently fire late, or not fire at all until the iPhone is woken up. For example, you might create an AlarmKit alarm with a relative schedule for 6:00am, then lock your iPhone before bed. When 6:00am passes, nothing happens. Then, at 6:13am it fires (with the full screen alert, audio and haptics) Or, you might wake up at 6:53am, notice that it didn't fire, tap the screen on your iPhone, the Lock Screen displays for about a second, then all of a sudden, the AlarmKit alert presents (with the full screen alert, audio and haptics). The issue has been present from iOS 26.0 up through the iOS 27.0 RC. I'm fairly confident that this is not a configuration issue. I've reproduced it using the WWDC 25 AlarmKit sample code and if you read from AlarmManager.shared.alarms, these alarms show up as expected: with a scheduled state and the correct times. The issue seems to be more common overnight, when the iPhone has been asleep for a while. It's less common on my personal iPhone but occurs probably once out of every 3 to 5 alarms on my test iPhones (which have much less interaction and background activity etc.). Of our app's few thousand daily users, we get complaints at least once a day. I've dropped a few sysdiagnose reports into Claude. In every instance, it claims that when the alarm was scheduled, mobiletimerd successfully registered an XPC wake-up for the alarm. However, during a completely unrelated event overnight (ex: a wifi packet), launchd drops the scheduled wake-up and nothing re-schedules it. So when 6:00am rolls around, nothing wakes up the iPhone to let the alarm fire. On days when it fires late, it's simply because another unrelated event (ex: a wifi packet) woke up the iPhone while the late alarm was queued. Looking forward to hearing your thoughts. Thank you.
Replies
1
Boosts
1
Views
544
Activity
Sep ’26
CallKit does not activate audio session with higher probability after upgrading to iOS 18.4.1
Hi, We've noticed that this issue occurs more frequently after upgrading to iOS 18.4.1 and can result in one-way audio. Our app uses CallKit with WebRTC to establish VoIP connections. However, on iOS 18.4.1, CallKit no longer triggers: func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) We're currently comparing the occurrence rate across different iOS versions to better understand the impact. Could you please help analyze the root cause of this issue?
Replies
40
Boosts
1
Views
5.9k
Activity
Sep ’26
Is DeviceActivitySchedule a supported way to wake an extension for periodic work?
I'm building a parental-control app using FamilyControls, ManagedSettings and DeviceActivity. A guardian can lock a child's device from their own device, and the child's device applies the shield locally. The delivery problem: a background push can't wake our app once it has been force-quit, which is common on a child's device, so guardian-initiated changes sit undelivered until the child happens to open the app. I've found that DeviceActivityMonitorExtension still receives intervalDidStart / intervalDidEnd while the app is force-quit, and that a URLSession request started from the extension completes. So I could register a couple of short recurring DeviceActivitySchedule activities purely to wake the extension every ~15 minutes, check the server, and apply the resulting shield. My question: is using DeviceActivitySchedule purely as a wake mechanism — where the schedule doesn't correspond to any real usage-monitoring window — a supported use of the API, or is it working by accident? I'd rather not build on it if it's the latter. Two smaller ones, if anyone knows: Is network activity from the monitor extension expected to be given time to complete, and is there a documented execution budget? I've seen reports here that the extension stops being invoked after some days without the host app launching. Is that expected, and what re-arms it? If there's a supported mechanism for this that I've missed, I'd much rather use it.
Replies
0
Boosts
0
Views
162
Activity
Sep ’26
Internal PDF links stop working on iOS 27 / macOS 27 beta — every link opens the first page
On iOS 27 beta / Xcode 27.0, PDFDocument.write(to:) no longer serializes destinations for link annotations that are created at runtime. The annotation and its PDFActionGoTo action are both written, but the destination's page reference is not, so every internal link is dead. This worked correctly on iOS 26. PDFs generated on iOS 26 still navigate correctly; the same code on iOS 27 beta produces PDFs whose links are all dead.
Replies
2
Boosts
4
Views
1.4k
Activity
Sep ’26
Bundle preferred languages mechanism
Hi there, I’m curious to understand how the system determines which language to use for an app. The system is currently set to en-IN (English - India). My app supports the following languages: en (the default development language) en-GB (United Kingdom) en-IE (Ireland) en-US (United States) When I run the app, the Bundle.main.preferredLanguages returns [„en-GB“, „en“], which causes the app to be set to en-GB. However, when the app doesn’t support the preferred system language, I would expect it to default to the en language. Surprisingly, this is not the case. This behavior is precisely described in Technical Note TN2418. Unfortunately, there’s no explanation provided. Is this behavior related to the CLDR Linguistic Distance? I also attempted to replace the default development language en with en-001 (English - world), but it had no effect.
Replies
4
Boosts
0
Views
1.5k
Activity
Sep ’26
NSMetaDataQuery and MD-Spotlight Backed APIs Suddenly Stop Working
I'm testing code that uses NSMetadataQuery and I noticed some odd behavior. I run a query where the search scope is set to my Desktop directory. The predicate is set to search for a file name that contains 'we' (display name to be precise: kMDItemDisplayName). And I get no results. So I stop the app from Xcode then I create a new folder on the Desktop and name it we exactly. Then I rerun my app and start the query again - still no results. Unfortunately none of the Spotlight based APIs I'm using report errors. There is no delegate method -queryDidFailWithError: or anything like that. So in another place my app uses the lower level MD prefixed APIs in Core Services to read file metadata and I notice that those APIs are failing as well. Specifically I try to load metadata for a PNG image. I create an MDItemRef via MDItemCreateWithURL (and I do get an MDItemRef). Then I call MDItemCopyAttributes with the MDItemRef and an array of metadata attribute names: CFDictionaryRef fetchedData = MDItemCopyAttributes(mdItem, attributeNames); I step through it in the debugger and fetchedData is NULL. Since there is no error handling APIs available for any of this my app just silently fails. I have Console.app open when I step through MDItemCopyAttributes call in the debugger and this logs out every time: com.apple.spotlightserver Bad checksum on fetch attributes reply from store, 0x123ea456.... FWIW I do not have Spotlight indexing turned off on my system. Also jumping to Finder I'm experiencing the same failures (metadata isn't populating and the Desktop search for we produces no results). Actually on further inspection it looks like all searches are producing no results. Spotlight appears to be in a broken state system wide. I'm pretty sure a system restart will 'fix' it - until it starts occurring again. But for obvious reasons I'd like to avoid releasing a feature in my app that results in this kind of experience. Is there anything I can do on my end to workaround or avoid this issue? And tips or advice would be greatly appreciated.
Replies
2
Boosts
0
Views
600
Activity
Sep ’26
Low-level event-posting help needed.
Hi there, I am working on a little application which processes cursor and graphics tablet data and adds some extra control to the output. So far it makes use of... if let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap, //.cghidEventTap place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: eventMask, callback: handleTapEvent, userInfo: userInfo) ... to modify existing events. The issue that in some cases arises (it's a globally working app) - that some other applications pull and process pointer-data aside the event stream and therefor create conflicting values. Would creating and posting events to a 'virtual pointing device' on a lower system level (kext) help? Let's discuss. BR, E
Replies
1
Boosts
0
Views
914
Activity
Sep ’26
ShieldConfigurationExtension & SwiftData
Hi, I am developing a Screen Time App and I am having issues with the ShieldConfigurationExtension (ShieldConfigurationDataSource). I know this extensions is sandboxed but I should be able to read data from the main app. I am using SwiftData as my database, but I am unable to initialize it in the extensions with an error indicating insufficient file permissions. I have App Group set up and I am able to share data using UserDefaults but that is just inconvenient. Is there any way I could just open the SwiftData in read only mode so that I could display the user some info on the shield? SwiftData Init: private func setupContainer() throws { let schema = Schema([ DogEntity.self, HouseEntity.self ]) // Use app group container if available let config: ModelConfiguration if let containerURL = FileManager.default.containerURL( forSecurityApplicationGroupIdentifier: "group.\(Bundle.app.bundleIdentifier ?? "")" ) { config = ModelConfiguration(schema: schema, url: containerURL.appendingPathComponent("default.sqlite")) } else { config = ModelConfiguration(schema: schema) } self.container = try ModelContainer(for: schema, configurations: [config]) } Error in extension: fault: Attempt to add read-only file at path file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite read/write. Adding it read-only instead. This will be a hard error in the future; you must specify the NSReadOnlyPersistentStoreOption. error: (3) access permission denied error: Encountered exception error during prepareSQL for SQL string 'SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_METADATA'' : access permission denied with userInfo { NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite"; NSSQLiteErrorDomain = 3; } while checking table name from store: <NSSQLiteConnection: 0x154100300> error: Store failed to load. <NSPersistentStoreDescription: 0x15402d590> (type: SQLite, url: file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite) with error = Error Domain=NSCocoaErrorDomain Code=256 "The file “default.sqlite” couldn’t be opened." UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite, NSSQLiteErrorDomain=3} with userInfo { NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite"; NSSQLiteErrorDomain = 3; } Any help appreciated 🙂
Replies
2
Boosts
0
Views
395
Activity
Sep ’26
How to change the color of a PKInk in iPadOS27?
Hi, Shortly: On iPadOS27, when changing the color of a PKInk programmatically, it doesn't reflect in PKDrawing on screen. In all previous versions of iPadOS I was able to change the color of a PencilKit stroke via: canvasView.drawing.strokes[0].ink.color = .red And it changed on screen. As of iPadOS 27 - it doesn't. However, the underlying data is changing correctly: print(canvasView.drawing.strokes[0].ink.color) //prints: "UIExtendedSRGBColorSpace 0 0.533333 1 1" - blue color. canvasView.drawing.strokes[0].ink.color = .red print(canvasView.drawing.strokes[0].ink.color) //prints: "UIExtendedSRGBColorSpace 1 0 0 1" - red color, good. But the stroke stays blue on screen. I've filed a Feeback at FB24771438. And am using a temp workaround to "refresh" the drawing with: let current = canvasView.drawing canvasView.drawing = PKDrawing() //blank one canvasView.drawing = current IMHO, it should be possible to change the color like that and re-render it in the View right away, since the PKInk's .color property is a { get set } property. Is this the intended behavior? A bug or a feature? Thanks!
Replies
0
Boosts
0
Views
243
Activity
Sep ’26
How to read monitor built-in ambient light sensor in real time?
I’m developing a macOS menu-bar app intended for distribution on the Mac App Store. Is there a supported public API or an available entitlement that allows a sandboxed macOS app to read the built-in ambient light sensor in real time? The feature would be optional, process readings locally, and adjust display dimming and warmth. It would not use the camera or transmit sensor data. SensorKit’s ambient light API is unavailable on macOS in our SDK, and its research-only access and delayed data do not meet this use case. We want to avoid private APIs. Could you confirm whether a supported approach exists, or advise how to submit an enhancement request?
Replies
1
Boosts
0
Views
313
Activity
Sep ’26
Default App Clip URL (appclip.apple.com) shows website preview instead of triggering App Clip card
We have a published, approved App Clip that works correctly via QR code and the Safari Smart App Banner, but URL-based invocation does not trigger the App Clip card in any context. Most notably, Apple's own default App Clip URL does not work either: https://appclip.apple.com/id?p=hazel-torus.Clip **Tapping this link in Messages or Notes does nothing. ** Long-pressing it shows a generic website link preview rather than the App Clip card, even though appclip.apple.com is Apple's domain and requires no configuration on our end. Setup details: App Clip bundle ID: hazel-torus.Clip Team ID: 2UNR2APH47 App Clip experience URL: https://passportreader.app/open AASA includes a correctly formatted appclips key with 2UNR2APH47.hazel-torus.Clip (confirmed via https://app-site-association.cdn-apple.com/a/v1/passportreader.app that AASA is correctly cached) Associated Domains entitlements (appclips:passportreader.app) are present on the App Clip target App and App Clip experience are both Approved / Ready for Sale Tested on two physical devices, neither with the full app installed Since QR and Safari banner invocation work, the App Clip itself and its entitlements appear correctly configured. The fact that even Apple's own appclip.apple.com URL fails, and is treated as an arbitrary website link, suggests this may be a backend indexing issue specific to this App Clip rather than a client-side configuration problem. Has anyone else encountered this, or know what could cause appclip.apple.com to not be recognized as an App Clip URL?
Replies
23
Boosts
0
Views
1.9k
Activity
Sep ’26
Is there an API for detecting if NSMetadataQuery is unavailable for a given URL (as a search scope)?
If the user prohibits Spotlight in System Settings for a given directory and I set that URL as one of the search scopes on an NSMetadataQuery- I believe the query will return no results. Is there an API for detecting Spotlight unavailability? Ideally I would like to display something in the UI for this kind of situation to explain why a feature built on top of this API is not working.
Replies
0
Boosts
0
Views
373
Activity
Sep ’26
Nearby Interaction (UWB) becomes unusable after prolonged ranging sessions on iPhone 17
Hello, We are developing applications using Apple's Nearby Interaction framework for continuous UWB ranging between an iPhone and a UWB-enabled accessory. We have identified a reproducible issue on iPhone 17 where, after running several prolonged UWB ranging sessions (sometimes more than 2 hours), the UWB ranging functionality eventually enters a state where it no longer operates correctly. Once the issue occurs, restarting the application does not recover the UWB functionality. The iPhone must be fully restarted before UWB ranging starts working normally again. We strongly believe the issue is not related to application-specific logic but is a OS issue Device: iPhone 17 UWB: U2 iOS: iOS 26 & iOS 27 beta 4 Framework: Nearby Interaction Steps to reproduce Establish a Nearby Interaction UWB ranging session between the iPhone 17 and a compatible UWB device. Keep the ranging session running continuously for a prolonged period. Repeat this process several times if needed, using long-running sessions. Eventually, the OS will stop delivering didUpdate OS callbacks with ranging distance. After the issue occurs, start a new Nearby Interaction session. Actual result Once the issue occurs, a newly started UWB ranging session only delivers one valid didUpdate ranging callback to the application. After this first callback, no further valid ranging updates are delivered. The issue persists when: the current ranging session is stopped; the application is completely terminated; the application is launched again; a new Nearby Interaction session is created. The only way we have found to recover the device is to fully restart the iPhone. After restarting the phone, Nearby Interaction UWB ranging works normally again. The issue is not in the UWB accessory, the accessory will keep doing valid ranging with other phones, this is only affecting the iPhone that entered the invalid UWB state. Expected result After stopping a Nearby Interaction session and creating a new session, UWB ranging should start normally again, regardless of how many previous ranging sessions have been executed. Terminating and relaunching the application should also release any application-owned resources associated with the previous session. Request Could you please investigate whether this behavior is related to the Nearby Interaction framework, the iPhone 17 UWB subsystem, or an internal UWB state that is not correctly reset between ranging sessions? If any other iOS developer has experienced similar behaviour it would be great if you can share your findings. Material delivered I am attaching a console log that I captured on my iPhone 17. Here the prolonged session was already executed and UWB already entered the invalid state. The iPhone and the UWB accessory are close to each other. We can observe that valid ranging notification (didUpdate) is only delivered for the first ranging round, following ranging rounds will lead to error (the OS does not deliver ranging distance notfs anymore. After this the only way to recover UWB technology is to restart the iPhone. Let us know if you need any additional information for debugging this issue. Feedback assistant issue identifier: FB24484779 logs-iphone17-uwb-issue.rtf
Replies
1
Boosts
0
Views
533
Activity
Sep ’26
App Clip default invocation URL requires two taps to launch (first tap unresponsive) in Safari and Notes
I would like to clarify the expected behavior of a default App Clip link regarding tap responsiveness. Issue: When I tap the default App Clip invocation URL in Safari or the Notes app, the first tap does not respond (no App Clip card appears). Only the second tap successfully presents the App Clip card. Steps to Reproduce: Place the default App Clip URL in Safari (or Notes app) Tap the link once → no App Clip card appears Tap the same link again → App Clip card appears as expected Environment: Invocation source: Safari / Notes app App Clip type: Default App Clip experience (appclip.apple.com URL) Observation: This issue reliably occurs when there is no cached App Clip metadata on the device. When the metadata is already cached, the App Clip card appears on the first tap as expected. What I've already checked: Not in Private Browsing mode Question: Is this the expected behavior? Is there a recommended way to make the first tap reliably present the App Clip card even without a pre-existing cache? Thank you for your assistance.
Replies
2
Boosts
1
Views
812
Activity
Sep ’26
DeclaredAgeRange: older-iOS fallback and consent revocation for a server-free utility
I am integrating Declared Age Range into the initial release of an all-ages iPhone utility with an iOS 17 deployment target. It stores user-created records only on the device and has no app accounts, backend, in-app purchases, subscriptions or remotely accessible data. The planned distribution includes the United States. On iOS 26.4 and later, the planned implementation checks AgeRangeService.shared.requiredRegulatoryFeatures and requests a range when .declaredAgeRangeRequired is present. On iOS 26.2–26.3, it uses isEligibleForAgeFeatures. Returned age information would be used transiently on-device, without persistence or export. A requested boundary of 18 would not restrict this all-ages app to adults. Two technical points remain unclear: The current Q&A says existing Apple Accounts on iOS/iPadOS 18 or earlier are unaffected. What supported fallback should an app use for affected new accounts on older supported versions, including iOS 26.0–26.1 without the eligibility property? When a required eligibility or age-range request temporarily fails, is there documented guidance for the access/retry behavior of an all-ages app? The documented notAvailable outcome can represent refusal or unavailability; the implementation should not misreport either as a completed check. The Q&A says Apple prevents app launch after parental consent revocation and also directs developers to RESCIND_CONSENT App Store Server Notifications V2. For a utility with no server, app account or remote data/access to revoke, is any additional client action or notification endpoint required? If so, what technical mechanism should connect that action to the fully local installation? I am seeking the documented API and system behavior, not a determination of legal compliance. References: Age assurance Q&A Update for apps distributed in Texas Requesting an age range
Replies
0
Boosts
0
Views
385
Activity
Sep ’26
Asset Pack Creation Fail: Error reading Manifest.json
Hello, I've been following the Background Assets documentation, and so far everything has worked. However, when I attempt to archive my asset pack in Terminal, I receive the following error: Error: Reading the contents of the file at “Manifest.json” failed. I've double checked the provided instructions, tried archiving in different directories, and tried every permutation of Manifest.json I could think to try. Same error every time. Here's my Manifest.json code in case the issue is there. Thanks in advance! "assetPackID": "classic", "downloadPolicy": { "essential": { "installationEventTypes": [ "firstInstallation" ] } }, "fileSelectors": [ { "directory": "audio" }, ], "platforms": ["tvOS"] }
Replies
1
Boosts
1
Views
166
Activity
Sep ’26
CNContact poster
Hi all, From what I’ve seen on forums and other sources, it appears that nothing can be done to set the contact poster programmatically. Setting the imageData property affects only the thumbnail image. Does anyone know if this is explicitly documented somewhere? I need this information for a POC document. I watched the iOS 17 keynote (where it was introduced), the Platform State of Union, and other WWDC videos, but I couldn’t find any mention of it. The Contacts framework documentation only explains what can be retrieved from this property and doesn’t mention any way to set the contact poster. If anyone has any information on this, please help! Thanks in advance!
Replies
1
Boosts
1
Views
480
Activity
Sep ’26
iOS26 beta: AppClips are not working properly
Hi, As a company, we have several apps in the AppStore that contain AppClips. With the latest iOS18 it works without any problems. With all iOS26 betas so far, however, there is always the problem “ASDErrorDomain- Error 507” and the AppClip cannot be opened. You can easily test this by scanning the following QR code with the system camera: You only ever get this error instead of the option to open the AppClip. As the iOS26 beta phase is already at an advanced stage, we are naturally concerned as to whether the problem will be solved.
Replies
18
Boosts
4
Views
2.0k
Activity
Sep ’26
iOS 26.4 — How to return from main app to host app after a keyboard-extension dictation round-trip, without private APIs?
I'm building a custom keyboard extension that offers voice dictation. Because keyboard extensions are constrained (memory cap ~30–48 MB, restricted audio session access), I delegate recording to my container app: User in a host app (e.g., Safari) taps the mic in my keyboard extension. The keyboard calls extensionContext.open(URL("myapp://dictation")) to launch the container app. The container app records audio via AVAudioEngine + SFSpeechRecognizer, writes the final transcript to the App Group, and signals completion via a Darwin notification. 4. The user is expected to be returned to the original host app (Safari) automatically so they can keep typing. The problem (step 4): On iOS 26.4 I can no longer identify which app was the host. Every previously-known path returns nil for the keyboard extension's host: parent.value(forKey: "_hostBundleID") → returns the literal string parent.value(forKey: "_hostApplicationBundleIdentifier") → returns NSNull xpc_connection_copy_bundle_id on the underlying XPC connection (via PKService.defaultService.personalities[…]) → returns NULL NSXPCConnection.processBundleIdentifier on extensionContext._extensionHostProxy._connection → returns nil proc_pidpath(hostPID, …) → EPERM from the keyboard sandbox LSApplicationWorkspace.frontmostApplication → selector unavailable from the extension RBSProcessHandle.handleForIdentifier:error: → returns an RBSServiceErrorDomain error Without the host's bundle ID, the container app has no way to call LSApplicationWorkspace.openApplicationWithBundleID: (the technique that worked on iOS 25 and earlier). UIApplication.suspend() correctly sends the container to background, but iOS treats us as a "fresh launch" — it returns the user to the Home Screen instead of Safari, because the container app was launched by an extension, not directly by Safari. KeyboardKit's maintainer reached the same conclusion (issue #1014) and shipped 10.4 without the feature. My questions: Is there a public, App-Store-safe API in iOS 26+ for a custom keyboard extension to identify its host application, or for the container app (launched via the extension's openURL) to identify which app initially hosted the extension that opened it? UIOpenURLContext.options.sourceApplication reports the extension's own container, not the actual host. 2. Is there a public mechanism for "return to source app" when the container app was launched by an extension's openURL? Equivalent to the ← Source affordance iOS shows for normal inter-app openURL, but triggered programmatically by the launched app. 3. Some popular keyboards (e.g., 微信输入法 / WeChat Keyboard) still appear to round-trip through their container app on iOS 26.4 and return the user to the original host — including the iOS ← WeChat back affordance in the host's status bar afterward. What's the recommended approach to achieve this? If it requires a specific scene-activation flow, NSUserActivity pattern, or extension-context configuration, please point at the relevant docs. 4. If there is no public path today, is FB22247647 (or a related radar) the right place to track this? Should developers in this position migrate to in-extension audio capture (which has its own significant constraints in keyboard extensions)? I'd much rather not rely on private APIs. Concrete guidance — or even an acknowledgment of which direction Apple intends — would help thousands of custom-keyboard developers who currently have a degraded voice-input experience on iOS 26.4+. Tested on iPhone 12 Pro Max running iOS 26.4.2 (build 23E261), Xcode 26.x, Swift 5. Thanks!
Replies
5
Boosts
0
Views
2.0k
Activity
Sep ’26