Hi,
I'm trying to setup PIR service for live caller id lookup (in python but based on swift example: https://github.com/apple/live-caller-id-lookup-example). The swift example provides utilities for database setup and encryption, but I can't find any specification about which key is used for database encryption and how the ios system knows about this key in order to be able to construct the PIR requests.
So my question is how does the PIR service communicate the secret key to ios system or vice versa? (specific to the test environment, before onboarding)
General
RSS for tagDelve 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.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I am getting this error when I try to show device activity report view by this DeviceActivityReport(appsContext, filter: filter)
Attempt to map database failed: permission was denied. This attempt will not be retried.
I have taken access by this way. AuthorizationCenter.shared.requestAuthorization(for: .individual)
Detailed errors:
LaunchServices: store (null) or url (null) was nil: Error Domain=NSOSStatusErrorDomain Code=-54 "process may not map database" UserInfo={NSDebugDescription=process may not map database, _LSLine=72, _LSFunction=_LSServer_GetServerStoreForConnectionWithCompletionHandler}
Attempt to map database failed: permission was denied. This attempt will not be retried.
We tried to fetch the recorded PPG data using SensorKit
with the following code, however the didFetchResult callback method is never called.
let ppgReader = SRSensorReader(sensor: .photoplethysmogram)
let request = SRFetchRequest()
let nowDate = Date()
let toDate = nowDate.addingTimeInterval(-25 * 60 * 60)
let fromDate = toDate.addingTimeInterval(-24 * 60 * 60)
request.from = SRAbsoluteTime.fromCFAbsoluteTime(_cf: fromDate.timeIntervalSinceReferenceDate)
request.to = SRAbsoluteTime.fromCFAbsoluteTime(_cf: toDate.timeIntervalSinceReferenceDate)
ppgReader.delegate = self;
ppgReader.fetch(request)
The delegate called the didComplete successfully:
func sensorReader(_ reader: SRSensorReader, didCompleteFetch fetchRequest: SRFetchRequest)
But never called the didFetchResult
func sensorReader(_ reader: SRSensorReader, fetching fetchRequest: SRFetchRequest, didFetchResult result: SRFetchResult<AnyObject>) -> Bool
Any ideas why ? (I am wearing the watch for couple days and ensure it has the data for the time period I am querying)
One thing I notice is when Apple granted us the entitlement, it uses Uppercase for ECG and PPG, however the document use Lowercases in the plist https://developer.apple.com/documentation/sensorkit/srsensor/photoplethysmogram
Dose it matter ?
When Live Caller ID first came out I experimented with it and got it working using the Example PIR database.
All my links from that time are now out of date and no longer work, however I seem to have found where the PIR database example and documentation has moved to (https://swiftpackageindex.com/apple/pir-service-example/main/documentation/pirservice/testinginstructionslivecalleridlookup)
But what I can't find is an exact definition of the the logo size/max size/dimensions/format should be.
My memory from that time is that it was very pernickety, and if things weren't exactly right, the logo wasn't displayed.
I can remember the format had to be HEIC to get it to work.
Looking through the documentation however, I can't see exact requirements specified.
My question is - for the Live Caller ID logo what are the exact image requirements, and where are they documented?
Is there a way to increase the frequency of UWB background ranging?
Issue Description:
When an alarm is set for a time earlier than the current system time, and the system time is manually adjusted back to before the alarm time, the alarm does not ring when the scheduled time is reached.
Steps to Reproduce:
Current time is 23:34
Set an alarm for 23:30 (earlier than the current time)
Manually change the system time to 23:28
Wait until the time reaches 23:30
The alarm does not ring
Device:
iPhone 14 Pro / iOS 26.2
Topic:
App & System Services
SubTopic:
General
Hello everyone,
I’m currently developing an app that uses the Family Controls API, specifically the Screen Time API. However, my current entitlement is limited to development mode, which prevents me from publishing my app on TestFlight.
I have already contacted Apple Developer Support for production access but wanted to reach out to the community as well and I was referenced to FamilyControls API documentation and I couldn't find anything related to my case. Has anyone successfully upgraded their entitlement from development-only to production? Any insights on the process, tips for communicating with Developer Support, or guidance on ensuring full compliance with the Family Controls guidelines would be extremely helpful.
Issue Description:
When the snooze alarm and a set alarm share the same time, the behavior differs between locked and unlocked screen states.
The current issue occurs when the screen is unlocked and the device is on the home screen before the alarm goes off:
Alarm A is set for 17:23, and the snooze button is tapped when it rings.
Alarm B is set for 17:25.
At 17:25, Alarm B first vibrates and then rings (no buttons are pressed at this time).
A few seconds later, it vibrates a second time.
After that, the alarm becomes silent.
If dynamic/notification alarms are disabled, the next scheduled alarm rings normally.
Topic:
App & System Services
SubTopic:
General
Hi everyone,
I’m developing a screen-time and focus app that uses Apple’s Family Controls framework to block distracting apps and reward users through a gamified experience.
Apple approved Family Controls (Distribution) for the main app identifier,
but they did not approve the required extension target (which implements DeviceActivityMonitor, required for the framework to function).
Because of this, I can’t archive or upload the app to TestFlight — and I’ve been stuck in limbo for over 2 months.
This is severely delaying my launch. The app works perfectly, but I can’t release it because the extension wasn’t included in the entitlement approval.
Has anyone else run into this with Family Controls?
Is there any known way to escalate or fast-track approval for additional app IDs or targets?
Would really appreciate any help, advice, or hacks. 🙏
Thanks,
Enzer
Hi,
I'm working on a game for the past few years using first Unreal Engine 4, and now Unreal Engine 5.4.4.
I'm experiencingan unusual crash on startup on some devices
. The crash is so fast that I'm barely able to see the launching screen sometimes because the app closes itself before that.
I got a EXC_CRASH (SIGABRT) so I know that it's a null pointer reference, but I can't quite wrap my head about the cause, I think that's something messed up in the packaging of the app, but here is where I'm blocked, I'm not that accustomed with apple devices.
If someone has some advise to give, please, any help will be very valuable. Many thanks.
Log :
Crash Log on Ipad
Hi everyone,
We're using the react-native-device-activity package to implement app blocking via Apple's Screen Time API. The blocking functionality works well: when the user selects apps and taps "Done," those apps get blocked as expected.
However, we're facing an issue with unblocking apps that the user later unselects. Even after the user unchecks some apps and taps "Done" again, those previously selected (now unselected) apps remain blocked and still show the shield.
We've been using the WeatherKit API for a few years now. Everything has been pretty stable. We'll periodically get 404 errors, but they usually disappear within a couple days.
Starting March 5th we've again been getting 404 errors that slowly ramped up to March 20th and continued. We have had no code changes on our end, so something seems to have changed / broken on the server side of things.
Here are some example API calls that are giving us a 404 error now
https://weatherkit.apple.com/api/v1/weather/en/35.9981205/-78.8920444?dataSets=forecastDaily&dailyStart=2025-03-21T05:00:00Z&timezone=America/New_York&countryCode=US
https://weatherkit.apple.com/api/v1/weather/en/41.4789363/-81.7404134?dataSets=forecastDaily&dailyStart=2025-03-21T04:56:00Z&timezone=America/New_York&countryCode=US
Does anyone have any insights or information on this?
Also if Apple is listening, an error more meaningful than 404 would be much much appreciated.
We integrated DeviceCheck framework into our app to prevent fraudulent call to our app service around one year ago.
Recently, we received a few cases related to this function over Christmas Eve period.
Based on the logs we have, it indicated both the following two functions returned errors. But we don't have the exactly errors logged and now we cannot replicate.
DCAppAttestService.shared.attestKey()
DCAppAttestService.shared.generateAssertion()
The other finding we have is some users reporting this issue recently upgraded their devices from iOS 18 to iOS 26.
So we are suspecting it's due to either the OS upgrading, or Apple's app attest service degrading.
Anyone encountered the similar issues before, or have any idea regarding the root cause? Thanks!
I'm building a voice-to-text keyboard extension that needs to open the main app briefly for audio recording (since keyboard extensions can't record audio), then return the user to their original app.
The flow I'm trying to achieve:
User is in WhatsApp (or Messages, Slack, etc.)
User taps "Voice" button in my keyboard
My main app opens via deep link (myapp://keyboard/dictation)
App starts recording
App automatically returns user to WhatsApp
I cannot find a way to detect which app the keyboard is running inside, or which app opened my main app via the deep link.
UIInputViewController.textDocumentProxy - No host app information available
UIApplication.OpenURLOptionsKey.sourceApplication in application(_:open:options:) - When opened from a keyboard extension, does this return the host app bundle ID or the keyboard extension bundle ID?
Private APIs (for research only, not production):
_hostBundleID on UIInputViewController - blocked/returns nil on iOS 18
KVC approaches - all blocked
Hardcoded app support - Works but requires maintaining a list of popular apps and showing multiple buttons instead of a single "Voice" button
My questions:
When a keyboard extension triggers a URL open (via SwiftUI Link or UIApplication.shared.open), what does sourceApplication contain? The host app or the keyboard extension?
Is there any supported way for a main app to know which app it was launched from, specifically when that launch originated from a keyboard extension?
How do apps like "Wispr Flow" achieve seamless return-to-app with a single voice button? They seem to auto-return to whatever app the user was in.
Environment:
iOS 18.0+
Xcode 16
SwiftUI keyboard using KeyboardKit
Any guidance on the recommended approach would be greatly appreciated. I understand there may be privacy reasons for limiting host app detection, but the UX of requiring users to manually swipe back (or tap app-specific buttons) is significantly worse than automatic return.
Problem Description:
After upgrading to iOS 26, I discovered that the ExtendedDistanceMeasurement feature in the Nearby Interaction framework is not working as expected. On the same device model, the issue did not occur on iOS 18, but it is present on iOS 26 (including the latest iOS 26.2), and it has started affecting the functionality of my app. I hope this issue can be resolved as soon as possible.
Problem Details:
On iOS 26 and later versions (including iOS 26.2), when using an iPhone and an Apple Watch both equipped with second-generation UWB chips, enabling isExtendedDistanceMeasurementEnabled initiates the distance measurement process successfully, but the distance information fails to update. The real-time distance between the devices does not display within the app.
Affected Devices and Versions:
iPhone Model: iPhone 15 Pro Max
iOS Version: iOS 26.2
Apple Watch Model: Apple Watch 10
watchOS Version: 26.2
Example Code:
The issue can be reproduced by adding the following code to the official sample code:
Nearby Interaction Framework Sample Code
private func didReceiveDiscoveryToken(_ token: NIDiscoveryToken) {
if session == nil { initializeNISession() }
if !didSendDiscoveryToken { sendDiscoveryToken() }
os_log("running NISession with peer token: \(token)")
let config = NINearbyPeerConfiguration(peerToken: token)
// The issue can be reproduced by adding the following code to the official sample code
// Enable extended distance measurement if both devices support it
if NISession.deviceCapabilities.supportsExtendedDistanceMeasurement && token.deviceCapabilities.supportsExtendedDistanceMeasurement {
config.isExtendedDistanceMeasurementEnabled = true
}
session?.run(config)
}
Problem Behavior:
When either the iPhone or the Apple Watch does not support the second-generation UWB chip (i.e., deviceCapabilities.supportsExtendedDistanceMeasurement = false), the code works as expected.
However, when both the iPhone and the Apple Watch support the second-generation UWB chip (i.e., deviceCapabilities.supportsExtendedDistanceMeasurement = true), the code fails to work, and the distance does not update — meaning the real-time distance between the devices is not displayed.
Expectation:
I hope this issue can be resolved soon, as it is impacting my app. The problem persists in the latest iOS 26.2, and has yet to be fixed.
Some Apple URL schemes are documented for third-party use. It’s fine to use those URL schemes for their intended purpose.
Other Apple URL schemes are not officially documented. Their use is unsupported. If you rely on such implementation details, things might work, or they might not, and that state might change over time.
IMPORTANT If you ship via the App Store, pay attention to clause 2.5.1 of the App Review Guidelines.
The Apple URL scheme documentation is not always easy to find. I’m aware of the following:
Apple URL Scheme Reference
QA1924 Opening Keyboard Settings from a Keyboard Extension [This Q&A was retired years ago.]
Preparing your app to be the default messaging app
The doc comments for es_new_client in <EndpointSecurity/ESClient.h>
Developer > Bug Reporting describes the applefeedback scheme
Additionally, as questions about this most commonly crop up in the context of opening Settings (System Settings on macOS), I wanted to highlight the following:
UIApplication.openSettingsURLString property (in Objective-C this is UIApplicationOpenSettingsURLString)
UIApplication.openNotificationSettingsURLString property (in Objective-C this is UIApplicationOpenNotificationSettingsURLString)
UIApplication.openDefaultApplicationsSettingsURLString property (in Objective-C this is UIApplicationOpenDefaultApplicationsSettingsURLString)
AccessibilitySettings.openSettings(for:) method
FIFinderSyncController.showExtensionManagementInterface() class method
SMAppService.openSystemSettingsLoginItems() class method
VSOpenTVProviderSettingsURLString global
CXCallDirectoryManager.openSettings(completionHandler:) method
SFSafariSettings.openExportBrowsingDataSettings() method
SFSafariSettings.openExtensionsSettings(forIdentifiers:) method
If your app needs to perform some action that’s not covered by the above, file an enhancement request for a supported way to do that. Make sure to describes your use case in detail.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
Revision History
2026-01-07 Added a reference to the SFSafariSettings methods.
2025-10-28 Added a reference to UIApplication.openDefaultApplicationsSettingsURLString. Made other minor editorial changes.
2025-04-21 Added a reference to CXCallDirectoryManager.openSettings(completionHandler:).
2024-10-25 Added a reference to UIApplication.openNotificationSettingsURLString and VSOpenTVProviderSettingsURLString. Added a link to Preparing your app to be the default messaging app.
2024-10-01 Added info about the applefeedback URL scheme.
2024-09-29 Added a reference to SMAppService.openSystemSettingsLoginItems().
2024-09-27 Added a titbit for Finder Sync extension developers. Added an invitation to file feedback.
2024-08-05 First posted.
AgeRangeService is the burning topic right now. Needless to say, Everything is so unclear.
We got our app finally into the TestFlight for QA and the product to test. only to find out that AgeAssurance for sandbox testing does not work.
There is no document confirming or denying whether and when age assurance for the App with the release configuration in test flight would work.
There isn't any guidance from Apple on whether an app that sells physical goods, such as an e-commerce app, can continue doing business as usual.
Also, there is no clarity that the Age assurance options are off, 13, unverified, 13 verified, and so on.
How those should be used.
I am trying to port my sandboxed macOS app completely over to iOS using a Catalyst target and SwiftUI.
There appears to be an issue when trying to drag to the Finder in Catalyst (and in SwiftUI in General). For some reason, the Finder will not accept multiple file drops, only a single file.
On my macOS (non-Catalyst AppKit target), I overcame this by dropping multiple files to a UTType of .folder, and the OS accepted the folder. This workaround is not available for iOS because .folder is a macOS-only option.
I have a test app to illustrate the issue. Hopefully someone can help.
Download Test App
I'm using FamilyActivityPicker to get consent for app/category management, which returns a FamilyActivitySelection object.
I serialize this FamilyActivitySelection object (just applicationTokens and categoryTokens) and pass it to my DeviceActivityMonitor extension via App Group UserDefaults. I am using the JSON encoder/decoder over PropertyList (though both seem to exhibit the same behavior).
After inspecting the FamilyActivitySelection object immediately after it's returned by FamilyActivityPicker in the main app, the application.bundleIdentifier property is consistently nil for every Application object within selection.applications. Similarly, category.localizedDisplayName is nil for ActivityCategory objects. This happens whether "Select All Apps" is used or if apps/categories are selected individually.
I understand that this is the intended behavior due to Apple's user privacy policies. I read on another post that my app can be provided with bundle identifiers and app names within Shield Configuration extensions and Device Activity Report extensions - I'm not sure which ones or how exactly to do this.
I am aware that I can use Label(applicationToken) SwiftUI view to display the app name/icon, but this doesn't give programmatic access to the bundleIdentifier string.
My app will not log or export these bundleIdentifiers outside of its sandbox. My goal is to create mappings to the FamilyActivitySelection with the publicly accessible bundleIdentifiers.
Any guidance, examples, or clarification on the intended workflow for this scenario would be greatly appreciated!
Hi Apple Developer Community,
I'm implementing MetricKit launch performance tracking in our iOS app and need clarification on two properties:
histogrammedTimeToFirstDraw
histogrammedOptimizedTimeToFirstDraw
The Documentation Problem:
The official MetricKit documentation provides minimal explanation of these properties beyond their names. Based on naming conventions, I initially assumed:
histogrammedTimeToFirstDraw = cold launches
histogrammedOptimizedTimeToFirstDraw = warm/optimized launches
Based on our measurements:
The “optimized” metric appears only in a small fraction of launches
The "optimized" metric is actually slower
The naming suggests the opposite behavior
Questions:
What specific launch conditions does each metric measure?
Why would "optimized" launches be slower and less frequent?
Is histogrammedOptimizedTimeToFirstDraw related to iOS app pre-warming or prediction features?
If these metrics don’t correspond to cold vs. warm launch times, is there an alternative way to measure them accurately?
Any clarification from Apple or insights from developers who've tracked these metrics would be greatly appreciated.