I’m building an iOS app that uses FamilyControls + ManagedSettings + DeviceActivity.
Goal: temporarily “unlock” a shielded app for N minutes, then automatically re-apply the shield when the timer expires.
What I do:
In the main app, when user picks an expiry (e.g. 15 min, 30 min). I start a non-repeating DeviceActivity schedule and remove the app’s ApplicationToken from ManagedSettingsStore().shield.applications.
I also store activeUnlockBundleID etc. in an App Group so the DeviceActivityMonitor extension can re-lock at the end.
Expected:
DeviceActivityMonitor.intervalDidEnd(for:) is invoked when the non-repeating interval ends, and I re-add the token to the shield set.
Actual:
The app does not re-lock when the interval expires.
I added OS logs as well as “debug local notifications” from the DeviceActivityMonitor extension in:
init()
intervalDidStart
intervalDidEnd
eventDidReachThreshold
None of these logs or notifications ever appear, which suggests the extension is never invoked (or cannot schedule local notifications or OS logs).
Environment:
Device: iPhone 17 Pro
iOS 26.3.1
Xcode 26.4
Running on a physical device
Notification permissions for the app: granted
App + extensions are in the same App Group entitlement.
Extension Info.plist has:
NSExtensionPointIdentifier = com.apple.deviceactivity.monitor
NSExtensionPrincipalClass = $(PRODUCT_MODULE_NAME).DeviceActivityMonitorExtension
Questions:
Are there known limitations/requirements for DeviceActivityMonitor callbacks where intervalDidEnd doesn't to fire?
Is posting local notifications / OS Logs from a DeviceActivityMonitor extension supported/reliable? If not, what’s the recommended way to verify the extension is invoked?
If this looks like a platform bug, should I file Feedback Assistant? If so, what logs/artifacts are most useful?
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
0
0
31