On iOS 26.3.1, deviceactivityd produces zero log output and never wakes a DeviceActivityMonitor extension at the scheduled time, even when the schedule is successfully registered. The extension's intervalDidStart(for:) method is never called.
Steps to Reproduce:
Create an app with a DeviceActivityMonitor extension subclass
Add the com.apple.developer.family-controls entitlement to both the main app and extension targets
Add a shared App Group entitlement to both targets
In the main app, call:
let center = DeviceActivityCenter()
center.stopMonitoring([.myActivity])
let schedule = DeviceActivitySchedule(
intervalStart: DateComponents(hour: 17, minute: 30),
intervalEnd: DateComponents(hour: 17, minute: 45),
repeats: true
)
try center.startMonitoring(.myActivity, during: schedule)
Verify registration succeeds: DeviceActivityCenter().activities.contains(.myActivity) returns true
Background the app completely and wait for the intervalStart time (5:30 PM in this example)
Expected Result:
intervalDidStart(for:) is called in the extension process at 5:30 PM. ManagedSettings shields are applied without any user interaction.
Actual Result:
intervalDidStart(for:) is never called. No extension process is launched. Filtering Console.app for deviceactivityd on the device returns 0 messages — the daemon produces no logs whatsoever despite an active registered schedule. Shields are never applied.
Additional Evidence:
Third-party apps using DeviceActivity (e.g. Prayer Lock) successfully apply shields at scheduled times on the same device and OS version, confirming the framework is not universally broken
Filtering Console.app for the app's bundle ID at the trigger time shows the main app process applying shields via a UNCalendarNotificationTrigger fallback — but no extension process activity
DeviceActivityCenter().activities correctly lists the registered activity before and after the trigger time, confirming the schedule registration API is functional
Environment:
iOS 26.3.1
Physical device (required for FamilyControls)
Development-signed build with com.apple.developer.family-controls entitlement provisioned
App Group shared between main app and extension targets
Device Activity
RSS for tagMonitor web and app usage through custom time windows and events.
Posts under Device Activity tag
67 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Similar Issue to FB13556935:
On iOS 26.3.1, deviceactivityd produces zero log output and never wakes a DeviceActivityMonitor extension at the scheduled time, even when the schedule is successfully registered. The extension's intervalDidStart(for:) method is never called.
Steps to Reproduce:
Create an app with a DeviceActivityMonitor extension subclass
Add the com.apple.developer.family-controls entitlement to both the main app and extension targets
Add a shared App Group entitlement to both targets
In the main app, call:
let center = DeviceActivityCenter()
center.stopMonitoring([.myActivity])
let schedule = DeviceActivitySchedule(
intervalStart: DateComponents(hour: 17, minute: 30),
intervalEnd: DateComponents(hour: 17, minute: 45),
repeats: true
)
try center.startMonitoring(.myActivity, during: schedule)
Verify registration succeeds: DeviceActivityCenter().activities.contains(.myActivity) returns true
Background the app completely and wait for the intervalStart time (5:30 PM in this example)
Expected Result:
intervalDidStart(for:) is called in the extension process at 5:30 PM. ManagedSettings shields are applied without any user interaction.
Actual Result:
intervalDidStart(for:) is never called. No extension process is launched. Filtering Console.app for deviceactivityd on the device returns 0 messages — the daemon produces no logs whatsoever despite an active registered schedule. Shields are never applied.
Additional Evidence:
Third-party apps using DeviceActivity (e.g. Prayer Lock) successfully apply shields at scheduled times on the same device and OS version, confirming the framework is not universally broken
Filtering Console.app for the app's bundle ID at the trigger time shows the main app process applying shields via a UNCalendarNotificationTrigger fallback — but no extension process activity
DeviceActivityCenter().activities correctly lists the registered activity before and after the trigger time, confirming the schedule registration API is functional
Environment:
iOS 26.3.1
Physical device (required for FamilyControls)
Development-signed build with com.apple.developer.family-controls entitlement provisioned
App Group shared between main app and extension targets
Hello,
my app is frequently loosing / forgetting the Screen Time Permission that had been granted previously on iOS 26.
I have experienced it myself, sysdiagnose is in this radar:
FB18997699
But also also my App Store users who have updated to iOS 26 already have reported this bug.
It would be great if Apple could ensure that this bug is addressed before iOS 26 is released to the public.
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
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
A screen time app I'm making has started telling users that their limit was reached even when they're far below their limit for the day (sometimes even at 0 minutes for the day).
This issue only started happening after upgrading my software to iOS 26.2.
Is this happening to anyone else? If so how have you found any solutions or does anyone know of any changes that could be causing this? Any help would be appreciated.
Hi,
I’m building an iOS app called SocialLite using Apple’s Screen Time APIs, primarily FamilyControls and ManagedSettings.
My goal is to block access to the Instagram app itself, while still allowing the user to receive and see Instagram notifications.
Right now, when I apply the shield/block using the Screen Time API, the Instagram app is blocked as expected, but its notifications also appear to be blocked/suppressed at the same time.
What I’m trying to achieve:
Block the Instagram app from being opened
Still allow Instagram notifications to come through normally
Current behavior:
The app is blocked
Notifications are also blocked or no longer visible
My question:
Is there any supported way with Apple’s Screen Time API / ManagedSettings to shield or block an app while still allowing that app’s notifications?
Or are app access and notifications tied together by design when a shield is applied?
If this behavior is expected, I’d appreciate confirmation from Apple or guidance on whether there is another supported approach.
Thanks.
Hi everyone,
I'm running into what appears to be a stuck Family Controls entitlement request and wanted to see if anyone has experienced something similar.
Request ID: 9D7MU547QH
The request is still showing a status of "Submitted".
Context:
• Our main app bundle ID was already approved for the Family Controls entitlement.
• Two related extensions (ShieldConfiguration and DeviceActivityMonitor) were also approved within a few days.
• The remaining request is for a ShieldAction extension, which handles button taps from the shield UI.
This entitlement is currently blocking our business's beta testing, so we’re trying to understand whether this is just normal queue delay or if the request might be stuck.
Has anyone seen a case where the main app and other extensions were approved but a ShieldAction request remained in "Submitted" for an extended period?
If an Apple engineer happens to see this, I’d greatly appreciate any guidance on whether the request might be stuck in the review queue.
Thank you!
Topic:
App & System Services
SubTopic:
General
Tags:
Entitlements
Family Controls
Device Activity
Screen Time
I am building a simple iOS app that shows the total phone usage time for today using the Screen Time APIs.
Architecture:
Main app
→ requests authorization using AuthorizationCenter.shared.requestAuthorization(for: .individual)
→ displays a DeviceActivityReport
Report extension
→ DeviceActivityReportExtension
→ calculates total usage using DeviceActivityResults<DeviceActivityData>
→ shows the number in a SwiftUI view
The report works correctly. The extension successfully calculates the total usage and displays it on screen.
Example logic inside the report extension:
for await activityData in data {
for await segment in activityData.activitySegments {
totalSeconds += segment.totalActivityDuration
}
}
let totalMinutes = Int(totalSeconds / 60)
The problem:
I need the main app to access that number so I can store it daily in my own database.
I tried to send the value from the extension to the main app using:
App Group + UserDefaults(suiteName:)
App Group + shared file (FileManager.containerURL)
writing inside makeConfiguration(...)
Example:
if let defaults = UserDefaults(suiteName: "group.myapp") {
defaults.set(value, forKey: "savedTotalActivity")
}
But the main app cannot read the value. The report extension displays the number correctly, but the data never appears in shared storage.
Questions:
Is DeviceActivityReportExtension intentionally sandboxed so Screen Time data cannot be exported to the containing app?
Is there any supported way for the main app to access the total usage value calculated in the report extension?
If exporting the value is restricted, what is the recommended architecture for apps that want to store daily Screen Time totals for later analysis?
Goal:
I want a simple app that records something like:
2026-03-08 → 244 minutes
2026-03-09 → 198 minutes
and stores it inside the app database.
Any guidance on the correct architecture would help.
On iOS 26.2 (23C55), DeviceActivityMonitor.eventDidReachThreshold fires intermittently for a daily schedule (00:00–23:59) even when iOS Screen Time shows 0 minutes for the selected apps that day. This causes premature shielding via ManagedSettings.
Environment: iPhone 13 Pro Max, iOS 26.2 (23C55). Event selection: 2 apps. Threshold: 30 minutes. Multiple TestFlight users report the same behavior across various app selections and thresholds. Intermittent (~50% of days); sometimes multiple days in a row. Not observed in testing prior to iOS 26.2.
Evidence: sysdiagnose + Screen Time screenshots (with 0 screen time on selected apps) + unified logs show UsageTrackingAgent notifying the extension that “unproductive from activity daily reached its threshold,” followed immediately by ManagedSettings shield being applied (extension reacting to the callback).
Filed Feedback Assistant: FB21450954.
Questions: Are others seeing this on 26.2? Does it correlate with restarting monitoring at interval boundaries or includesPastActivity settings?
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
I'm building an app that uses the Family Controls / Screen Time APIs (FamilyControls, ManagedSettings). My app has three targets, each with a distinct Bundle ID:
Main App
Shield Configuration Extension
ShieldAction Extension
All three have com.apple.developer.family-controls in their entitlements files, and they share an App Group.
My question is about the distribution entitlement request form at developer.apple.com/contact/request/family-controls-distribution: does the form need to be submitted once per Bundle ID, or is a single submission for the main app sufficient to then enable Family Controls (Distribution) for the extension Bundle IDs in the developer portal as well?
I've seen conflicting reports in other forum threads — some developers say one submission covers all targets, others say separate submissions are needed per Bundle ID. I've already submitted the main app, but now I am wondering whether I should submit one for each Shield extension. Thanks!
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
When I tap on one of the buttons in the ShieldAction extension I want to close the shield and open the parent app instead of the shielded app. Is there any way of doing this using the Screen Time API?
class ShieldActionExtension: ShieldActionDelegate {
override func handle(action: ShieldAction, for application: ApplicationToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
// Handle the action as needed.
let store = ManagedSettingsStore()
switch action {
case .primaryButtonPressed:
//TODO - open parent app
completionHandler(.defer)
case .secondaryButtonPressed:
//remove shield
store.shield.applications?.remove(application)
completionHandler(.defer)
@unknown default:
fatalError()
}
}
}
Topic:
App & System Services
SubTopic:
General
Tags:
Managed Settings
Family Controls
Device Activity
Screen Time
Description: I am developing a digital well-being application using the Screen Time API (FamilyControls, ManagedSettings, and DeviceActivity). I am encountering a critical issue where the ApplicationToken provided by the system to my app extensions suddenly changes, causing a mismatch with the tokens originally stored by the main application.
The Problem: When a user selects applications via FamilyActivityPicker, we persist the FamilyActivitySelection (and the underlying ApplicationToken objects) in a shared App Group container. However, we are seeing frequent cases where the token passed into:
ShieldConfigurationDataSource.configuration(shielding:in:)
ShieldActionDelegate.handle(action:for:completionHandler:)
...does not match (using ==) any of the tokens previously selected and stored.
IOS version: 26.2.1
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
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.
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.
Hi DTS / Apple engineers,
We’re attempting to extending our screen time app target to Mac Catalyst. On iOS, FamilyControls works as expected (AuthorizationCenter + FamilyActivityPicker, then ManagedSettings shields + DeviceActivity monitoring/reporting).
On Mac Catalyst:
The project builds with FamilyControls/DeviceActivity/ManagedSettings capabilities enabled.
But attempting to request FamilyControls authorization (or present FamilyActivityPicker) fails at runtime. We see errors similar to:
Failed to get service proxy: The connection to service named com.apple.FamilyControlsAgent was invalidated: failed at lookup with error 159 - Sandbox restriction.
And our app stays authorizationStatus == .notDetermined, with the request failing.
We saw an Apple engineer suggestion to “disable App Sandbox”, but Mac Catalyst apps appear to always be sandboxed, so we can’t disable it.
Questions:
Is FamilyControls authorization supported on Mac Catalyst today? If so, what entitlement/capability is required specifically for Catalyst/macOS?
If FamilyControls auth cannot succeed on Catalyst, does that mean ManagedSettings shields and DeviceActivity monitoring/reporting are effectively unusable on Catalyst (since they depend on that authorization)?
Is there an Apple‑recommended approach for a Catalyst “portal” app that mirrors an iOS child device’s restrictions, or is local enforcement on Catalyst intentionally unsupported?
Any guidance (and any official docs that clarify current platform support) would be hugely appreciated.
Topic:
App & System Services
SubTopic:
General
Tags:
Mac Catalyst
Family Controls
Device Activity
Managed Settings
There is an inconsistent issue when views are rendered from the Device Activity Report Extension. This issue is noticeable only on release versions and it works fine in debug mode.
Around 80% of the times, the Report Views return blank screen and this is only the case when a weekly/monthly filter is used. Although, it works as expected for daily report views.
My questions are:
How are all the Report Activity Views working fine in debug mode but not in release mode?
How the daily activity filter works fine in the release mode but the weekly/monthly filters don't work? Is this because of a memory limit issue in the extension?
As of now, I have the family-controls(distribution) entitlement only for the app and for the extensions I only have family-controls(development) entitlement. Do I need to request for family-controls(Distribution) entitlement even for the extensions?
I have seen threads on the forum mentioning the blank screen issue associated with the DeviceActivityReport but haven't found a solution to it. Any suggestions/feedback would be of great help, thanks.
Topic:
App & System Services
SubTopic:
General
Tags:
Extensions
Entitlements
Device Activity
Screen Time
DeviceActivityReportExtension issues
Hi,
I am currently working on a project and hoping to use DeviceActivityReportExtension. I have already successfully set up the DeviceActivityMonitorExtension and that is working correctly, but can't get this to reproduce. I initially had a complex capacitor project which displayed a native UI screen which (tried to) display the screen time report though it was failing silently.
I tried a much simpler setup with a pure swift project (not an iOS dev so forgive my poor code quality) and still having an issue getting this to render on my computer. Here is a reproduction:
https://github.com/ethanmichel0/screen-time-report-bug-recreation/tree/main
Does this code work for others? and if not do you know how I can set this up? idk if my Xcode or iOS versions are incompatible (see versions in that link).
Would be super grateful for some help, thanks so much.
Hi,
I got family controls (distribution) approved for my main app and assumed this would carry over to my extensions but it did not. Do I need to re-request for other the deviceactivitymonitorextension and deviceactivityreportextension?
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.
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)