Explore the integration of web technologies within your app. Discuss building web-based apps, leveraging Safari functionalities, and integrating with web services.

All subtopics
Posts under Safari & Web topic

Post

Replies

Boosts

Views

Activity

Passing data buffers from web to Swift?
The new WKJSScriptingBuffer API allows Swift to define data buffers and make them available to JS code running in a WKWebView. Is there any API for passing an ArrayBuffer of data from a WKWebView to Swift code? Currently the usual workaround is to convert the buffer to a base64 string, but that is slow and can lead to exhausting memory depending on the size of the buffer. On the web, window.postMessage() has an argument that allows transferring ownership of ArrayBuffers to the receiver, but the webkit.messageHandlers.<name>.postMessage() API doesn't seem to support that.
Topic: Safari & Web SubTopic: WebKit
1
0
197
Jun ’26
How do I prevent javascript injection?
I build a framework that has a function that returns a UIView with a web view inside. The app that uses the framework has control over the webview through the subviews API of my UIView. I do not want the framework consumer to utilise the web view's methods and properties. How do I limit access to web view methods like evaluateJavascript, navigation delegate etc?
Topic: Safari & Web SubTopic: WebKit
1
0
193
Jun ’26
New document reader app deciding WebKit versus SwiftUI with a11y as tiebreaker
I'm working on a document reader for long form articles and I love what WebKit gives me for quickly delivering good looking content. But I'm hearing that accessibility support is stronger if I go with UIKit or SwiftUI. Accessibility support is meant to be a headline feature in my app so it's the deciding factor on which technology I should use (webview versus UIKit/SwiftUI). Given Accessibility Reader now provides system-wide reflow and spoken reading, is there now a durable reason a document reader developer should still invest in native UIKit/SwiftUI rendering rather than well-structured HTML in a webview? Where specifically does the system stop helping webview content? What I've heard is that webviews are disadvantaged on custom rotors, focus, and Dynamic Type fidelity. Is this accurate or has it changed this year? Bottom line, I'm wondering if WebKit is a compromise for a11y if I want not baseline accessibility, but truly leading unsurpassed accessibility.
Topic: Safari & Web SubTopic: General Tags:
0
0
283
Jun ’26
\Forcing a WKWebsiteDataStore proxy change onto existing connections without losing session state
Context: This is for a privacy relay in a browser, where the proxy is toggled on/off and rotated mid-session, so we can't lose the user's logged-in sessions when it engages. Connection pool behavior — is this expected? When we mutate proxyConfigurations on a live data store, the proxy only applies to newly-visited origins. Origins that already have established connections keep going direct — reloading the page, and even tearing down and recreating the WKWebView, doesn't move them onto the proxy. The only thing that reliably forces all traffic through the proxy is swapping in a brand-new WKWebsiteDataStore. Is that the intended behavior — i.e. is recreating the store the expected way to re-establish the connection pool — or is there a supported way to invalidate the existing connections so a mutated proxy config takes effect on already-loaded origins? What does fetchData/restoreData actually carry? To preserve the session across that store swap, we serialize the old store with fetchData(of: WKWebsiteDataStore.allWebsiteDataTypes()) and rehydrate the new one with restoreData(_:) (iOS 26). Passing the full allWebsiteDataTypes() set, does this round-trip everything those types represent — cookies, localStorage, IndexedDB, service worker registrations, etc. — into a store created with init(forIdentifier:)? And does anything not enumerated by allWebsiteDataTypes() — per-site permissions, tracking-prevention/ITP state — get dropped silently?
Topic: Safari & Web SubTopic: WebKit
2
0
205
Jun ’26
WebKit WKScreenTimeConfigurationObserver Crash in iOS26.2
Our app uses WKWebView to load web pages, and we're encountering a crash with WKScreenTimeConfigurationObserver on iOS 26.1 and above. However, there are no WKScreenTimeConfigurationObserver-related code calls in our project. The crash log is as follows: NSInternalInconsistencyException Cannot update for observer <WKScreenTimeConfigurationObserver 0x13be821e0> for the key path "configuration.enforcesChildRestrictions" from <STScreenTimeConfigurationObserver 0x13be808e0>, 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. We want to confirm if this is a system bug. How can we fix it?
3
1
3.1k
Jun ’26
Safari iOS 17 layout issue
Safari on iOS 17, when entering characters into text input box after deleting characters, the layout is off. Here's the HTML: <body> <div id="J001" style="display: inline-block;"> <div id="J001__0" style="display: inline-block;"> <input id="J001__0__input" style="display: inline-block; height: 28px; padding:2px; border:1px solid gray;"></div> <div id="J003__0" style="display: inline-block;"> <button id="J003__0__btn" style="display: inline-block; height:34px;">a</button> </div> </div> </body> Enter "A" into text input box. Delete "A" with the backspace(x). Enter "A" into text input box, the button position will be shifted down. iOS 17 の Safari にて、テキスト入力ボックスで文字を削除した後、文字を入力するとレイアウトが崩れます。 テキスト入力ボックスに「A」と入力します。 バックスペース(x)で「A」を削除します。 テキスト入力ボックスに「A」と入力すると、ボタンの位置が下にずれます。
2
1
1.7k
Jun ’26
How to optimize a website for Siri voice search and Safari?
Hello everyone, I am testing how Siri interacts with web pages on iOS devices. When a user utilizes Siri voice commands to search for or open a specific website, Siri usually processes the request and opens the result inside the Safari browser. As a web developer, I want to know if there are any specific HTML meta tags, Schema markup, or SEO best practices that we should implement. This is to ensure Siri can accurately recognize the website's name, brand, and content. What are the simplest ways to make a static web page friendly for Siri voice search? Thanks in advance!
0
0
506
Jun ’26
(Air)Printing from JavaScript in Safari?
Is there any documentation or advice on printing from a Safari webapp (in JavaScript)? My app needs to print labels, and printing from Safari presents few options. For example, you can't turn off backgrounds or the URL/date/time footer. And it wants to print a full-size page, which ends up printing miles of label. (I've also tried printing from SwiftUI on a macOS app, and even that is just terrible to try to get right. Why is printing so hard?)
0
0
798
May ’26
Client-Side PDF Download Performance Issue in Safari
Hi Team, We are observing a noticeable performance difference in client-side PDF generation between Safari and Chrome. Use Case We have an AI modal with a “Download PDF” feature. The PDF is generated on the client side using HTML content from the modal. Observation Chrome: PDF generation completes in ~1–2 seconds Safari: Same flow takes ~25–30 seconds Additional Details The functionality works correctly in both browsers, and the PDF downloads successfully. The issue is mainly the increased processing time in Safari. The modal content may include: Large formatted text Markdown/code blocks Images/styled UI We suspect the delay may be related to Safari’s handling of: Canvas rendering DOM-to-image conversion Blob/PDF generation Font/image processing Libraries/approaches involved: html2canvas jsPDF window.print() (in some cases) Question Is this considered expected behavior in Safari/WebKit for client-side PDF generation? Has anyone found effective Safari-specific optimizations or best practices to improve performance for this use case? Thanks in advance.
2
0
1.5k
May ’26
iOS26.4 WKWebView loadurl error -1005
We are seeing intermittent WKWebView main-frame navigation failures on iOS 26.4.x. The failure is reported through: webView:didFailProvisionalNavigation:withError: The error code is: NSURLErrorNetworkConnectionLost (-1005) The affected pages are normal HTTPS H5 pages loaded by WKWebView,。 From our client logs, the issue appears during provisional navigation, before the page finishes loading. In many cases, error.userInfo does not contain a useful description, and the log only shows: did fail provisional navigation, error code: -1005, description: nil We have also observed a high concentration of this error on iOS 26.4.x devices. The failures are intermittent and may recover after a retry, which makes us suspect that the underlying network connection may be lost during request processing or connection reuse. What we would like to know: Is there any known issue in iOS 26.4.x / WebKit / CFNetwork that could cause WKWebView provisional navigation to fail with NSURLErrorNetworkConnectionLost (-1005)? Does WKWebView expose any public API or diagnostic mechanism to determine whether the failed request reused an existing TCP/HTTP2 connection? Is there a recommended way to collect lower-level networking diagnostics for WKWebView, such as connection reuse, HTTP/2 stream state, socket close timing, or CFNetwork diagnostics? For main-frame GET navigations that fail with -1005, is a one-time silent retry considered an acceptable mitigation? We can provide timestamps, affected URLs, device OS versions, and client logs if needed.
Topic: Safari & Web SubTopic: General
1
0
1.6k
May ’26
WKWebView/Safari delayed and duplicate JavaScript loading after recent iOS/Safari update
We are investigating a web application performance issue observed in iOS Safari/WKWebView after a recent iOS/Safari update. In the network waterfall, the main backend/document request completes within an acceptable time, but JavaScript resources appear to load late and in a more sequential pattern. We also noticed duplicate requests for some static JavaScript assets, which further delays full page rendering. The issue is more visible in iOS Safari/WKWebView compared with other browsers/environments.
0
0
1k
May ’26
WKWebView iOS 26 preventing javascript injections
I have an ASP.NET WebForm website application running under a WebView (WKWebView) developed with DotNet MAUI, and I've been experiencing problems since compiling with iOS 26. Specifically, there are two buttons on the webform. These buttons use some JavaScript code defined within the page via onClientClick from the ASPX page, while the button is also called from the server side using code like this: string encodedMessage = System.Web.HttpUtility.JavaScriptStringEncode(diffLocationMessage, true); string scriptError = $"hideLoading(); showBootStrapStyleAlert({encodedMessage}, 'error');"; ScriptManager.RegisterStartupScript(this, GetType(), "Alert_Error_DiffLoc", scriptError, true); Some of these JavaScript scripts work, while others don't. At the same time, the OnClientClick button on the MAUI side uses a special handler to process a parameter (ENTRY or EXIT) received from these buttons and updates some hidden fields and labels on the webform side. await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hfLatMaui')) document.getElementById('hfLatMaui').value = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hfLonMaui')) document.getElementById('hfLonMaui').value = '{longitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hiddenCurrentLat')) document.getElementById('hiddenCurrentLat').value = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hiddenCurrentLon')) document.getElementById('hiddenCurrentLon').value = '{longitude}';"); // Part 2: Update labels await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('lblLatMaui')) document.getElementById('lblLatMaui').innerText = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('lblLonMaui')) document.getElementById('lblLonMaui').innerText = '{longitude}';"); Server-side operations are performed with the values ​​received from here. While the above problems did not occur up to iOS 18.x and Xcode 16.4, they are now occurring. What should I do? What do you suggest? NOTE-1: When my iPhone is connected to my M4 Pro PC via a Type-C Lightning cable, I saw that everything worked correctly when I ran the page under the Develop menu in Safari - I tested it. NOTE-2: The problem is, as explained in NOTE-1, that the WebView executes some JavaScript behaviors while blocking others.
Topic: Safari & Web SubTopic: General
6
0
1.3k
May ’26
Safari not intercepting Universal Link after OAuth2 (Auth0) redirect
We have an issue where Safari on iOS is not handing off to our app after an Auth0 authentication redirect. Issue After a user completes sign-in via an Auth0-hosted login page in Safari, the callback redirect is followed as a plain HTTP navigation rather than being intercepted and handed off to the app. Callback URL format https://identity.example.com/ios/com.example.app/callback Steps to reproduce Open an Auth0 /authorize URL in Safari on iOS with a redirect_uri pointing to a Universal Link callback, log in, and observe that Safari navigates to the callback URL as a plain HTTP request rather than launching the app. What works ASWebAuthenticationSession inside the app handles the same callback correctly. Navigating directly to a Universal Link launches the app, confirming AASA and Universal Links are correctly configured on the affected devices. The issue is specific to Safari intercepting the callback URL when it arrives as the result of an Auth0 redirect. Affected devices Reproducible across multiple devices and iOS versions from iOS 18.x through iOS 26.x. Does Safari have a restriction on intercepting Universal Links that result from a cross-domain redirect? Any guidance appreciated 🙏
1
0
683
May ’26
iOS Safari: Taking multiple photos via camera in overrides previous capture instead of accumulating
Summary On iOS Safari (and WKWebView-based browsers), when a web page uses <input type="file" accept="image/*" capture="environment"> (or capture="user"), the user can only ever hold one captured photo at a time. Each time the file picker is opened and the user takes a new photo using the camera, the newly captured image completely replaces the previously captured image in the input's files FileList. There is no way to accumulate multiple camera-captured photos across successive picker sessions. Steps to Reproduce Set up a web page with an <input type="file" accept="image/*" multiple> element (with or without the capture attribute). Open the page in iOS Safari on an iPhone. Tap the file input — choose Take Photo from the action sheet. Capture a photo and tap Use Photo. Verify input.files.length === 1 (first photo is captured). Tap the same file input again — choose Take Photo again. Capture a second photo and tap Use Photo. Check input.files.length. Expected Result input.files.length should be 2 (or more), containing both the first and second captured photos. The browser should accumulate photos across picker sessions when the multiple attribute is present. Actual Result input.files.length is 1 — only the most recently captured photo is present. The previously captured photo is completely gone. Every new camera capture wipes out all prior selections. Root Cause Analysis On iOS, each invocation of the system file picker (whether using the camera or photo library) creates a brand-new FileList and assigns it to the input element, discarding any previously selected files. The FileList interface is read-only per the HTML spec — web developers cannot programmatically append File objects to it. The DataTransfer API workaround (constructing a new FileList via DataTransfer.items.add()) does not work on iOS Safari — the DataTransfer constructor is not supported for programmatic file list manipulation in file inputs on iOS WebKit. This is specific to iOS. On macOS Safari and all desktop browsers, users can select multiple files in a single picker session, avoiding this issue. Impact This makes it impossible to build a web-based multi-photo capture workflow on iOS using standard HTML APIs. Common real-world use cases that are broken: Uploading multiple photos of a document one page at a time Capturing multiple product photos for a listing Progressive photo capture in inspection or form-filling apps Any PWA or web app requiring sequential camera captures Users must select all photos in a single picker session. If they tap "Cancel" or close the picker, all prior captures are permanently lost. Request Please fix WebKit on iOS so that when <input type="file" multiple> is used, re-opening the file picker either: Accumulates newly selected/captured files into the existing FileList, or Presents the system picker with previously selected files pre-checked (similar to how macOS handles re-opening file dialogs), or Exposes a web API (e.g., via the File System Access API's showOpenFilePicker() with multi-select) that developers can use to manage a cumulative file collection on iOS. Environment Devices: iPhone 13, 14, 15 Pro (physical devices) iOS versions: iOS 16.x, 17.x, 18.x — all affected Browser: Safari (Mobile) Also reproduced in: Chrome for iOS, Firefox for iOS (both use WKWebView) Not reproducible on: macOS Safari, Chrome desktop, Firefox desktop A Feedback Assistant report has been filed. Happy to provide a minimal HTML repro page on request.
Topic: Safari & Web SubTopic: General
1
0
635
May ’26
iOS crash: EXC_BAD_ACCESS in iOS 26+ when mouting/dismounting WebView
I'm experiencing a native crash on iOS 26+ with WebKit with title: EXC_BAD_ACCESS (KERN_INVALID_ADDRESS). The stack trace points to UIKit/WebKit animation and context menu handling, and the crash occurs while a WebView is presented or dismissed. Crashed: com.apple.main-thread 0 WebKit 0x7bcfac <redacted> + 12 1 WebKit 0xaf5c34 <redacted> + 84 2 UIKitCore 0x34ebdc -[_UIContextMenuAnimator performAllCompletions] + 248 3 UIKitCore 0x7f997c block_destroy_helper.72 + 1840 4 UIKitCore 0x7fb4b4 objectdestroy.36Tm + 88 5 UIKitCore 0x7ad354 objectdestroy.3Tm + 30500 6 UIKitCore 0x5c0e5c __swift_memcpy192_8 + 4352 7 UIKitCore 0x21944 block_copy_helper.374 + 40 8 UIKitCore 0x1dc174 -[_UIGroupCompletion _performAllCompletions] + 160 9 UIKitCore 0x35d0c4 -[_UIGravityWellEffectBody .cxx_destruct] + 180 10 UIKitCore 0x215018 -[UIScrollView _contentLayoutGuideIfExists] + 72 11 UIKitCore 0x943e4 NSStringFromUIEdgeInsets + 304 12 UIKitCore 0x94348 NSStringFromUIEdgeInsets + 148 13 UIKitCore 0x8f598 __UIVIEW_IS_EXECUTING_ANIMATION_COMPLETION_BLOCK__ + 36 14 UIKitCore 0x1995d8c -[UIViewAnimationBlockDelegate _sendDeferredCompletion:] + 92 15 libdispatch.dylib 0x1adc _dispatch_call_block_and_release + 32 16 libdispatch.dylib 0x1b7fc _dispatch_client_callout + 16 17 libdispatch.dylib 0x38b10 _dispatch_main_queue_drain.cold.5 + 812 18 libdispatch.dylib 0x10ec8 _dispatch_main_queue_drain + 180 19 libdispatch.dylib 0x10e04 _dispatch_main_queue_callback_4CF + 44 20 CoreFoundation 0x6a2b4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 21 CoreFoundation 0x1db3c __CFRunLoopRun + 1944 22 CoreFoundation 0x1ca6c _CFRunLoopRunSpecificWithOptions + 532 23 GraphicsServices 0x1498 GSEventRunModal + 120 24 UIKitCore 0x9ddf8 -[UIApplication _run] + 792 25 UIKitCore 0x46e54 UIApplicationMain + 336 26 - 0xedf88 main + 24 (AppDelegate.swift:24) 27 ??? 0x196686e28 (Missing)
1
0
829
May ’26
Apple cookie error
Hi everyone, We are currently experiencing a strange issue with our PWA on iOS and I wanted to ask if anyone has seen something similar before. Setup Around 1,200 active users ASP.NET backend/server PWA hosted on a subdomain: user.PLACEHOLDER.de The app has two main areas: User area: /User Admin area: /Customers Most users install the PWA normally through Safari using “Add to Home Screen”. The Problem The issue only happens on iOS when the app is installed as a real PWA. Steps to reproduce: Admin opens the installed PWA Admin navigates to the admin section (/Customers) Admin closes the PWA while still being inside /Customers When the admin reopens the app, the entire app is broken and nothing works anymore However: If the admin navigates back to the normal user area (/User) BEFORE closing the app, everything works fine The issue only happens if the app is closed while inside /Customers At this point, the only fix is: uninstall the PWA reinstall it login again The Weird Part If the user only adds the website icon to the home screen WITHOUT installing it as a standalone PWA, everything works perfectly. So the issue seems to happen specifically in iOS standalone PWA mode. Additional Notes Only happens on Apple/iOS devices After latest IOS-Update Android works perfectly Has anyone experienced something similar or knows what could cause this behavior? The cookie settings in ASP.NET: options.Cookie.Domain = ".PLACEHOLDER.de"; options.Cookie.IsEssential = true; options.Cookie.HttpOnly = true; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.Path = "/"; options.Cookie.Name = ".AspNet.SharedCookie"; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; EDIT: I currently suspect that the issue is related to cookies/session handling, but I’m not sure. Unfortunately we cannot properly debug iOS because we only have Windows devices available. The mainfest.json: { "manifest_version": 3, "name": "Name", "short_name": "Name", "description": "Buchen von Kursen", "icons": [ { "src": "/images/192x192.png", "sizes": "192x192" }, { "src": "/images/512x512.png", "sizes": "512x512" } ], "display": "standalone", "start_url": "https://user.PLACEHOLDER.de/User", "scope":"/", "content_scripts": [ { "js": [ "service-worker.js" ] } ] }
Topic: Safari & Web SubTopic: General
1
0
1.5k
May ’26
Browser upload from camera roll
When using a web page to upload from the camera roll. During selection everything is ok but after confirming the selection, its still possible to change the selection and if media is in a processing or downloading state its not obvious to a user what is going on. This results to a confusing user experience. It doesn't seem like theres any signal back to the page in this state, its just a poor camera roll picker which doesn't block selection changes or show any progress that something is happening (i.e. localising or processing for upload). Same result on Chrome and Safari
Topic: Safari & Web SubTopic: General
1
0
603
May ’26
Resources not loading over HTTP/3 on iOS 26.3/4
Since 28 April, we have seen some bizarre behaviour where iOS 26.3 and 26.4 are intermittently not loading some CSS and JS resources from our CDN. This is only reproducible when our CDN has HTTP/3 enabled. When reproduced in the Simulator, Safari's HAR shows that it is not even attempting to request those resources; it does not appear to be a network issue. Oddly enough switching to a different CDN with HTTP/3 enabled appears to resolve the issue. As far as I can tell, this hasn't been reported on the Webkit tracker; we'd be happy to provide Apple with additional data in a formal bug report but it would be helpful to know what data would be useful to provide.
1
1
868
May ’26
[iOS 26.x] WKWebView crashes with NSInternalInconsistencyException — KVO inconsistency on configuration.enforcesChildRestrictions from STScreenTimeConfigurationObserver
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:key:usingBlock:] 6 Foundation NSSetObjectValueAndNotify 7 CoreFoundation invoking 8 Foundation -[NSInvocation invoke] 9 Foundation 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 configuration apparently 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 STScreenTimeConfigurationObserver expected to observe WKWebView.configuration.enforcesChildRestrictions under 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.
1
1
1.2k
May ’26
Is there a way to get password autofill on a WebView?
Hi, I see that on WebViews we don't get the same interface for allowing the user to use a saved password or passkey as in Safari or on an Authentication View. Can the same be accomplished on a WebView?
Topic: Safari & Web SubTopic: WebKit
Replies
1
Boosts
1
Views
220
Activity
Jun ’26
Passing data buffers from web to Swift?
The new WKJSScriptingBuffer API allows Swift to define data buffers and make them available to JS code running in a WKWebView. Is there any API for passing an ArrayBuffer of data from a WKWebView to Swift code? Currently the usual workaround is to convert the buffer to a base64 string, but that is slow and can lead to exhausting memory depending on the size of the buffer. On the web, window.postMessage() has an argument that allows transferring ownership of ArrayBuffers to the receiver, but the webkit.messageHandlers.<name>.postMessage() API doesn't seem to support that.
Topic: Safari & Web SubTopic: WebKit
Replies
1
Boosts
0
Views
197
Activity
Jun ’26
How do I prevent javascript injection?
I build a framework that has a function that returns a UIView with a web view inside. The app that uses the framework has control over the webview through the subviews API of my UIView. I do not want the framework consumer to utilise the web view's methods and properties. How do I limit access to web view methods like evaluateJavascript, navigation delegate etc?
Topic: Safari & Web SubTopic: WebKit
Replies
1
Boosts
0
Views
193
Activity
Jun ’26
New document reader app deciding WebKit versus SwiftUI with a11y as tiebreaker
I'm working on a document reader for long form articles and I love what WebKit gives me for quickly delivering good looking content. But I'm hearing that accessibility support is stronger if I go with UIKit or SwiftUI. Accessibility support is meant to be a headline feature in my app so it's the deciding factor on which technology I should use (webview versus UIKit/SwiftUI). Given Accessibility Reader now provides system-wide reflow and spoken reading, is there now a durable reason a document reader developer should still invest in native UIKit/SwiftUI rendering rather than well-structured HTML in a webview? Where specifically does the system stop helping webview content? What I've heard is that webviews are disadvantaged on custom rotors, focus, and Dynamic Type fidelity. Is this accurate or has it changed this year? Bottom line, I'm wondering if WebKit is a compromise for a11y if I want not baseline accessibility, but truly leading unsurpassed accessibility.
Topic: Safari & Web SubTopic: General Tags:
Replies
0
Boosts
0
Views
283
Activity
Jun ’26
\Forcing a WKWebsiteDataStore proxy change onto existing connections without losing session state
Context: This is for a privacy relay in a browser, where the proxy is toggled on/off and rotated mid-session, so we can't lose the user's logged-in sessions when it engages. Connection pool behavior — is this expected? When we mutate proxyConfigurations on a live data store, the proxy only applies to newly-visited origins. Origins that already have established connections keep going direct — reloading the page, and even tearing down and recreating the WKWebView, doesn't move them onto the proxy. The only thing that reliably forces all traffic through the proxy is swapping in a brand-new WKWebsiteDataStore. Is that the intended behavior — i.e. is recreating the store the expected way to re-establish the connection pool — or is there a supported way to invalidate the existing connections so a mutated proxy config takes effect on already-loaded origins? What does fetchData/restoreData actually carry? To preserve the session across that store swap, we serialize the old store with fetchData(of: WKWebsiteDataStore.allWebsiteDataTypes()) and rehydrate the new one with restoreData(_:) (iOS 26). Passing the full allWebsiteDataTypes() set, does this round-trip everything those types represent — cookies, localStorage, IndexedDB, service worker registrations, etc. — into a store created with init(forIdentifier:)? And does anything not enumerated by allWebsiteDataTypes() — per-site permissions, tracking-prevention/ITP state — get dropped silently?
Topic: Safari & Web SubTopic: WebKit
Replies
2
Boosts
0
Views
205
Activity
Jun ’26
WebKit WKScreenTimeConfigurationObserver Crash in iOS26.2
Our app uses WKWebView to load web pages, and we're encountering a crash with WKScreenTimeConfigurationObserver on iOS 26.1 and above. However, there are no WKScreenTimeConfigurationObserver-related code calls in our project. The crash log is as follows: NSInternalInconsistencyException Cannot update for observer <WKScreenTimeConfigurationObserver 0x13be821e0> for the key path "configuration.enforcesChildRestrictions" from <STScreenTimeConfigurationObserver 0x13be808e0>, 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. We want to confirm if this is a system bug. How can we fix it?
Replies
3
Boosts
1
Views
3.1k
Activity
Jun ’26
Safari iOS 17 layout issue
Safari on iOS 17, when entering characters into text input box after deleting characters, the layout is off. Here's the HTML: <body> <div id="J001" style="display: inline-block;"> <div id="J001__0" style="display: inline-block;"> <input id="J001__0__input" style="display: inline-block; height: 28px; padding:2px; border:1px solid gray;"></div> <div id="J003__0" style="display: inline-block;"> <button id="J003__0__btn" style="display: inline-block; height:34px;">a</button> </div> </div> </body> Enter "A" into text input box. Delete "A" with the backspace(x). Enter "A" into text input box, the button position will be shifted down. iOS 17 の Safari にて、テキスト入力ボックスで文字を削除した後、文字を入力するとレイアウトが崩れます。 テキスト入力ボックスに「A」と入力します。 バックスペース(x)で「A」を削除します。 テキスト入力ボックスに「A」と入力すると、ボタンの位置が下にずれます。
Replies
2
Boosts
1
Views
1.7k
Activity
Jun ’26
How to optimize a website for Siri voice search and Safari?
Hello everyone, I am testing how Siri interacts with web pages on iOS devices. When a user utilizes Siri voice commands to search for or open a specific website, Siri usually processes the request and opens the result inside the Safari browser. As a web developer, I want to know if there are any specific HTML meta tags, Schema markup, or SEO best practices that we should implement. This is to ensure Siri can accurately recognize the website's name, brand, and content. What are the simplest ways to make a static web page friendly for Siri voice search? Thanks in advance!
Replies
0
Boosts
0
Views
506
Activity
Jun ’26
(Air)Printing from JavaScript in Safari?
Is there any documentation or advice on printing from a Safari webapp (in JavaScript)? My app needs to print labels, and printing from Safari presents few options. For example, you can't turn off backgrounds or the URL/date/time footer. And it wants to print a full-size page, which ends up printing miles of label. (I've also tried printing from SwiftUI on a macOS app, and even that is just terrible to try to get right. Why is printing so hard?)
Replies
0
Boosts
0
Views
798
Activity
May ’26
Client-Side PDF Download Performance Issue in Safari
Hi Team, We are observing a noticeable performance difference in client-side PDF generation between Safari and Chrome. Use Case We have an AI modal with a “Download PDF” feature. The PDF is generated on the client side using HTML content from the modal. Observation Chrome: PDF generation completes in ~1–2 seconds Safari: Same flow takes ~25–30 seconds Additional Details The functionality works correctly in both browsers, and the PDF downloads successfully. The issue is mainly the increased processing time in Safari. The modal content may include: Large formatted text Markdown/code blocks Images/styled UI We suspect the delay may be related to Safari’s handling of: Canvas rendering DOM-to-image conversion Blob/PDF generation Font/image processing Libraries/approaches involved: html2canvas jsPDF window.print() (in some cases) Question Is this considered expected behavior in Safari/WebKit for client-side PDF generation? Has anyone found effective Safari-specific optimizations or best practices to improve performance for this use case? Thanks in advance.
Replies
2
Boosts
0
Views
1.5k
Activity
May ’26
iOS26.4 WKWebView loadurl error -1005
We are seeing intermittent WKWebView main-frame navigation failures on iOS 26.4.x. The failure is reported through: webView:didFailProvisionalNavigation:withError: The error code is: NSURLErrorNetworkConnectionLost (-1005) The affected pages are normal HTTPS H5 pages loaded by WKWebView,。 From our client logs, the issue appears during provisional navigation, before the page finishes loading. In many cases, error.userInfo does not contain a useful description, and the log only shows: did fail provisional navigation, error code: -1005, description: nil We have also observed a high concentration of this error on iOS 26.4.x devices. The failures are intermittent and may recover after a retry, which makes us suspect that the underlying network connection may be lost during request processing or connection reuse. What we would like to know: Is there any known issue in iOS 26.4.x / WebKit / CFNetwork that could cause WKWebView provisional navigation to fail with NSURLErrorNetworkConnectionLost (-1005)? Does WKWebView expose any public API or diagnostic mechanism to determine whether the failed request reused an existing TCP/HTTP2 connection? Is there a recommended way to collect lower-level networking diagnostics for WKWebView, such as connection reuse, HTTP/2 stream state, socket close timing, or CFNetwork diagnostics? For main-frame GET navigations that fail with -1005, is a one-time silent retry considered an acceptable mitigation? We can provide timestamps, affected URLs, device OS versions, and client logs if needed.
Topic: Safari & Web SubTopic: General
Replies
1
Boosts
0
Views
1.6k
Activity
May ’26
WKWebView/Safari delayed and duplicate JavaScript loading after recent iOS/Safari update
We are investigating a web application performance issue observed in iOS Safari/WKWebView after a recent iOS/Safari update. In the network waterfall, the main backend/document request completes within an acceptable time, but JavaScript resources appear to load late and in a more sequential pattern. We also noticed duplicate requests for some static JavaScript assets, which further delays full page rendering. The issue is more visible in iOS Safari/WKWebView compared with other browsers/environments.
Replies
0
Boosts
0
Views
1k
Activity
May ’26
WKWebView iOS 26 preventing javascript injections
I have an ASP.NET WebForm website application running under a WebView (WKWebView) developed with DotNet MAUI, and I've been experiencing problems since compiling with iOS 26. Specifically, there are two buttons on the webform. These buttons use some JavaScript code defined within the page via onClientClick from the ASPX page, while the button is also called from the server side using code like this: string encodedMessage = System.Web.HttpUtility.JavaScriptStringEncode(diffLocationMessage, true); string scriptError = $"hideLoading(); showBootStrapStyleAlert({encodedMessage}, 'error');"; ScriptManager.RegisterStartupScript(this, GetType(), "Alert_Error_DiffLoc", scriptError, true); Some of these JavaScript scripts work, while others don't. At the same time, the OnClientClick button on the MAUI side uses a special handler to process a parameter (ENTRY or EXIT) received from these buttons and updates some hidden fields and labels on the webform side. await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hfLatMaui')) document.getElementById('hfLatMaui').value = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hfLonMaui')) document.getElementById('hfLonMaui').value = '{longitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hiddenCurrentLat')) document.getElementById('hiddenCurrentLat').value = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('hiddenCurrentLon')) document.getElementById('hiddenCurrentLon').value = '{longitude}';"); // Part 2: Update labels await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('lblLatMaui')) document.getElementById('lblLatMaui').innerText = '{latitude}';"); await myWebView.EvaluateJavaScriptAsync( $"if(document.getElementById('lblLonMaui')) document.getElementById('lblLonMaui').innerText = '{longitude}';"); Server-side operations are performed with the values ​​received from here. While the above problems did not occur up to iOS 18.x and Xcode 16.4, they are now occurring. What should I do? What do you suggest? NOTE-1: When my iPhone is connected to my M4 Pro PC via a Type-C Lightning cable, I saw that everything worked correctly when I ran the page under the Develop menu in Safari - I tested it. NOTE-2: The problem is, as explained in NOTE-1, that the WebView executes some JavaScript behaviors while blocking others.
Topic: Safari & Web SubTopic: General
Replies
6
Boosts
0
Views
1.3k
Activity
May ’26
Safari not intercepting Universal Link after OAuth2 (Auth0) redirect
We have an issue where Safari on iOS is not handing off to our app after an Auth0 authentication redirect. Issue After a user completes sign-in via an Auth0-hosted login page in Safari, the callback redirect is followed as a plain HTTP navigation rather than being intercepted and handed off to the app. Callback URL format https://identity.example.com/ios/com.example.app/callback Steps to reproduce Open an Auth0 /authorize URL in Safari on iOS with a redirect_uri pointing to a Universal Link callback, log in, and observe that Safari navigates to the callback URL as a plain HTTP request rather than launching the app. What works ASWebAuthenticationSession inside the app handles the same callback correctly. Navigating directly to a Universal Link launches the app, confirming AASA and Universal Links are correctly configured on the affected devices. The issue is specific to Safari intercepting the callback URL when it arrives as the result of an Auth0 redirect. Affected devices Reproducible across multiple devices and iOS versions from iOS 18.x through iOS 26.x. Does Safari have a restriction on intercepting Universal Links that result from a cross-domain redirect? Any guidance appreciated 🙏
Replies
1
Boosts
0
Views
683
Activity
May ’26
iOS Safari: Taking multiple photos via camera in overrides previous capture instead of accumulating
Summary On iOS Safari (and WKWebView-based browsers), when a web page uses <input type="file" accept="image/*" capture="environment"> (or capture="user"), the user can only ever hold one captured photo at a time. Each time the file picker is opened and the user takes a new photo using the camera, the newly captured image completely replaces the previously captured image in the input's files FileList. There is no way to accumulate multiple camera-captured photos across successive picker sessions. Steps to Reproduce Set up a web page with an <input type="file" accept="image/*" multiple> element (with or without the capture attribute). Open the page in iOS Safari on an iPhone. Tap the file input — choose Take Photo from the action sheet. Capture a photo and tap Use Photo. Verify input.files.length === 1 (first photo is captured). Tap the same file input again — choose Take Photo again. Capture a second photo and tap Use Photo. Check input.files.length. Expected Result input.files.length should be 2 (or more), containing both the first and second captured photos. The browser should accumulate photos across picker sessions when the multiple attribute is present. Actual Result input.files.length is 1 — only the most recently captured photo is present. The previously captured photo is completely gone. Every new camera capture wipes out all prior selections. Root Cause Analysis On iOS, each invocation of the system file picker (whether using the camera or photo library) creates a brand-new FileList and assigns it to the input element, discarding any previously selected files. The FileList interface is read-only per the HTML spec — web developers cannot programmatically append File objects to it. The DataTransfer API workaround (constructing a new FileList via DataTransfer.items.add()) does not work on iOS Safari — the DataTransfer constructor is not supported for programmatic file list manipulation in file inputs on iOS WebKit. This is specific to iOS. On macOS Safari and all desktop browsers, users can select multiple files in a single picker session, avoiding this issue. Impact This makes it impossible to build a web-based multi-photo capture workflow on iOS using standard HTML APIs. Common real-world use cases that are broken: Uploading multiple photos of a document one page at a time Capturing multiple product photos for a listing Progressive photo capture in inspection or form-filling apps Any PWA or web app requiring sequential camera captures Users must select all photos in a single picker session. If they tap "Cancel" or close the picker, all prior captures are permanently lost. Request Please fix WebKit on iOS so that when <input type="file" multiple> is used, re-opening the file picker either: Accumulates newly selected/captured files into the existing FileList, or Presents the system picker with previously selected files pre-checked (similar to how macOS handles re-opening file dialogs), or Exposes a web API (e.g., via the File System Access API's showOpenFilePicker() with multi-select) that developers can use to manage a cumulative file collection on iOS. Environment Devices: iPhone 13, 14, 15 Pro (physical devices) iOS versions: iOS 16.x, 17.x, 18.x — all affected Browser: Safari (Mobile) Also reproduced in: Chrome for iOS, Firefox for iOS (both use WKWebView) Not reproducible on: macOS Safari, Chrome desktop, Firefox desktop A Feedback Assistant report has been filed. Happy to provide a minimal HTML repro page on request.
Topic: Safari & Web SubTopic: General
Replies
1
Boosts
0
Views
635
Activity
May ’26
iOS crash: EXC_BAD_ACCESS in iOS 26+ when mouting/dismounting WebView
I'm experiencing a native crash on iOS 26+ with WebKit with title: EXC_BAD_ACCESS (KERN_INVALID_ADDRESS). The stack trace points to UIKit/WebKit animation and context menu handling, and the crash occurs while a WebView is presented or dismissed. Crashed: com.apple.main-thread 0 WebKit 0x7bcfac <redacted> + 12 1 WebKit 0xaf5c34 <redacted> + 84 2 UIKitCore 0x34ebdc -[_UIContextMenuAnimator performAllCompletions] + 248 3 UIKitCore 0x7f997c block_destroy_helper.72 + 1840 4 UIKitCore 0x7fb4b4 objectdestroy.36Tm + 88 5 UIKitCore 0x7ad354 objectdestroy.3Tm + 30500 6 UIKitCore 0x5c0e5c __swift_memcpy192_8 + 4352 7 UIKitCore 0x21944 block_copy_helper.374 + 40 8 UIKitCore 0x1dc174 -[_UIGroupCompletion _performAllCompletions] + 160 9 UIKitCore 0x35d0c4 -[_UIGravityWellEffectBody .cxx_destruct] + 180 10 UIKitCore 0x215018 -[UIScrollView _contentLayoutGuideIfExists] + 72 11 UIKitCore 0x943e4 NSStringFromUIEdgeInsets + 304 12 UIKitCore 0x94348 NSStringFromUIEdgeInsets + 148 13 UIKitCore 0x8f598 __UIVIEW_IS_EXECUTING_ANIMATION_COMPLETION_BLOCK__ + 36 14 UIKitCore 0x1995d8c -[UIViewAnimationBlockDelegate _sendDeferredCompletion:] + 92 15 libdispatch.dylib 0x1adc _dispatch_call_block_and_release + 32 16 libdispatch.dylib 0x1b7fc _dispatch_client_callout + 16 17 libdispatch.dylib 0x38b10 _dispatch_main_queue_drain.cold.5 + 812 18 libdispatch.dylib 0x10ec8 _dispatch_main_queue_drain + 180 19 libdispatch.dylib 0x10e04 _dispatch_main_queue_callback_4CF + 44 20 CoreFoundation 0x6a2b4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 21 CoreFoundation 0x1db3c __CFRunLoopRun + 1944 22 CoreFoundation 0x1ca6c _CFRunLoopRunSpecificWithOptions + 532 23 GraphicsServices 0x1498 GSEventRunModal + 120 24 UIKitCore 0x9ddf8 -[UIApplication _run] + 792 25 UIKitCore 0x46e54 UIApplicationMain + 336 26 - 0xedf88 main + 24 (AppDelegate.swift:24) 27 ??? 0x196686e28 (Missing)
Replies
1
Boosts
0
Views
829
Activity
May ’26
Apple cookie error
Hi everyone, We are currently experiencing a strange issue with our PWA on iOS and I wanted to ask if anyone has seen something similar before. Setup Around 1,200 active users ASP.NET backend/server PWA hosted on a subdomain: user.PLACEHOLDER.de The app has two main areas: User area: /User Admin area: /Customers Most users install the PWA normally through Safari using “Add to Home Screen”. The Problem The issue only happens on iOS when the app is installed as a real PWA. Steps to reproduce: Admin opens the installed PWA Admin navigates to the admin section (/Customers) Admin closes the PWA while still being inside /Customers When the admin reopens the app, the entire app is broken and nothing works anymore However: If the admin navigates back to the normal user area (/User) BEFORE closing the app, everything works fine The issue only happens if the app is closed while inside /Customers At this point, the only fix is: uninstall the PWA reinstall it login again The Weird Part If the user only adds the website icon to the home screen WITHOUT installing it as a standalone PWA, everything works perfectly. So the issue seems to happen specifically in iOS standalone PWA mode. Additional Notes Only happens on Apple/iOS devices After latest IOS-Update Android works perfectly Has anyone experienced something similar or knows what could cause this behavior? The cookie settings in ASP.NET: options.Cookie.Domain = ".PLACEHOLDER.de"; options.Cookie.IsEssential = true; options.Cookie.HttpOnly = true; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.Path = "/"; options.Cookie.Name = ".AspNet.SharedCookie"; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; EDIT: I currently suspect that the issue is related to cookies/session handling, but I’m not sure. Unfortunately we cannot properly debug iOS because we only have Windows devices available. The mainfest.json: { "manifest_version": 3, "name": "Name", "short_name": "Name", "description": "Buchen von Kursen", "icons": [ { "src": "/images/192x192.png", "sizes": "192x192" }, { "src": "/images/512x512.png", "sizes": "512x512" } ], "display": "standalone", "start_url": "https://user.PLACEHOLDER.de/User", "scope":"/", "content_scripts": [ { "js": [ "service-worker.js" ] } ] }
Topic: Safari & Web SubTopic: General
Replies
1
Boosts
0
Views
1.5k
Activity
May ’26
Browser upload from camera roll
When using a web page to upload from the camera roll. During selection everything is ok but after confirming the selection, its still possible to change the selection and if media is in a processing or downloading state its not obvious to a user what is going on. This results to a confusing user experience. It doesn't seem like theres any signal back to the page in this state, its just a poor camera roll picker which doesn't block selection changes or show any progress that something is happening (i.e. localising or processing for upload). Same result on Chrome and Safari
Topic: Safari & Web SubTopic: General
Replies
1
Boosts
0
Views
603
Activity
May ’26
Resources not loading over HTTP/3 on iOS 26.3/4
Since 28 April, we have seen some bizarre behaviour where iOS 26.3 and 26.4 are intermittently not loading some CSS and JS resources from our CDN. This is only reproducible when our CDN has HTTP/3 enabled. When reproduced in the Simulator, Safari's HAR shows that it is not even attempting to request those resources; it does not appear to be a network issue. Oddly enough switching to a different CDN with HTTP/3 enabled appears to resolve the issue. As far as I can tell, this hasn't been reported on the Webkit tracker; we'd be happy to provide Apple with additional data in a formal bug report but it would be helpful to know what data would be useful to provide.
Replies
1
Boosts
1
Views
868
Activity
May ’26
[iOS 26.x] WKWebView crashes with NSInternalInconsistencyException — KVO inconsistency on configuration.enforcesChildRestrictions from STScreenTimeConfigurationObserver
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:key:usingBlock:] 6 Foundation NSSetObjectValueAndNotify 7 CoreFoundation invoking 8 Foundation -[NSInvocation invoke] 9 Foundation 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 configuration apparently 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 STScreenTimeConfigurationObserver expected to observe WKWebView.configuration.enforcesChildRestrictions under 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.
Replies
1
Boosts
1
Views
1.2k
Activity
May ’26