Summary
We are seeing a recurring fatal NSInternalInconsistencyException on iOS 26.x devices. The crash originates entirely from system frameworks (Foundation / WebKit / Screen Time / NSXPCConnection) — there are no app frames in the stack. The exception is raised from an XPC reply on a worker thread, so the host app cannot wrap it in @try/@catch.
The crash appears to be a KVO consistency check failing inside the platform's internal Screen Time observer (STScreenTimeConfigurationObserver) when it observes
WKWebView's configuration.enforcesChildRestrictions key path. The exception message states the value of the intermediate key configuration changed without an
appropriate KVO notification.
Environment
- iOS versions: 26.2.1 (also seen on 26.0.x – 26.2.x)
- Devices: iPhone 13 (iPhone14,5), iPhone 16 Plus, others
- App orientation: portrait
- Process state at crash: BACKGROUND (most occurrences)
- App uses WKWebView in several screens (link preview, in-app web, 3rd-party SDK web views)
- Crash is recurring across multiple users on iOS 26.x and is reproducible at scale in production
Exception
Name: NSInternalInconsistencyException Reason: Cannot update for observer <WKScreenTimeConfigurationObserver 0x...> for the key path "configuration.enforcesChildRestrictions" from <STScreenTimeConfigurationObserver 0x...>, most likely because the value for the key "configuration" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the STScreenTimeConfigurationObserver class.
Crashing thread (top frames)
0 CoreFoundation __exceptionPreprocess 1 libobjc.A.dylib objc_exception_throw 2 Foundation -[NSKeyValueNestedProperty object:withObservance:didChangeValueForKeyOrKeys:recurse:forwardingValues:] 3 Foundation NSKeyValueDidChange 4 Foundation -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:] 5 Foundation -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey🔑 key:usingBlock:] 6 Foundation NSSetObjectValueAndNotify 7 CoreFoundation invoking 8 Foundation -[NSInvocation invoke] 9 Foundation <deduplicated> 10 Foundation -[NSXPCConnection _decodeAndInvokeReplyBlockWithEvent:sequence:replyInfo:] 11 Foundation __88-[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:]_block_invoke_5 12 libxpc.dylib _xpc_connection_reply_callout 13 libxpc.dylib _xpc_connection_call_reply_async 14 libdispatch.dylib _dispatch_mach_msg_async_reply_invoke 15 libdispatch.dylib _dispatch_root_queue_drain_deferred_item 16 libdispatch.dylib _dispatch_kevent_worker_thread
(Every frame above frame 0 lives in the system. No app frames are present.)
What we observed
- Crash fires asynchronously on a libdispatch kevent worker thread, triggered by an XPC reply from the Screen Time service.
- The exception is thrown while the platform updates a chained KVO key path (
configuration.enforcesChildRestrictions) on a WKWebView instance. - The intermediate key
configurationapparently changed without a paired willChange/didChange notification, which Foundation's KVO machinery then flags as inconsistency. - Because the throw happens on the XPC reply path, there is no app-level synchronous frame we can wrap to recover. The exception unwinds straight into
std::__terminate.
What we tried (no effect)
- Confirmed all WKWebView creation and release happens on the main thread.
- Stop loading and nil out navigationDelegate before releasing the WKWebView.
- Avoided mutating WKWebViewConfiguration after the WKWebView is created.
- Checked for any custom KVO on WKWebView.configuration in app code — none exists.
- The crash still reproduces; we have no path to mitigate it from the application side.
Questions for Apple / the community
- Is
STScreenTimeConfigurationObserverexpected to observeWKWebView.configuration.enforcesChildRestrictionsunder all conditions on iOS 26, or only when Screen Time /
Communication Limits / Child Restrictions are enabled on the device? 2. Is there a public API (WKWebViewConfiguration option, Info.plist key, etc.) to opt a WKWebView out of Screen Time observation for hosts that do not need Screen Time integration for their web content? 3. Is this a known regression in iOS 26.x KVO chained-key-path notification posting inside WebKit's Screen Time integration? If so, is a fix slated for an upcoming 26.x release? 4. Is there any recommended workaround on the application side that does not rely on swizzling private Foundation / NSXPCConnection methods?
Reproduction notes
We do not have a deterministic local repro. Crashes are heavily concentrated on:
- iOS 26.2.1
- Devices with Screen Time / Communication Limits / Child Restrictions configured at the OS level
- App entering the BACKGROUND state shortly after a WKWebView session
If anyone has a reliable local repro on a developer device, please share — we would also like to file a Feedback Assistant report with steps.
Filed Feedback
Will attach FB number once filed.
Thanks in advance.