If an iPhone receives an incoming call with some partial sip content (for example it contains a name but not an image, or vice versa) and if there is an app enabled for Live Caller ID Lookup, and the result of that lookup supplies data not in the sip (i.e. the lookup returns an image, but not a name, or vice versa). Then could the OS combine data from both sources, or is whatever is returned from the LCIDL what gets displayed in the call screen. I suppose that is the case but just want to enquire to make sure.
Thank you
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
Hello,
I am getting the following errors when building a Mac Camera Extension with web sockets. I am using URLSessionWebsocketTask as my web socket library. I built a test program for my code and in there I can see my web sockets are working properly, but when I run it from the System Extension I get the following errors. The socket opens for two - three messages then crashes. I couldnt find any documentation online for the following errors
CMIOExtensionProvider.m:1975:-[CMIOExtensionProvider removeProviderContext:]_block_invoke Unregistered provider context <CMIOExtensionProviderContext: ->, don't be surprised if things go badly
CMIOExtensionProviderContext.m:64:-[CMIOExtensionProviderContext initWithConnection:]_block_invoke [391] received Connection invalid``
Topic:
App & System Services
SubTopic:
General
Tags:
System Extensions
wwdc2022-10022
Core Media
Foundation
Hi everyone,
I’ve filed a Feedback report (FB20986470) for a serious issue affecting the Call Directory database when add phone numbers for call blocking.
When adding blocking numbers to a Call Directory extension, the system’s CallKit database (/private/var/mobile/Library/CallDirectory/CallDirectory.db) becomes corrupted.
The reload call (reloadExtensionWithIdentifier) fails with error code 11 when the system tries to insert blocking entries, and the Console app on macOS shows the following errors:
database corruption page 2265525 of /private/var/mobile/Library/CallDirectory/CallDirectory.db at line 81343 of [f0ca7bba1c]
database corruption at line 79387 of [f0ca7bba1c]
Error Domain=com.apple.callkit.database.sqlite Code=11 "sqlite3_step for query 'INSERT INTO PhoneNumberBlockingEntry (extension_id, phone_number_id) VALUES (?, (SELECT id FROM PhoneNumber WHERE (number = ?))), (?, (SELECT id FROM PhoneNumber WHERE (number = ?))),...)'"
After this happens, CallKit becomes fully corrupted on the device and no further numbers can be added, even after:
Disabling and re-enabling the extension
Restarting the device (either force or soft restart)
Reinstalling the app
Waiting for a couple of minutes after this issue happens (that CallKit could possibly self-recovered)
I also tested other call-blocking apps, and they all fail with the same error. The only thing that recovers the system is a full “Reset All Settings.”
This issue has been reported by many users of my app, across multiple iOS versions and devices.
Similar related issue reported by another developer:
https://developer.apple.com/forums/thread/806129
Steps to Reproduce:
Enable the Call Directory extension from a call-blocking app.
Add and reload blocking numbers (a few thousand entries).
Perform multiple reloads between additions.
Check the Console, the corruption errors appear.
From this point, all insert attempts fail system-wide.
Expected Result:
Entries should be inserted successfully, or the system should self-recover without persistent corruption.
Actual Result:
sqlite3_step fails with Code=11, and the Call Directory database remains corrupted until the user resets all settings.
Additional Notes:
All numbers are sorted and deduplicated before insertion.
Happens intermittently after multiple reloads.
The system log always shows internal database failure.
Environment:
Device: iPhone 16 Plus
iOS 18.2 Beta (23C5027f)
Xcode 16.1 (17B55)
Attachments (included in Feedback FB20986470):
sysdiagnose captured immediately after the failure (with Phone app General Profile)
It seems like a system-level corruption affecting all Call Directory extensions once it occurs.
Hi everyone,
I’m facing an issue with CloudKit sync getting stuck during initial device migration in my SwiftData-based app.
The app follows a local-first architecture using SwiftData + CloudKit sync, and works correctly for:
✔ Incremental sync
✔ Bi-directional updates
✔ Small datasets
However, when onboarding a new device with large historical data, sync becomes extremely slow or appears stuck. Even after two hours data is not fully synced. ~6900 Transactions
🚨 Problem
When installing the app on a new iPhone and enabling iCloud sync:
• Initial hydration starts
• A small amount of data syncs
• Then sync stalls indefinitely
Observed behaviour:
• iPhone → Mac sync works (new changes sync back)
• Mac → iPhone large historical migration gets stuck
• Reinstalling app / clearing container does not resolve issue
• Sync never completes full migration
This gives the impression that:
CloudKit is trickling data but not progressing after a certain threshold.
The architecture is:
• SwiftData local store
• Manual CloudKit sync layer
• Local-first persistence
• Background push/pull sync
So I understand:
✔ Conflict resolution is custom
✔ Initial import may not be optimized by default
But I expected CloudKit to eventually deliver all records.
Instead, the new device remains permanently in a “partial state”.
⸻
🔍 Observations
• No fatal CloudKit errors
• No rate-limit errors
• No quota issues
• iCloud is available
• Sync state remains “Ready”
• Hydration remains “mostlyReady”
Meaning:
CloudKit does not report failure — but data transfer halts.
⸻
🤔 Questions
Would appreciate guidance on:
Is CloudKit designed to support large initial dataset migration via manual sync layers?
Or is this a known limitation vs NSPersistentCloudKitContainer?
⸻
Does CloudKit internally throttle historical record fetches?
Could it silently stall without error when record volume is high?
⸻
Is there any recommended strategy for:
• Bulk initial migration
• Progressive hydration
• Forcing forward sync progress
⸻
Should initial migration be handled outside CloudKit (e.g. via file transfer / backup restore) before enabling sync?
⸻
🎯 Goal
I want to support:
• Large historical onboarding
• Multi-device sync
• User-visible progress
Without forcing migration to Core Data.
⸻
🙏 Any advice on:
• Best practices
• Debugging approach
• CloudKit behavior in such scenarios
would be greatly appreciated.
Thank you!
Topic:
App & System Services
SubTopic:
General
Tags:
Swift Packages
CloudKit
Swift
Cloud and Local Storage
Hi,
I’m building an iOS self accountability app using FamilyControls and DeviceActivity. I can show the user’s real Screen Time correctly inside a DeviceActivityReport extension on a real device, but I want to use that same daily total inside the main app for today’s log and leaderboard.
What I’m stuck on is getting that value back into the app. I tried App Groups, shared UserDefaults, a shared file in the app group container, and CFPreferences, but the report still only works as a display and the main app never receives the total.
Is there any Apple supported way to use the daily Screen Time total from a DeviceActivityReport extension inside the containing app, or is this intentionally display only?
Thanks.
I'll try to ask a question that makes sense this time :) . I'm using the following method on NSFileManager:
(BOOL) getRelationship:(NSURLRelationship *) outRelationship
ofDirectoryAtURL:(NSURL *) directoryURL
toItemAtURL:(NSURL *) otherURL
error:(NSError * *) error;
Sets 'outRelationship' to NSURLRelationshipContains if the directory at 'directoryURL' directly or indirectly contains the item at 'otherURL', meaning 'directoryURL' is found while enumerating parent URLs starting from 'otherURL'. Sets 'outRelationship' to NSURLRelationshipSame if 'directoryURL' and 'otherURL' locate the same item, meaning they have the same NSURLFileResourceIdentifierKey value. If 'directoryURL' is not a directory, or does not contain 'otherURL' and they do not locate the same file, then sets 'outRelationship' to NSURLRelationshipOther. If an error occurs, returns NO and sets 'error'.
So this method falsely returns NSURLRelationshipSame for different directories. One is empty, one is not. Really weird behavior. Two file path urls pointing to two different file paths have the same NSURLFileResourceIdentifierKey? Could it be related to https://developer.apple.com/forums/thread/813641 ?
One url in the check lived at the same file path as the other url at one time (but no longer does). No symlinks or anything going on. Just plain directory urls.
And YES calling -removeCachedResourceValueForKey: with NSURLFileResourceIdentifierKey causes proper result of NSURLRelationshipOther to be returned. And I'm doing the check on a background queue.
The documentation specifies that when Contacts framework returns unified contacts that each fetched unified contact object (CNContact) has its own unique identifier that’s different from any individual contact’s identifier in the set of linked contacts and that when refetching a unified contact, that this identifier should be used.
There is also an analogous identifier within the list of contactRelations, but each of these don't seem to corespondent to the unified contacts. For example, is a new contact (Sheryl Zakroff) is created in the simulator Contacts and their spouse is set to Hank Zakroff. However, the GUID created for the contactRelations identifier does not correlate to the original Hank Zakroff GUID and cannot be searched.
Is this a bug or what is the indent of the contactRelations identifier?
Here's a debug output of walking the unifiedContacts:
Name: Hank Zakroff
2E73EE73-C03F-4D5F-B1E8-44E85A70F170
- Other : (555) 766-4823
- Other : (707) 555-1854
Name: David Taylor
E94CD15C-7964-4A9B-8AC4-10D7CFB791FD
- Other : 555-610-6679
Name: Sheryl Zakroff
DE783BC8-7917-4138-93F6-3AF0FD4CE083
- Other : (707) 555-1854
- Spouse: <CNContactRelation: 0x60000000dd60: name=Hank M. Zakroff>
- 534B467D-CA00-46D3-897C-16EEA782C9CF
- Looking for ["534B467D-CA00-46D3-897C-16EEA782C9CF"]
[]
Hello,
I'm trying to figure out why an Int is being inferred over my explicit Double
I'm parsing a CSV that contains 2 tables. I don't own the data so I'm not able to change it.
The first row contains one cell that's used as a title for the document
The second row is empty
The third row contains one cell that's used as the header for the first table
There is a header row for the table
There's a dynamic number of rows for this table
The an empty spacer row
There is a row that's used as a title for the second table
There is a header row for the table
There's a dynamic number of rows for this table
Im able to separate and create two DataFrame's from the data without issue. And this is the initializer I'm using.
DataFrame(
csvData: csvData,
rows: rows,
types: types,
options: options
)
Column names and their CSV types looks like this
var types: [String: CSVType] {
[
// ...
"Column 38": .double,
// ...
]
}
The data in the CSV is
0
nil
nil
nil
2
And this is what the one of the columns in question looks like when printed
▿ 38 :
┏━━━━━━━━━━━┓
┃ Column 38 ┃
┃ <Int> ┃
┡━━━━━━━━━━━┩
│ 0 │
│ nil │
│ nil │
│ nil │
│ 2 │
└───────────┘
- name : "Column 38"
- count : 5
▿ contents : PackedOptionalsArray<Int>
▿ storage : <PackedOptionalsStorage<Int>: 0x600000206360>
The docs state
/// - types: A dictionary of column names and their CSV types.
/// The data frame infers the types for column names that aren't in the dictionary.
Since types contains the column name and it's still being inferred, my assumption is that the issue involves the renaming of the header row when it has empty cells occurs after the types are checked.
Edit:
After setting hasHeaderRow: false from true and adjusting my row offset, the types are now being assigned correctly.
I'd recommend opening a feedback enhancement where renaming columns occurs before type assignment.
Hi there,
Starting with iOS 26.2 RC, all my DeviceActivityMonitor.eventDidReachThreshold get activated immediately as I pick up my iPhone for the first time, two nights in a row.
Feedback: FB21267341
There's always a chance something odd is happening to my device in particular (although I can't recall making any changes here and the debug logs point to the issue), but just getting this out there ASAP in case others are seeing this (or haven't tried!), and it's critical as this is the RC.
DeviceActivityMonitor.eventDidReachThreshold issues also mentioned here: https://developer.apple.com/forums/thread/793747; but I believe they are different and were potentially fixed in iOS 26.1, but it points to this part of the technology having issues and maybe someone from Apple has been tweaking it.
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
Hi, Submitted Family Controls entitlement request a month ago for my main focus app, got approved within a day. Submitted 3 more requests for my extensions, and it has been 16 days without any word.
Saw advice to file a code-level support with DTS in this similar forum:
https://developer.apple.com/forums/thread/812934
Is there anything else I can do before filing a code-level support? Any extra info to provide? If not, can a DTS engineer please refer me for the code-level support?
Thanks!
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Managed Settings
Screen Time
Entitlements
Hello,
Our team submitted a request for Family Controls entitlements for our main app and four related extensions. It has now been a little over two weeks since submission, and the request is still pending review.
We wanted to check if there are any recommended steps we can take on our end to help move the process forward.
Any guidance or tips from anyone who have recently gone through this process would be greatly appreciated. Thank you.
From the Feb 24 news, I understand that for all Apple users in Brazil with iOS26.2 and newer, isEligibleForAgeFeatures will eventually return true. Brazil is a "nonregulated region", and developers will need to handle all three situations of ask first/always share/never share.
Please correct me if I'm wrong above. A few questions follow on the eligibility check:
What's the return value of IsEligibleForAgeFeatures for a Brazilian user who has NOT touched the age range feature at all, thus hasn't picked one of the three options?
How can we test these cases? From the updated sandbox doc, there's more information on declined/approved, will those the same behaviors as a future Brazilian user? The doc used to say Texas, now it doesn't say any region.
On which date will Apple START to return true for IsEligibleForAgeFeatures for Brazilian users? I cannot find the exact date anywhere.
Will ALL of Brazil return true overnight, or is there some ramp up that developers need to be aware of?
Thanks a lot for sharing the guidance, and thanks in advance for more guidance to come!
I'm experiencing a contradictory validation issue with DeviceActivityReportExtension that creates an impossible situation:
The Problem:
Without NSExtensionPrincipalClass in Info.plist → App Store Connect rejects upload with: "Missing Info.plist values. No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found"
With NSExtensionPrincipalClass → Local install fails with: "defines either an NSExtensionMainStoryboard or NSExtensionPrincipalClass key, which is not allowed for the extension point com.apple.deviceactivityui.report-extension"
Setup:
Extension point: com.apple.deviceactivityui.report-extension
Using SwiftUI with @main attribute and DeviceActivityReportExtension protocol
Xcode 16.2, iOS 17.6 deployment target
Code structure:
@main
struct SpoolReport: DeviceActivityReportExtension {
var body: some DeviceActivityReportScene {
// Report scenes here
}
}
The extension builds and runs perfectly without NSExtensionPrincipalClass, but cannot be uploaded to App Store Connect. Adding the key allows upload but breaks local installation.
Is this a known issue? Is there a workaround or correct Info.plist configuration for DeviceActivityReportExtension?
Thank you!
We have developed a Parental/Self control app using Screen time API.
We have used individual authentication to authorize the app, using the instructions here:
https://developer.apple.com/documentation/familycontrols/authorizationcenter
The problem is , that individual auth can be disabled easily , by the following steps:
enter Settings app.
in Settings app, click on the Parental/Self control app.
click to disable screen time restriction.
show the device owner's face/fingerprint. (or pin code)
Why is that a problem:
Parental control apps, or self-control apps, are about giving control to the software, To make it hard for the user to disable the restrictions.
So using the flow I have introduced above, it's super-easy for a user to disable his Parental control restrictions, which misses the entire point of Parental/Self control idea.
Furthermore, not only the user have the means to unlock his screen time restrictions, he also MUST have the means to unlock it.
This makes Screen time (with individual auth) useless:
I have a code ready to make a great parental control app for my clients, with amazing ideas, but I can't use the Screen time API unless this problem is fixed.
Why child-parent auth is not enough:
My clients are grownups people between ages of 15-40, that are interested in self-control, so they don't have iCloud child accounts.
also, the child-parent auth solution forces my clients to give some control to other person, and my clients prefer their privacy. Some of them prefer self-control and not parental-control.
What I suggest as a solution:
1: Give more options to users how to disable the Screen time restrictions. including:
a second faceID / FingerPrint (that isn't the same as the one used to unlock the device)
a second pin password.
a string password
2: Give the users the option to choose to not have the device's owner Face/Finger/Pincode ID , as a method to disable the Screen time restrictions.
This is a question as I don't found any related documents or posts anywhere about this. Does anyone know how and when will this "pop up" shown?
So I'm reworking couple things in my app. And I noticed I had this old code that does the following:
Creates a temporary directory.
Writes a file in the temporary directory.
After the file is written moves the file out of the temporary location and places it in its final destination.
Okay so I was not creating the temporary directory using the recommended API. I was simply doing something like this:
NSURL *tempDirectory = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[NSProcessInfo processInfo].globallyUniqueString]];
// Create tempDirectory and write files inside it.
Now I just changed the code to use the recommended API which takes the the volume of the target destination into account: -URLForDirectory:inDomain:appropriateForURL:create:error:) and I pass in NSItemReplacementDirectory and a url to appropriateForURL so the destination volume is taken into account.
Now I have external storage mounted and I use the recommended approach. I discovered NSFileManager simply writes a directory right in a user facing location titled: **(A Document Being Saved By App Name) ** and the folder is not hidden.
Is this intended behavior for this API? Are temporary files supposed to be user facing? I know it is good practice to clean up temporary stuff when you are done but in crashes or just forgetting to clean up will leave these behind which isn't the behavior I expect for "temporary files." Also if the user is viewing the folder in Finder they'll see these A Document Being Saved By App Name folders appear and disappear in the window as my app does this work.
Hi,
We’re building an iOS app that uses the Screen Time APIs (FamilyControls and DeviceActivity) to display a user’s own usage metrics inside the app.
With the appropriate permissions granted, we are successfully reading and presenting metrics such as:
Total screen time
Device pickups
These metrics are already visible to the user inside our app.
We would now like to introduce a user-initiated “Share” feature. The idea is to:
Render selected Screen Time metrics into a shareable image card generated locally on device.
Present the standard iOS share sheet (UIActivityViewController).
Allow the user to share that image to Messages, social apps, etc., if they choose.
Important clarifications:
This is fully user-initiated.
The app does not automatically transmit Screen Time data.
The metrics are already displayed in-app with user permission.
The share asset would be generated locally.
No background export or server-side posting would occur unless explicitly triggered by the user via the share sheet.
We are seeking clarification on whether there are any policy or API restrictions around:
Rendering Screen Time-derived metrics into a user-facing share card
Allowing user-initiated export of those metrics via the standard iOS share flow
Are there any additional privacy requirements, entitlement constraints, or App Review considerations we should be aware of when implementing this?
Thanks in advance for any guidance.
Topic:
App & System Services
SubTopic:
General
Tags:
App Tracking Transparency
Developer Tools
Screen Time
Privacy
I work on an open source app called Meteorologist (https://sourceforge.net/projects/heat-meteo/). One of the sources the users are allowed to use is Apple's WeatherKit. The app is compiled by me and free to download by anybody.
My developer account has the free level of WeatherKit so 500,000 calls/month and every once in a while the app actually hits that limit, shutting that weather source/service down for the app.
Is there any way to ask users of the app to somehow get their own account (or already have a developer account) and can register their license so it doesn't all bump up against the one (my) "license"? If so, how would that be passed to WeatherKit?
The only thought I have is that they would need to compile the code on their own and sign their own copy.
Thanks for any and all feedback and thoughts.
Ed
I put a test.mp3 (30 sec) file into the App Bundle.
I scheduled an AlarmKit alarm with the file name test.mp3.
The custom sound plays ✅
I copied the file from the App Bundle to Library/Sounds/test2.mp3.
I scheduled an AlarmKit alarm with the file name test2.mp3.
Instead of playing the custom sound, it falls back to the default sound ❌
According to the documentation, sounds placed in Library/Sounds should be playable:
I filed report FB19779004 on August 20, but haven’t received any response yet.
This functionality is critical for our use case, so could you please let me know whether this is expected to be fixed soon, or if I’m misunderstanding the intended behavior?
Topic:
App & System Services
SubTopic:
General
Hello,
Recently we got a question about the event_timestamps for the phone usage report in our research project:
Does the event_timestamp correspond to the start point or end point of a period of interest?
For example, say the event_timestamp is 2024-07-01 23:59:59 with a duration of 86400. The user is noted to have made 2 phone calls during that event_timestamp. Did those phone calls occur in the 86400 seconds prior to that timestamp (i.e., on 2024-07-01) or in the 86400 seconds after that timestamp (i.e., on 2024-07-02)?
Thanks!