We have a SAML-based SSO App Extension that uses WKWebView to load the SAML login request. This implementation has been working correctly on iOS versions prior to 26. However, starting with iOS 26, the extension consistently crashes when calling WKWebView.load(_:).
The crash occurs inside WebKit, specifically in:
/Library/Caches/com.apple.xbs/Sources/WebKit/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
at
WebKit::WebPageProxy::loadRequest(...)
No app-level exception is thrown, and the extension terminates with:
Thread 10: EXC_BREAKPOINT (code=1, subcode=0x1a31dbe00)
It appears that WKWebView initialization or WebsiteDataStore creation is now restricted in extension contexts on iOS 26, but this change is not documented in the SDK release notes. Could you please confirm if this is an intentional sandbox restriction in iOS 26 or a regression in WebKit?
Steps to reproduce:
Implement an App Extension using ASAuthorizationProviderExtensionAuthorizationRequest.
Create a WKWebView instance in the extension.
Attempt to load a SAML login request (POST request with headers).
Observe immediate crash on iOS 26 (works fine on earlier versions).
Expected behavior:
WKWebView should load the request or fail gracefully as in prior releases, without crashing the extension process.
Request:
Please clarify if WKWebView usage inside extensions is officially unsupported as of iOS 26, and if so, recommend an alternative approach for handling SSO flows.
Explore the integration of web technologies within your app. Discuss building web-based apps, leveraging Safari functionalities, and integrating with web services.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I have a visionOS app using Apple's WebView and WebPage to display web content. When viewing a live YouTube stream last night, YouTube put up the warning in the area that would have the chat window:
Oh no!
It looks like you're using an older version of your browser. Please update it to use live chat.
Anyone know if YouTube is generating this from the server based on the WebPage's user agent string, from Javascript running in the browser engine, or something else?
Anyone know if and how it is possible to resolve this?
(See right side of YouTube web page from a screen grab):
Our current iOS application utilizes WKWebView to display a web application. We've observed intermittent deletion of non-expired 1st-party persistent cookies within this web application, leading to session drops.
Here are our environment details and specific questions:
Environment:
App Build: Built with Xcode 16.2.
WebView Class: WKWebView.
Cookie Type: 1st-Party Persistent Cookie (Explicit expiration set, not a session cookie).
Domain Configuration: The content server and the cookie-issuing server are the same (same IP address, same eTLD+1). The Cookie is set via the Set-Cookie HTTP Header on the server side.
Questions:
Automatic Deletion Policy: Are there any scenarios (e.g., related to iOS system behavior, Safari policies, or Intelligent Tracking Prevention (ITP)) where iOS or Safari might automatically delete non-expired 1st-party persistent cookies used by WKWebView?
Deletion Conditions: If the answer to Q1 is Yes, under what specific conditions (e.g., memory pressure, inactivity, storage limits, specific ITP criteria) does this cookie deletion occur, and does the behavior differ significantly across various iOS versions?
OS Update Impact: Are there any known specifications or documented cases where an iOS version update itself triggers the mass deletion of existing cookies stored in the WKWebsiteDataStore?
Mitigation Strategy: If this automatic deletion is a known behavior, what mitigation strategies are officially recommended to ensure the persistence of essential 1st-party authentication cookies (e.g., manual synchronization with WKHTTPCookieStore or Keychain/UserDefaults)?
Official Documentation: If the answer to Q1 is Yes, please provide URLs to any official Apple documentation or technical notes that detail the specifications or behavior of 1st-party persistent cookie deletion within WKWebView.
Topic:
Safari & Web
SubTopic:
General
Hi there,
I have a popular open source app called Foqos. What I'm finding in iOS 26 (might even effect older versions) is that when using the webcontent api within Managed settings as the following:
store.webContent.blockedByFilter = .specific(domains)
It doesn't work on Safari, but does work on third party applications like chrome, firefox, etc.
But when using the all and exception enum like the following
store.webContent.blockedByFilter = .all(except: domains)
This does work on Safari
This is pretty inconsistent behavior of the API and should be fixed to match the documentation. Documentation does not mention anything about Safari limitations
Again source code is open: https://github.com/awaseem/foqos
You can run the app yourself and find the same issues. Is anyone else experiencing this?
I’m developing a Safari App Extension and I want to debug the background.js script.
However, I can’t find any tool or option to do this.
When I run the extension from Xcode using the ProjectName Extension (macOS) scheme, I expect to see a “ProjectName” item under the Develop → Web Extension Background Content menu.
But there’s nothing there.
Has anyone encountered the same issue? How did you fix it?
Environment:
Manifest Version: V3
Safari: 26.0.1 (21622.1.22.11.15)
Xcode: 26.0.1 (17A400)
I am developing an SSO Extension so that I can have SSO with Keycloak across applications.
OIDC/OAuth2 works very well.
But I am struggling with SAML. It works, but it seems that the form submission is always triggered twice.
I use decisionHandler(.cancel) to stop the form submission and redirect it to the browser. I still get the form submitted both by the extension and by the browser.
At some point I tried to allow the form submission in the Extension so that I get the redirect with the response to the browser. It still triggered another submission.
Does anyone experience this issue?
Dear Apple Developer Support,
I’m developing a Chromium-based iOS browser and want to open the Safari settings page (Settings → Apps→ Safari) like Chrome’s “Import data from Safari” feature, where clicking “Go to settings” opens the Safari settings page.
To reproduce this behavior in Chrome:
1.In Chrome, search “Import password from Safari.”
2.Restart Chrome.
3.Go to Chrome → Settings → Safari import → Import to Chrome → Go to settings.
4.You will see it opens Settings → Apps → Safari.
Please see the attached file for steps to trigger this feature in Chrome.
My attempt with App-Prefs:root=SAFARI only opens the Settings main page ,Is there a public API to open the Safari settings page directly?
Look forward to your reply,many thanks
I have a website I’m working on that uses WordPress and element mentor pro. Basically everything is custom HTML in individual containers and custom CSS for each page.
The problem that I’m running into is there needs to be a pop-up and the easiest way to do that is just use the element or proper pop-ups however, the overlay is not extending into the safe areas on the bottom or top notch. I’ve been trying to figure out a way to fix this, and I cannot get it to work. I’ve tried having CSS in every imaginable way to get it to extend the overlay..
The other issue is for this website there is no header. It’s just a container that’s the hero content and for some reason that also will not extend into the top-notch safe area. It extends to the bottom notch just fine but not the top notch and there’s just a white bar there where I prefer it be the background gradient that I have set up for the hero however, nothing I do will get it to push into that top notch safe area either.
Hoping someone else had this issue and can help me out
Topic:
Safari & Web
SubTopic:
General
Hi, it seems that with iOS26 the system displays two entries in the screentime report for apps that use a WKWebView: one for the app itself and one for the website that was displayed in the app. We don't see this behaviour in iOS18.7.
I'm reseaching how to disable the recording for the webviews in one of our apps (written in Swift with UIKit).
The STWebpageController looked promising, especially the field suppressUsageRecording, but the whole class is poorly documented.
We initialized it with the bundle identifier of the app and set the url of the wkwebview as the url in STWebpageController. It looks a bit like this:
webView = WKWebView(frame: .zero, configuration: config)
view.addSubview(webView)
//setup STWebpageController
webpageController = STWebpageController()
do {
try webpageController!.setBundleIdentifier(bundleIdentifier)
} catch{
}
webpageController!.suppressUsageRecording = true
addChild(webpageController!)
view.addSubview(webpageController!.view)
webpageController!.view.frame = view.frame
webpageController!.didMove(toParent: self)
//load url in webView
let request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalCacheData)
webview.load(request)
webpageController?.url = request.url
This has no effect on the recorded screentime for the webview inside our app - we still see the same time for the container app and the included webview.
Any suggestions?
Thanks,
Heiko
I understand that you want echoCancellation and noiseSuppression in most cases, but I would like to be able to turn off all the filter processes for this particular use case.
When I set echoCancellation: false in navigator.mediaDevices.getUserMedia, Safari 26 on MacOS produces stereo recording even if I set channelCount: 1.
When I set echoCancellation: true, it produces mono recording as expected.
How can I get mono recording with echoCancellation: false and channelCount: 1?
Thanks!
Topic:
Safari & Web
SubTopic:
General
Hi Apple Team,
We’ve noticed a couple of issues with launching default App Clip in safari and would appreciate your guidance.
App Clip Popup Timing:
When launching the App Clip using default URL, we sometimes see the small App Clip popup appear before the App Clip banner is displayed. Ideally, the banner should appear first.
Cached URL Handling:
In certain cases, the App Clip appears to be using a cached URL instead of the most recent one. For example, when we invoke two different App Clip URLs with unique parameters, the App Clip sometimes launches using the previous URL’s data instead of the new one.
This behavior is inconsistent and makes it difficult to ensure users are directed to the correct experience each time. Could you please help us understand whether this is expected behavior or if there are any known issues or recommended solutions?
Thank you for your time and support.
Example
Since Xcode 26 our tests are crashing due to the Main Thread not being able to deallocate WKNavigationResponse.
Following an example:
import Foundation
import WebKit
final class WKNavigationResponeMock: WKNavigationResponse {
private let urlResponse: URLResponse
override var response: URLResponse { urlResponse }
init(urlResponse: URLResponse) {
self.urlResponse = urlResponse
super.init()
}
convenience init(httpUrlResponse: HTTPURLResponse) {
self.init(urlResponse: httpUrlResponse)
}
convenience init?(url: URL, statusCode: Int) {
guard let httpURLResponse = HTTPURLResponse(url: url, statusCode: statusCode, httpVersion: nil, headerFields: nil) else {
return nil
}
self.init(httpUrlResponse: httpURLResponse)
}
}
import WebKit
import XCTest
final class ExampleTests: XCTestCase {
@MainActor func testAllocAndDeallocWKNavigationResponse() {
let expectedURL = URL(string: "https://galaxus.ch/")!
let expectedStatusCode = 404
let instance = WKNavigationResponeMock()
// here it should dealloc/deinit `instance` automatically
}
Here the call stack:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 CoreFoundation 0x101f3dd54 CFRetain.cold.1 + 16
1 CoreFoundation 0x101e14860 CFRetain + 104
2 WebKit 0x10864dd24 -[WKNavigationResponse dealloc] + 52
Hello,
Recently, there is an issue in my service that after typing korean at input element, first click event is not working.
But i knew that other services are also having same problem.
It happens only on Safari.
Could you guys check this issue?
Thank you.
iPadOS 26, dark mode
Open Safari
Search for anything or open a website that has white background
Kill Safari
Open Safari again
I still can reproduce it with Safari on iPadOS 26.0.1
This issue also happens to my app when opening a HTML/JS on WKWebView with white background while using dark mode. I did send a feedback ticket when using iPadOS 26 beta but havent seen any reply. This is my first time sending a feedback so I dont know if Apple would reply or not.
Up until some point relatively recently, I have been able to use Safari's web inspector to connect to the iOS simulator in order to debug our web application in development at http://localhost:8088.
Now, the web inspector still OPENS, but it opens in a broken state. The context is available to select from Safari's "Develop" menu: Develop > "iPhone 16 Pro (Simulator)" > "localhost - login". It appears under the Safari heading if I have navigated to the web app in the browser, or under the Expo heading if I am accessing it through the webview in our React Native wrapper app. When I select it, the web inspector window does appear.
However, once it opens, the Elements pane is empty, the Console pane is empty, expressions entered into the console are not evaluated, there's no content in Sources, Network, Storage, etc.
Important notes:
This broken state happens at http://localhost:8088 as well as http://127.0.0.1:8088, and it seems that the insecure context is the issue.
The web inspector DOES work for HTTPS sites. If I navigate to, e.g., https://example.com in the simulator and connect the web inspector, everything works fine.
The web inspector also works fine in Safari on macOS (OUTSIDE the simulator) when accessing non-HTTPS sites. It's only a problem for non-HTTPS sites when connecting to the simulator.
A coworker has the same problem, so it is not isolated to my machine.
I would enable TLS locally as a workaround, but this web app is very complex, and I know from experience that it is very difficult for various reasons to set it up properly for our project in development, and it will take significant non-trivial work to do so.
So... Why is this happening? Is this expected behavior? Is there a way that I can debug my site on localhost without HTTPS?
Enabling Private Relay seems to block XHR in Safari from reaching a local HTTPS server hosted by an iOS app, though it works in other browsers.
Before (working):
JS → https://local.example.com → 127.0.0.1 → OK
After (blocked / no DNS reply probably):
JS → https://local.example.com → ERR
Is there any way to restore local domain access or mitigate this issue?
After updating to the new iOS, in Safari, my overlays and backdrops using 100dvh no longer cover the full screen there's now a gap at the bottom.
Switching to 100vh fixes it, but that causes scrolling issues on older Safari versions since 100vh includes extra height.
Has anyone else experienced this? What's the recommended fix that works across iOS versions?
Subject:
iOS 26 WKWebView: Remote Pages Become Unresponsive After Loading Local HTML Files
Description
We're experiencing a critical issue with WKWebView in a React Native 0.64.3 application where remote web pages become completely unresponsive after loading local HTML files in iOS 26. It works well before iOS26.
Environment:
React Native 0.64.3
iOS 26.0
Xcode 26.0.1
Using custom WKWebView implementations in Native modules
Problem Details
App loads local HTML files using loadFileURL:allowingReadAccessToURL:
Later, when loading remote pages via loadRequest:, the remote pages load successfully but become unresponsive to user interactions
This occurs even when using different WKWebView instances
The issue is reproducible 100% of the time once a local file has been loaded
Restarting the app and loading remote pages directly works fine
Code Example:
// Loading local file (works fine)
[self.webView loadFileURL:localFileURL allowingReadAccessToURL:accessURL];
// Later, loading remote page (loads but becomes unresponsive)
NSURLRequest *request = [NSURLRequest requestWithURL:remoteURL];
[self.webView loadRequest:request];
What We've Tried:
Using different WKWebView instances for local vs remote content
Comprehensive cleanup in dealloc (removing all user scripts and message handlers)
Loading blank HTML before switching to remote content
Using shared WKProcessPool (understanding its limitations in iOS 15+)
Ensuring proper decisionHandler management in navigation delegates
Resetting WKWebView configuration settings
Clearing cookies and cache between loads
Using loadFileRequest:allowingReadAccessToURL: instead of loadFileURL:
Key Observations:
The remote page renders correctly and network requests complete
No JavaScript errors in console
The view hierarchy appears normal in Debug View Hierarchy
Touch events seem to be delivered but not processed by the web content
Questions:
Has Apple introduced new security restrictions in iOS 26 that affect the transition from file:// URLs to http:// URLs?
Are there specific WKWebView configuration changes required for React Native applications in iOS 26?
Could this be related to the React Native bridge or JavaScript context persistence?
Any insights or workarounds would be greatly appreciated, as this is blocking our iOS 26 compatibility.
Hi,
we have PWA for which we´ve built a wrapper using PWA Builder tool and we are experiencing an issue with apple sign in.
When we try to redirect the user to "https://appleid.apple.com/auth/authorize?...params...", a bottom sheet login prompt appears and only once the user signs in using the prompt he is then redirected to the url where he needs to sign in again and then we get the callback. We want to get rid of that bottom sheet prompt.
The code we´ve tried:
` iosButton.addEventListener('click', function () {
window.location.href = "https://appleid.apple.com/auth/authorize?client_id=xxxxx&redirect_uri=xxxxx&response_type=code%20id_token&scope=name%20email&response_mode=form_post";
});`
The alternative code we´ve tried for which it seems that nothing happens, we only see the "Started" alert, we´ve confirmed that there is no other error :
` <script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
<script>
(function initAppleSignIn() {
try {
window.AppleID.auth.init({
clientId: "{{ env('APPLE_WEB_CLIENT_ID') }}",
scope: "name email",
redirectURI: window.location.origin +"/auth/apple/callback",
usePopup: true
});
} catch (e) {
console.warn('Apple Sign-In init skipped:', e);
}
})();
function appleButtonClicked() {
alert("Started");
try {
const res = await window.AppleID.auth.signIn();
} catch (err) {
alert("Got error");
}
alert("Got here");
}
</script>
The icon (new file downloaded) inside the search bar on Safari does not display after downloading a file.
To update the search bar and display the icon you have to open the search bar and then close it again to see that a new file was downloaded.
Topic:
Safari & Web
SubTopic:
General