FamilyControls individual authorization: No way to detect revocation while app is backgrounded

We are developing an MDM agent app that uses FamilyControls with .individual authorization to enforce Screen Time restrictions (app blocking, domain blocking via ManagedSettingsStore and DeviceActivityCenter).

The Problem

We are actively subscribing to AuthorizationCenter.shared.$authorizationStatus to detect authorization changes. However, when the user revokes the app's FamilyControls authorization through Settings (either via Settings > Screen Time > Apps With Screen Time Access, or Settings > Apps > [Our App]), the publisher does not emit any value. All ManagedSettingsStore restrictions are lifted immediately by the system, but our app receives no notification of this change.

The only scenario where the publisher reliably emits is when a debugger is attached (i.e., running directly from Xcode). Without the debugger, the publisher is completely silent — even when the app returns to foreground.

Code Example

We tried subscribing directly to AuthorizationCenter.shared.$authorizationStatus with no intermediary, exactly as shown in the documentation:

AuthorizationCenter.shared.$authorizationStatus
    .sink { status in
        print("[DIRECT] authorizationStatus emitted: \(status)")
    }
    .store(in: &cancellables)

This subscription is set up at app launch and stored in cancellables. The result is the same — the publisher does not emit when the user revokes authorization in Settings without a debugger attached.

Documentation Reference

The documentation for authorizationStatus states:

"The status may change due to external events, such as a child graduating to an adult account, or a parent or guardian changing the status in Settings."

And:

"The system sets this property only after a call to requestAuthorization(for:) succeeds. It then updates the property until a call to revokeAuthorization(completionHandler:) succeeds or your app exits."

This suggests the publisher should emit when the status is changed via Settings, but in our testing it does not — unless a debugger is attached.

What We Verified

We tested with a development-signed build (which includes the com.apple.developer.family-controls entitlement), launched from Xcode, then disconnected the debugger, killed the app, and relaunched from the home screen.

ScenarioPublisher emits on revocation?
Running from Xcode (debugger attached)Yes, immediately
Development-signed build (no debugger)No — silent even on foreground return

We also confirmed:

  • MDM configuration profiles can disable Screen Time entirely, but cannot restrict the per-app authorization toggle — the user can always freely revoke the app's Screen Time access

The Security Gap

This creates a significant gap for parental controls use cases:

  1. User leaves the app (app goes to background)
  2. User goes to Settings and disables Screen Time access for the app
  3. All restrictions are immediately lifted
  4. User uses the device freely
  5. User re-enables Screen Time access and opens the app
  6. Everything syncs back to normal — administrator never knows

Questions

  1. Is there any supported mechanism to receive a notification (background or foreground) when FamilyControls individual authorization is revoked? We are subscribing to AuthorizationCenter.shared.$authorizationStatus but it does not emit.

  2. Is the $authorizationStatus publisher expected to work only when a debugger is attached? Is this a known limitation or a bug?

  3. Can DeviceActivityMonitor extension detect authorization revocation? Based on documentation it appears limited to schedule/threshold events, but we haven't confirmed this.

  4. Is there a planned API improvement to address this gap?

Environment

  • iOS 26.2
  • Xcode 26.3
  • Swift 6.2.4
  • FamilyControls .individual authorization

Related Threads

FamilyControls individual authorization: No way to detect revocation while app is backgrounded
 
 
Q