Hi everyone,
I have a question regarding the intended privacy limits of the DeviceActivityReportExtension.
According to the documentation and the WWDC21 session "Meet the Screen Time API", this extension was created specifically to prevent the host application from accessing the user's underlying activity data (websites visited, app usage, screen time, etc).
But I have found that my host app is actually able to reconstruct this raw activity data from the activity report. I am able to extract specific visited websites and app usage durations back into the main app.
I reported this to Apple Security (Case ID: OE1100504480881 ), assuming it was a sandbox bypass. However, they closed the ticket stating that this is "expected behavior" and requires no fix.
My question for Screen Time Engineers: Is the documentation incorrect? If my host app is expected to be able to read this data, is there a formal API we should be using instead of extracting it from the report extension?
The current behavior contradicts the privacy limits described in the documentation, so I am confused if I should rely on this data access for my app features or if it will be patched later.
Thanks.
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
Created
After reading the news below, we are currently working on updating our app in preparation for the enforcement of Texas SB 2420.
https://developer.apple.com/news/?id=2ezb6jhj
Based on the information in the announcement, we understand that parents will be able to revoke their consent for apps.
However, we are unsure how an app is supposed to obtain or verify the parent’s consent status in the first place.
We reviewed the Declared Age Range API and PermissionKit’s Significant Change API, but could not find any functionality related to this.
If anyone with expertise on this topic has insight, we would greatly appreciate your guidance.
Thank you in advance.
After reading the news below, we are currently working on updating our app in preparation for the enforcement of Texas SB 2420.
https://developer.apple.com/news/?id=2ezb6jhj
Based on the information in the announcement, we understand that parents will be able to revoke their consent for apps.
However, we are unsure how an app is supposed to obtain or verify the parent’s consent status in the first place.
We reviewed the Declared Age Range API and PermissionKit’s Significant Change API, but could not find any functionality related to this.
If anyone with expertise on this topic has insight, we would greatly appreciate your guidance.
Thank you in advance.
操作步骤:1:调用let eligible = try await AgeRangeService.shared.isEligibleForAgeFeatures,返回YES后,再次调用 let response = try await AgeRangeService.shared.requestAgeRange(ageGates:18, in: viewController)
switch response {
case .declinedSharing:
DispatchQueue.main.async {
completion(.declinedSharing, nil, nil)
}
case .sharing(let swiftRange):
DispatchQueue.main.async {
let model = ARAgeRange(swiftRange: swiftRange)
completion(.sharing, model, nil)
}
[MTAgeRangeService requestEligibility:^(BOOL eligible) {
if (eligible) {
//您应用程序的用户所在的地区,需要执行特定年龄相关义务
[MTAgeRangeService requestAgeRangeWithAgeGates:18 in:[ViewU getCurrentVC] completion:^(enum ARResponseType responseType, ARAgeRange * _Nullable ageRange, NSError * _Nullable error) {
[weakself.ageRangeLoadingView dissmiss];
self->_ageRangeLoadingView = nil;
if (responseType == ARResponseTypeSharing) {
//用户同意并分享了年龄范围
if ([ageRange.lowerBound intValue] >= 18) {
//满18岁可以注册
}else{
//不到18岁不能注册,提示一下
}
}else{
//用户拒绝或者其他未知错误,需要提示
}else{
}
}
}] ;
}else{
}];
I'm facing a problem where notification permissions are working fine in the main app, but failing in the Device Activity Report Extension on iOS 26. This issue wasn’t present in earlier iOS versions. Despite having notification permissions granted in the main app, the extension fails to get authorization.
iOS 26:
"
Before iOS 26:
Topic:
App & System Services
SubTopic:
General
Tags:
Notification Center
User Notifications
Screen Time
Hi everyone,
I'm building a task management app that layers on top of EventKit/Reminders. I'm also moderating /r/AppleReminders.
I see a confusion around the semantics of dates on both the developer side and on the user side.
I'm trying to map the standard productivity mental model to the EKReminder implementation and hitting some walls.
In productivity contexts, a task tends to have three distinct dates:
Start Date: When the task becomes actionable — Don’t alert the user before this date.
Notification: When the device should buzz/ping the user — Meaning that they can get started on the task.
Due Date: Hard deadline — If the system works well, tasks are meant to rarely be past-deadline; productivity systems are about meeting deadlines rather than about missing them.
The EventKit Reality
Here is what I’m seeing in practice, and I’m hoping someone can correct me if I’m wrong:
Field
Description
In Practice (Reminders App)
startDateComponents
Docs say "start date of the task"
Seemingly unused? I can set it via API, but the Reminders app UI ignores it. It doesn't seem to trigger visibility in "Today" or Smart Lists.
dueDateComponents
Docs say "date by which reminder should be completed"
Conflated. Acts as the "Date" you see in the list. It functions as the Start Date (shows in Today), Due Date (turns red tomorrow), AND Notification time (unless early alerts are set).
alarms
Inherited from EKCalendarItem
seems to be used for the actual notifications, including "Early Reminders," but tightly coupled to the due date in the UI.
My Questions:
Is startDateComponents effectively a dead field? Is there any native behavior (Smart List filtering, sorting, visibility) that respects this field, or is it purely for metadata storage for third-party apps?
Smart List Logic: I was hoping to create a Smart List that shows "Actionable" items (i.e., Start Date <= Today). However, the Smart List filters only offer a generic "Date" field, which maps to dueDateComponents. Has anyone successfully filtered by startDateComponents in a native Smart List?
Conflation: Is there any "blessed" way to set a Due Date that is distinct from the Notification time without fighting the system? (e.g. Due Friday, but remind me Wednesday).
Any insight into the intended semantics here would be huge. I'm trying to avoid fighting the framework, but the "One Date to Rule Them All" approach in the Reminders app is making it tricky to support separate Start/Due dates.
Thanks!
Hello,
We are encountering an issue where invoking our App Clip via a Safari Smart App Banner fails on certain devices, particularly those running iOS 26.
When a user taps "Open" on the Smart App Banner, the App Clip card attempts to load but ultimately fails with ASDErrorDomain Error 507.
The error occurs consistently on specific devices, while other devices function correctly. In some instances, the App Clip card metadata/UI appears momentarily (flashes on the screen) before the error message is displayed and the process terminates.
Has anyone else experienced this specific ASDErrorDomain error? We have already submitted a report via Feedback Assistant, but any insights or workarounds from the community would be appreciated.
Thanks!
I’m trying to fully understand the purpose of the ageGates parameter in the AgeRangeService.requestAgeRange API.
The official documentation includes the following statement:
“The system may return geo-specific age ranges that override your provided age gates based on the person’s location and applicable regulations.
When geo-specific ranges are required, the returned age range reflects regulatory requirements rather than the bounds of your age gates.”
Based on this, it seems that even if my app provides specific age thresholds through the ageGates parameter,
the system may override those boundaries depending on regional laws or regulations, and return a completely different lowerBound / upperBound than what my age gates would suggest.
My current understanding is:
ageGates indicates the thresholds my app uses to define its internal feature tiers,
but the actual age range returned by the OS is determined by legal or regional requirements (e.g., COPPA, GDPR-K, AADC, SB2420),
meaning the returned age range may not align with the age ranges implied by my ageGates values.
I’d like to confirm whether this interpretation is correct.
Additionally, if different regions may produce different lowerBound / upperBound values due to regulatory requirements,
then it seems that:
developers shouldn’t rely on fixed age buckets, and
instead must implement feature gating logic dynamically based on whatever age range the OS returns.
So my questions are:
Is my understanding correct that ageGates is simply a hint that describes my app’s tier thresholds, and the OS may override those boundaries to comply with local regulations?
If lowerBound / upperBound can vary across regions, what is the recommended way for developers to design their feature-gating logic?
Should we avoid hardcoded age buckets and instead build flexible logic that adapts to whatever range the OS returns?
I’d appreciate clarification so I can design our age-based policies appropriately and in a regulation-compliant way.
In iOS 26.1, after my app answers a VoIP call on the lock screen, tapping the bottom-left "More" button doesn't bring up the app icon to jump to the app. The same scenario works normally on iOS 26. How can I resolve this issue?
I followed the method outlined in Apple's documentation to test "Revocation of Consent." Our server received the notification sent by Apple, but the parsed data only contains the following content (some data has been modified for privacy, but the fields remain unchanged):
{
"receiptType": "Sandbox",
"bundleId": "com.xxx.xxxxx",
"receiptCreationDate": 1764932591296,
"requestDate": 1764932591296,
"originalPurchaseDate": 1375340400000,
"originalApplicationVersion": "1.0",
"appTransactionId": "705020051250081000",
"originalPlatform": "iOS"
}
How can we identify that "a parent/guardian has revoked authorization for a specific user"? We are unable to determine which minor user should be restricted from using certain features of our app.
I hope to receive a prompt response from Apple's technical experts!
Topic:
App & System Services
SubTopic:
General
I followed the method outlined in Apple's documentation to test "Revocation of Consent." Our server received the notification sent by Apple, but the parsed data only contains the following content (some data has been modified for privacy, but the fields remain unchanged):
{
"receiptType": "Sandbox",
"bundleId": "com.xxx.xxxxx",
"receiptCreationDate": 1764932591296,
"requestDate": 1764932591296,
"originalPurchaseDate": 1375340400000,
"originalApplicationVersion": "1.0",
"appTransactionId": "705020051250081000",
"originalPlatform": "iOS"
}
How can we identify that "a parent/guardian has revoked authorization for a specific user"? We are unable to determine which minor user should be restricted from using certain features of our app.
I hope to receive a prompt response from Apple's technical experts!
Thanks A Lot !
Topic:
App & System Services
SubTopic:
General
Is it possible to develop for TelephonyMessagingKit on iOS 26 outside of the EU? If so, how is this accomplished? I have added the 'Default Carrier Messaging App' entitlement to my project, but I do not see an option to set my app as a default option in settings on my device. I am not located inside of the EU, but would like to test this functionality.
Topic:
App & System Services
SubTopic:
General
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
We first discovered this issue in our own product, but we were able to reproduce it even when using Apple’s official demo:
https://developer.apple.com/documentation/alarmkit/scheduling-an-alarm-with-alarmkit
Reproduction Steps:
Set an alarm on iOS 26.1 using AlarmKit.
Upgrade the device to iOS 26.2 beta 3 or later.
The alarm will no longer ring.
Based on our testing, versions prior to 26.2 beta 2 do not exhibit this issue, so it appears that something introduced in beta 3 has caused the regression.
The results are as follows:
iOS 26.1 → iOS 26.2 beta 2 or earlier: Alarms ring normally
iOS 26.1 / iOS 26.2 beta 2 → iOS 26.2 beta 3 / iOS 26.2 RC: Alarms fail to ring
iOS 26.2 beta 3 → iOS 26.2 RC: Alarms ring normally
This issue is critical. Users currently on iOS 26.1 may experience alarms failing to ring after updating their system, which can cause real-life disruptions (e.g., being late for work). We strongly recommend addressing this as soon as possible.
Xcode Version: Version 26.1.1 (17B100)
Feedback ID: FB21273655
Topic:
App & System Services
SubTopic:
General
My son uses an iPhone XS running iOS 18.7.2. He is able to bypass all Screen Time app limits by manually changing the date under Settings → General → Date & Time. When he sets the date/time forward or backward, the configured Screen Time restrictions no longer apply.
Please make it possible on iOS 18.7.2 (and future versions) to prevent manual date and time changes when Screen Time is enabled, so that children cannot use this method to circumvent app limits.
Topic:
App & System Services
SubTopic:
General
I created my app with the wrong name and deleted it 3 days ago. When I want to create a new app, I can't use the old app's bundle id, even though I removed it. I opened a support case 2 days ago, but so far nothing changed.
Topic:
App & System Services
SubTopic:
General
Hello fellow developers...first time posting. I wrote a small app that I'm currently testing. However, I inadvertently built the Swift code using my "free" account and did not use my "paid" account. Aside from the restrictions of a free account, I want to migrate the project to the paid developer account.
Is there an easy way to do this short of rebuilding from scratch???
Thanks in advance.
s
Topic:
App & System Services
SubTopic:
General
I'm running into a contradictory requirement involving the DeviceActivity Report extension (com.apple.deviceactivityui.report-extension) that makes it impossible to both:
upload the app to App Store Connect, and
install the app on a physical device.
This creates a complete catch-22.
📌 Overview
My extension:
Path: Runner.app/PlugIns/LoADeviceActivityReport.appex
Extension point: com.apple.deviceactivityui.report-extension
Implementation (SwiftUI):
import SwiftUI
import DeviceActivity
@main
struct LoADeviceActivityReport: DeviceActivityReportExtension {
var body: some DeviceActivityReportScene {
// ...
}
}
This is the standard SwiftUI @main DeviceActivityReportExtension template.
🟥 Side A — iOS runtime behavior (device installer)
If I add either of these keys to the extension's Info.plist:
NSExtensionPrincipalClass
NSExtensionMainStoryboard
then the app cannot be installed on a real iPhone/iPad.
The device installer fails with:
Error 3002
AppexBundleContainsClassOrStoryboard
NSExtensionPrincipalClass and NSExtensionMainStoryboard are not allowed
for extension point com.apple.deviceactivityui.report-extension.
To make the app install and run, I must remove both keys completely.
This leaves the extension Info.plist like:
NSExtension
NSExtensionPointIdentifier
com.apple.deviceactivityui.report-extension
With this, the app installs and runs correctly.
🟥 Side B — App Store Connect upload validator
However, when I upload the IPA with the runtime-correct Info.plist, App Store Connect rejects it:
State: STATE_ERROR.VALIDATION_ERROR (HTTP 409)
Missing Info.plist values.
No values for NSExtensionMainStoryboard or NSExtensionPrincipalClass found in
extension Info.plist for Runner.app/PlugIns/LoADeviceActivityReport.appex.
So ASC requires that at least one of those keys be present.
💥 The catch-22
If I add PrincipalClass / MainStoryboard:
✔ App Store Connect validation passes
❌ But the app can NOT be installed on any device (Error 3002)
If I remove PrincipalClass / MainStoryboard:
✔ The app installs and runs correctly
❌ ASC rejects the upload with “Missing Info.plist values”
There is currently NO Info.plist configuration that satisfies both:
Runtime:
"NSExtensionPrincipalClass and NSExtensionMainStoryboard are not allowed."
App Store Connect:
"You must include NSExtensionPrincipalClass or NSExtensionMainStoryboard."
📌 Expected behavior
For SwiftUI @main DeviceActivityReportExtension, the documentation and examples suggest the correct configuration is:
NSExtensionPointIdentifier
com.apple.deviceactivityui.report-extension
with no principal class or storyboard at all.
If that is correct for runtime, ASC seems to need updated validation rules for this extension type.
❓My Questions
What is the officially correct Info.plist configuration for a SwiftUI DeviceActivityReportExtension?
Should principal class / storyboard not be required for this extension type?
Is this a known issue with App Store Connect validation?
Is there currently a workaround that allows:
installation on device and
successful App Store Connect upload,
without violating runtime restrictions?
From https://developer.apple.com/forums/thread/803945?answerId=862153022#862153022, the testing of Age Range API was not available through xcode simulator back in Oct 2025.
Is this available now? In particular:
Is requestAgeRange testing available through simulator?
Is requestAgeRange testing with sandbox account available through simulator?
Is isEligibleForAgeFeatures available through simulator?
Is isEligibleForAgeFeatures testing with sandbox account available through simulator?
If the answer is "yes" to any of the above, which version of the xcode and ios version should I use?
So far I didn't get any of the above working on the simulator, and I can't find any documentation on the answers above.
Thank you!