Hi,
I’m trying to reliably detect when system screen recording finishes, and I’m observing behavior that I don’t fully understand when a Live Activity is expanded via Dynamic Island.
Environment
Devices: iPhone 16 Pro
iOS: 26.2
Xcode: 26.2
Using UIScreen.isCaptured and UIWindowScene.sceneCaptureState
Implementation:
I observe capture state like this:
private var observation: NSKeyValueObservation?
func startObserving() {
observation = UIScreen.main.observe(\.isCaptured, options: [.new]) { _, change in
print("isCaptured:", change.newValue ?? false)
}
}
I also check: window.traitCollection.sceneCaptureState
Steps to Reproduce
Start system screen recording from Control Center.
Confirm UIScreen.main.isCaptured == true.
Expand a Live Activity via the Dynamic Island (e.g. timer or call).
Observe capture state values while the Live Activity UI is expanded.
Observed Behavior
While screen recording is still active:
UIScreen.main.isCaptured becomes false
sceneCaptureState becomes .inactive
This state persists while the recording Live Activity is expanded
The system recording indicator remains visible
The device continues recording
Expected Behavior (or Clarification Needed)
My understanding was that UIScreen.isCaptured indicates whether the device screen is currently being captured (e.g. screen recording or mirroring).
However, this behavior suggests that both isCaptured and sceneCaptureState reflect whether the current scene is part of the capture surface, rather than whether device-level recording is active.
Is this the intended behavior when system-owned surfaces (such as expanded Live Activities) are promoted above the app’s scene?
If so:
Is there any supported way to reliably detect device-level screen recording state (as opposed to scene-level capture participation), in order to trigger logic when recording finishes?
Thank you for any clarification.
Topic:
UI Frameworks
SubTopic:
UIKit