Search results for

“DeviceActivityMonitor”

143 results found

Post

Replies

Boosts

Views

Activity

Reply to Trigger Action After eventDidReachThreshold
Yes, you can create a DeviceActivityMonitor app extension and override its eventDidReachThreshold function. The system will invoke your principal class's implementation of that function whenever an event's threshold is reached. You can create one of these extensions in Xcode by clicking File > New > Target > Device Activity Monitor Extension. Xcode will autogenerate a properly configured extension target with a simple implementation of DeviceActivityMonitor that you can then modify to shield apps whenever a threshold is reached.
Topic: App & System Services SubTopic: General Tags:
Apr ’23
SCREEN TIME API is reporting false positives to DeviceActivityMonitor extension in iOS 26.2 & 26.3
Since the iOS 26.2 update, we have been experiencing anomalous behavior with the DeviceActivityMonitor extension when utilizing the ScreenTime API. Specifically, we are receiving the eventDidReachThreshold event within a few minutes of initiating monitoring, despite configuring a high usage limit. The process of turning off Screen Time -> restarting the device -> turning on Screen Time does not work. Any ideas? Thanks Filed Feedback Assistant: FB21560904
0
0
420
Jan ’26
Family Controls entitlement not applying to DeviceActivityMonitor and ShieldConfiguration extensions
I have the Family Controls & Personal Device Usage entitlement approved for my main app target, but I'm unable to get it applied to my app extensions (DeviceActivityMonitor and ShieldConfiguration). The entitlement request form at developer.apple.com/contact shows Thank you for your submission when I submit requests for the extensions, but the requests never actually register. No follow-up email, no change in my account. Without the entitlement on these extensions, I can't use the core Screen Time API functionality (monitoring device activity and displaying shield UIs when apps are blocked). The main app target has the entitlement, but the extensions need it independently to function. Has anyone run into this? Is there a way to get the entitlement extended to app extensions, or is there a step I'm missing in the provisioning process?
0
0
83
Feb ’26
Reply to Is the Screen Time API completely broken in the betas?
i have created an extension and changed the identifier to com.apple.deviceactivity.monitor-extension i subclassed DeviceActivityMonitor in my class and designated it as the principal class of my app extension but non of the methods doesn't get called when trying to monitor an activity what method will trigger the extension? is it center.startMonitoring(activity, during: schedule) in that case why non of my extension DeviceActivityMonitor methods doesn't gets called? why calling requestAuthorization on parent device always fails? can anyone upload some sample code that actually do something?
Topic: App & System Services SubTopic: General Tags:
Aug ’21
Reply to Screen Time API How to send restrict information from parent to child
Thank you for your great help. I'm trying to share applicationTokens with DeviceActivityMonitor Extension, but it doesn't work. I tried some way. For example, I tried to save applicationTokens by using UserDefaults. However, I couldn't do it because the data type of applicationTokens isn't appropriate for UserDefaults. I considered other options like key-value or keychain. But, they seem that they can't save the data type of applicationTokens. Do you know how applicationTokens can be saved and can be transmitted to DeviceActivityMonitor Extension?
Topic: App & System Services SubTopic: General Tags:
Jul ’22
Reply to Setting values in UserDefaults in DeviceActivityMonitor extension
I'm storing timestamps of certain screen time thresholds with DeviceActivityMonitor. Whether or not this is its intended use, something is still off. DeviceActivityMonitor is part of an app extension that is invoked and terminated by the system. Once its functions return, the extension is immediately terminated, meaning there may be data in UserDefaults that never gets persisted. The also docs don't say it's a no-op just that it's unnecessary - but maybe it's necessary inside an app extension?
Topic: App & System Services SubTopic: General Tags:
Apr ’23
DeviceActivityMonitor extension rejected by App Store Connect validator — NSExtensionPointIdentifier "com.apple.deviceactivity.monitor" invalid (IrisAPI -19241)
Hi everyone, I'm building an iOS app that uses a DeviceActivityMonitor app extension as part of the Screen Time / Family Controls API. Every time I try to upload my IPA to App Store Connect, the validation fails with this error: Invalid Info.plist value. The value of the NSExtensionPointIdentifier key, com.apple.deviceactivity.monitor, in the Info.plist of 'Alexandria.app/PlugIns/AlexandriaActivityMonitor.appex' is invalid. Error Domain=IrisAPI Code=-19241, iris-code=STATE_ERROR.VALIDATION_ERROR What I have verified (everything looks correct): NSExtensionPointIdentifier = com.apple.deviceactivity.monitor NSExtensionPrincipalClass = AlexandriaActivityMonitor.AlexandriaActivityMonitorExtension (correctly resolved in the compiled binary, verified with plutil -p) The Swift class correctly subclasses DeviceActivityMonitor CFBundleShortVersionString matches the main app Both the main app and extension provisioning profiles explicitly contain com.apple.developer.family-controls = true (verified by
6
0
621
Mar ’26
Issue with DeviceActivityMonitor - eventDidReachThreshold Callback Not Triggering Properly
Hello, I'm currently experiencing an issue with the DeviceActivityMonitor extension in my code, specifically with the eventDidReachThreshold callback. I'm hoping to get some insights into why this problem occurs and how to resolve it. Problem: Issue 1: The eventDidReachThreshold callback is not triggering as expected. It appears that the callback is not being invoked when the threshold is reached. Issue 2: After a few seconds, the eventDidReachThreshold callback starts to trigger multiple times. This unexpected behavior is causing problems in my code, as it results in incorrect actions being taken. iOS version: iOS16.7.2 and iOS17.1 Xcode version: 15.0.1 Swift version: 5.9 Here is my code to start the monitoring: func startMonitoring() { var startTime : DateComponents = DateComponents(hour: 0, minute: 0) let endTime : DateComponents = DateComponents(hour: 23, minute: 59) /// Creates the schedule for the activity, specifying the start and end times, and setting it to repeat. let schedule = DeviceActiv
1
0
1.2k
Nov ’23
Reply to Designate principal class
Use Call directory Extension Template and create an extension. than create a sub class of DeviceActivityMonitor and change that class as a principle class in the info.plist // MyDeviceActivityMonitor import Foundation import DeviceActivity import ManagedSettings class MyDeviceActivityMonitor: DeviceActivityMonitor{ override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) } override func eventDidReachThreshold(_ event:DeviceActivityEvent.Name,activity:DeviceActivityName){ super.eventDidReachThreshold(event, activity: activity) } } NSExtension NSExtensionPointIdentifier com.apple.deviceactivity.monitor-extension NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).MyDeviceActivityMonitor
Topic: Business & Education SubTopic: General Tags:
Aug ’21
Screen Time API: How to map bundleIdentifier to ApplicationToken for DeviceActivityMonitor when FamilyActivitySelection.Application.bundleIdentifier is nil?
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 Configurati
0
0
384
May ’25
Reply to Screen Time API is completely UNRELIABLE!
Hi @Ivan018 . To check if DeviceActivityMonitor delegates work, I created a singleton class, marked the target to both Project and DeviceActivityMonitor. This way I am able to access the selected apps from family activity picker in the monitor extension. I am shielding the apps in intervalDidEnd. You can try the same in intervalDidStart override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) // Handle the end of the interval. /// Once interval ends restrict the app. let model = DataModel.shared let selection = model.getScheduledSelection() let applications = selection.applicationTokens store.shield.applications = applications.isEmpty ? nil : applications }
Topic: App & System Services SubTopic: General Tags:
May ’24
DeviceActivityMonitor - intervalDidStart() not able to restrict apps/categories/webCategories
I've followed along with the Screen Time API demos (https://developer.apple.com/videos/play/wwdc2021/10123/) Also followed along with this guide, which is essentially the same: https://www.folio3.com/mobile/blog/screentime-api-ios/ I'm able to restrict access to apps/categories with the FamilyActivityPicker and FamilyActivitySelection. I can set a DeviceActivitySchedule, and then use DeviceActivityCenter to start monitoring it. I can tell that the schedule is working, because MyMonitor:intervalDidStart() does get called, and it works except for the restricting of apps/categories/webCategories. It's as if MyModel does not have any values set from within MyMonitor. I've confirmed that MyModel does have the correct FamilyActivitySelection apps etc, everywhere else in my Target, before and after the MyMonitor:intervalDidStart() gets called. MyMonitor is in a separate target called MonitorExtension, that I created using the Device Activity Monitor Extension template. But I made sure to set the Target Membership of
8
0
3.1k
Dec ’22
Reply to Module 'DeviceActivity' not found
I was also able to reproduce this by creating a new barebones project, with adding only two files: MyObjectiveC.m #import MyTestProject-Swift.h and MySwift.swift import DeviceActivity import ManagedSettings import Foundation @objc(MyMonitor) class MyMonitor: DeviceActivityMonitor { }
Topic: Programming Languages SubTopic: Swift Tags:
Dec ’22
FamilyControls DeviceActivityMonitor extension can't change shields
I've been working on a small app using the new FamilyControls API, and I can't get the extension to make any visible changes to shields (or anything else). I can get the main app to authorize and set and remove shields reliably. I can also get the extension to run reliably in the background on a schedule (confirmed with Console). But even if I try only setting the restricted apps to nil or the empty set the apps remain shielded until I run the same code from the main app. I do have the Family Controls entitlement set on both the app and the extension, and I've tried having it off on the extension. I have tried putting both of them into an App Group to no effect. I've wrapped up the most basic working example I can think of into a project: https://github.com/dpowers/ScreenPact Any ideas about what stupid thing I'm missing?
5
0
2.7k
Nov ’21
Reply to Trigger Action After eventDidReachThreshold
Yes, you can create a DeviceActivityMonitor app extension and override its eventDidReachThreshold function. The system will invoke your principal class's implementation of that function whenever an event's threshold is reached. You can create one of these extensions in Xcode by clicking File > New > Target > Device Activity Monitor Extension. Xcode will autogenerate a properly configured extension target with a simple implementation of DeviceActivityMonitor that you can then modify to shield apps whenever a threshold is reached.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Apr ’23
SCREEN TIME API is reporting false positives to DeviceActivityMonitor extension in iOS 26.2 & 26.3
Since the iOS 26.2 update, we have been experiencing anomalous behavior with the DeviceActivityMonitor extension when utilizing the ScreenTime API. Specifically, we are receiving the eventDidReachThreshold event within a few minutes of initiating monitoring, despite configuring a high usage limit. The process of turning off Screen Time -> restarting the device -> turning on Screen Time does not work. Any ideas? Thanks Filed Feedback Assistant: FB21560904
Replies
0
Boosts
0
Views
420
Activity
Jan ’26
Family Controls entitlement not applying to DeviceActivityMonitor and ShieldConfiguration extensions
I have the Family Controls & Personal Device Usage entitlement approved for my main app target, but I'm unable to get it applied to my app extensions (DeviceActivityMonitor and ShieldConfiguration). The entitlement request form at developer.apple.com/contact shows Thank you for your submission when I submit requests for the extensions, but the requests never actually register. No follow-up email, no change in my account. Without the entitlement on these extensions, I can't use the core Screen Time API functionality (monitoring device activity and displaying shield UIs when apps are blocked). The main app target has the entitlement, but the extensions need it independently to function. Has anyone run into this? Is there a way to get the entitlement extended to app extensions, or is there a step I'm missing in the provisioning process?
Replies
0
Boosts
0
Views
83
Activity
Feb ’26
Reply to Is the Screen Time API completely broken in the betas?
i have created an extension and changed the identifier to com.apple.deviceactivity.monitor-extension i subclassed DeviceActivityMonitor in my class and designated it as the principal class of my app extension but non of the methods doesn't get called when trying to monitor an activity what method will trigger the extension? is it center.startMonitoring(activity, during: schedule) in that case why non of my extension DeviceActivityMonitor methods doesn't gets called? why calling requestAuthorization on parent device always fails? can anyone upload some sample code that actually do something?
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Aug ’21
Reply to Screen Time API How to send restrict information from parent to child
Thank you for your great help. I'm trying to share applicationTokens with DeviceActivityMonitor Extension, but it doesn't work. I tried some way. For example, I tried to save applicationTokens by using UserDefaults. However, I couldn't do it because the data type of applicationTokens isn't appropriate for UserDefaults. I considered other options like key-value or keychain. But, they seem that they can't save the data type of applicationTokens. Do you know how applicationTokens can be saved and can be transmitted to DeviceActivityMonitor Extension?
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Jul ’22
Reply to Setting values in UserDefaults in DeviceActivityMonitor extension
I'm storing timestamps of certain screen time thresholds with DeviceActivityMonitor. Whether or not this is its intended use, something is still off. DeviceActivityMonitor is part of an app extension that is invoked and terminated by the system. Once its functions return, the extension is immediately terminated, meaning there may be data in UserDefaults that never gets persisted. The also docs don't say it's a no-op just that it's unnecessary - but maybe it's necessary inside an app extension?
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Apr ’23
DeviceActivityMonitor extension rejected by App Store Connect validator — NSExtensionPointIdentifier "com.apple.deviceactivity.monitor" invalid (IrisAPI -19241)
Hi everyone, I'm building an iOS app that uses a DeviceActivityMonitor app extension as part of the Screen Time / Family Controls API. Every time I try to upload my IPA to App Store Connect, the validation fails with this error: Invalid Info.plist value. The value of the NSExtensionPointIdentifier key, com.apple.deviceactivity.monitor, in the Info.plist of 'Alexandria.app/PlugIns/AlexandriaActivityMonitor.appex' is invalid. Error Domain=IrisAPI Code=-19241, iris-code=STATE_ERROR.VALIDATION_ERROR What I have verified (everything looks correct): NSExtensionPointIdentifier = com.apple.deviceactivity.monitor NSExtensionPrincipalClass = AlexandriaActivityMonitor.AlexandriaActivityMonitorExtension (correctly resolved in the compiled binary, verified with plutil -p) The Swift class correctly subclasses DeviceActivityMonitor CFBundleShortVersionString matches the main app Both the main app and extension provisioning profiles explicitly contain com.apple.developer.family-controls = true (verified by
Replies
6
Boosts
0
Views
621
Activity
Mar ’26
Issue with DeviceActivityMonitor - eventDidReachThreshold Callback Not Triggering Properly
Hello, I'm currently experiencing an issue with the DeviceActivityMonitor extension in my code, specifically with the eventDidReachThreshold callback. I'm hoping to get some insights into why this problem occurs and how to resolve it. Problem: Issue 1: The eventDidReachThreshold callback is not triggering as expected. It appears that the callback is not being invoked when the threshold is reached. Issue 2: After a few seconds, the eventDidReachThreshold callback starts to trigger multiple times. This unexpected behavior is causing problems in my code, as it results in incorrect actions being taken. iOS version: iOS16.7.2 and iOS17.1 Xcode version: 15.0.1 Swift version: 5.9 Here is my code to start the monitoring: func startMonitoring() { var startTime : DateComponents = DateComponents(hour: 0, minute: 0) let endTime : DateComponents = DateComponents(hour: 23, minute: 59) /// Creates the schedule for the activity, specifying the start and end times, and setting it to repeat. let schedule = DeviceActiv
Replies
1
Boosts
0
Views
1.2k
Activity
Nov ’23
Reply to Designate principal class
Use Call directory Extension Template and create an extension. than create a sub class of DeviceActivityMonitor and change that class as a principle class in the info.plist // MyDeviceActivityMonitor import Foundation import DeviceActivity import ManagedSettings class MyDeviceActivityMonitor: DeviceActivityMonitor{ override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) } override func eventDidReachThreshold(_ event:DeviceActivityEvent.Name,activity:DeviceActivityName){ super.eventDidReachThreshold(event, activity: activity) } } NSExtension NSExtensionPointIdentifier com.apple.deviceactivity.monitor-extension NSExtensionPrincipalClass $(PRODUCT_MODULE_NAME).MyDeviceActivityMonitor
Topic: Business & Education SubTopic: General Tags:
Replies
Boosts
Views
Activity
Aug ’21
Screen Time API: How to map bundleIdentifier to ApplicationToken for DeviceActivityMonitor when FamilyActivitySelection.Application.bundleIdentifier is nil?
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 Configurati
Replies
0
Boosts
0
Views
384
Activity
May ’25
Reply to Screen Time API is completely UNRELIABLE!
Hi @Ivan018 . To check if DeviceActivityMonitor delegates work, I created a singleton class, marked the target to both Project and DeviceActivityMonitor. This way I am able to access the selected apps from family activity picker in the monitor extension. I am shielding the apps in intervalDidEnd. You can try the same in intervalDidStart override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) // Handle the end of the interval. /// Once interval ends restrict the app. let model = DataModel.shared let selection = model.getScheduledSelection() let applications = selection.applicationTokens store.shield.applications = applications.isEmpty ? nil : applications }
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
May ’24
DeviceActivityMonitor - intervalDidStart() not able to restrict apps/categories/webCategories
I've followed along with the Screen Time API demos (https://developer.apple.com/videos/play/wwdc2021/10123/) Also followed along with this guide, which is essentially the same: https://www.folio3.com/mobile/blog/screentime-api-ios/ I'm able to restrict access to apps/categories with the FamilyActivityPicker and FamilyActivitySelection. I can set a DeviceActivitySchedule, and then use DeviceActivityCenter to start monitoring it. I can tell that the schedule is working, because MyMonitor:intervalDidStart() does get called, and it works except for the restricting of apps/categories/webCategories. It's as if MyModel does not have any values set from within MyMonitor. I've confirmed that MyModel does have the correct FamilyActivitySelection apps etc, everywhere else in my Target, before and after the MyMonitor:intervalDidStart() gets called. MyMonitor is in a separate target called MonitorExtension, that I created using the Device Activity Monitor Extension template. But I made sure to set the Target Membership of
Replies
8
Boosts
0
Views
3.1k
Activity
Dec ’22
Reply to Module 'DeviceActivity' not found
I was also able to reproduce this by creating a new barebones project, with adding only two files: MyObjectiveC.m #import MyTestProject-Swift.h and MySwift.swift import DeviceActivity import ManagedSettings import Foundation @objc(MyMonitor) class MyMonitor: DeviceActivityMonitor { }
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Dec ’22
Reply to iOS 26 Regression: Screen Time Permission Lost, had to be re-authenticated
@Quappi have you had any updates from Apple on the feedback report? We believe we have encountered the same issue. Our app can still have DeviceActivityMonitor activities active, but does not show up in screen time settings anymore and restrictions do not take effect for an internal user.
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Mar ’26
FamilyControls DeviceActivityMonitor extension can't change shields
I've been working on a small app using the new FamilyControls API, and I can't get the extension to make any visible changes to shields (or anything else). I can get the main app to authorize and set and remove shields reliably. I can also get the extension to run reliably in the background on a schedule (confirmed with Console). But even if I try only setting the restricted apps to nil or the empty set the apps remain shielded until I run the same code from the main app. I do have the Family Controls entitlement set on both the app and the extension, and I've tried having it off on the extension. I have tried putting both of them into an App Group to no effect. I've wrapped up the most basic working example I can think of into a project: https://github.com/dpowers/ScreenPact Any ideas about what stupid thing I'm missing?
Replies
5
Boosts
0
Views
2.7k
Activity
Nov ’21