I'm currently experimenting to add 3d stereo images in HEIC format to my daily Mars Rover Images website https://areo.info/mars20 which can be opened on a Vision Pro. Only a few images are yet converted into that mode, those on the sol 1411 page.
As I'm currently only working in the Vision Pro Simulator from Xcode, no real 3d effect if of course visible and I'm curious if anyone using the real hardware can confirm that the images are working.
Especially the eye distance correction is important to know about as the Mars Rover camera has a much wider pupil distance than humans and while I entered that distance in the conversion tool, I'm not sure if it worked well. So feedback is welcome!
For those who like to try to create stereo images themselves: I used https://developer.apple.com/documentation/ImageIO/writing-spatial-photos to create a HEIC file from two JPEGs.
General
RSS for tagExplore 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
Hi, now we could try WebGPU by manually enabling it in feature flags in no matter Safari or Safari technology preview on macOS.
But, do we know when this WebGPU feature would be enabled by default or any plan to enable it by default in Safari?
Thanks!
Topic:
Safari & Web
SubTopic:
General
iOS18的app中加载了自己开发的H5页面,H5页面有个input输入框,每次输入框聚焦的时候,都会弹出键盘滑行键入的提示:“滑动手指将字母拼成词以快速键入”,应该怎么修改,达到不每次都弹出这个提示呢
I have a very specific issue that happens only on iOS Simulator version 18.4.
It does NOT happen when I run my app on a real iOS 18.4 device through Testflight.
My app displays a WebView (courtesy of Capacitor, url scheme capacitor://).
Inside that Webview I'm using Firebase JS API (11.2.0) and calling signInWithEmailAndPassword, which works well in all other contexts, i.e. browser, Android webview, iOS webview in all other Simulator versions, and on real devices.
Only when running in Simulator 18.4, I get a failed network request:
cannot parse response
Fetch API cannot load https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?... due to access control checks.
Failed to load resource: cannot parse reponse
error: FirebaseError: (auth/network-request-failed)
Everything is working correctly for both:
Capacitor app webview installed on a real 18.4 device with Testflight
Safari (non-webview) in the 18.4 Simulator
The issue is severe for us, because we are unable to develop our app and test it in the simulator on 18.4 Simulator before pushing it through Testflight internal release.
Request headers on the failed request (no response status or headers available).
Request
Accept: /
Content-Type: application/json
Origin: capacitor://localhost
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_4 like Mac OS X) - AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
X-Client-Version: Mobile/JsCore/11.2.0/FirebaseCore-web
X-Firebase-Client: (...)
I want to write an app, that lets users restore all oben windows and tabs from any given point in a TimeMachine backup. The store location seems to have changed. In earlier versions it was possible to restore the open windows and tabs by retrieving
/Users/[UserName]/Library/Containers/com.apple.Safari/Data/Library/Safari/SafariTabs.db
…/SafariTabs.db-shm
…/SafariTabs.db-wal
As of 18.3 this doesn’t work any more, even though these files get updated with the use of Safari
What else would I need to retrieve from a back up disk?
Thank you very much for any hints!
My app has been published by 2 months now I still I cant get Universal Links to work.
I checked a lot of docs as well as videos about setting up universal links. Everyone with clear steps:
Add the well-known json file to the server. Already validated by AASA web validator.
Add the Associated domain on project capabilities, with the Web page root only. Eg: applinks:example:com.
Install the app and trying clicking a link from notepad. Or instead make a long press to deploy contextual menu to see if my app is on the selectable options to open the link.
My app is not been open in any of my attempts and the console always trying to use safari.
I had a couple of screenshots of my testing. I really need help with this.
Hi,
I’m working with the SFExtensionProfileKey in my Safari Web Extension. As I understand it, this key is to get the UUID of the profile currently in use. However, it seems to be missing (no key in userInfo) when the default profile is active. Also, I haven’t found any API to get a profile’s human-readable name or list all available profiles.
Could someone clarify:
If the value of SFExtensionProfileKey is absent, can I safely assume the default profile is in use?
Is there a supported way to get a profile’s display name?
Does Safari expose an API for getting all profiles?
Thanks in advance for your insights!
Hi,
I’m trying to detect whether my Safari Web Extension is running in Safari or Safari Technology Preview. Is there a reliable way to do that?
I can get the executable path of the parent process using proc_pidpath(). However, unlike Chrome or Firefox, Safari extensions run under /sbin/launchd as the parent process, not the responsible process (browser’s binary). In this scenario, I need the executable path of the actual browser process, but I haven’t found a way to get it.
Also, Safari doesn’t implement the Web Extension API’s browser.runtime.getBrowserInfo(), unlike Firefox.
I haven’t tested it yet, but I’m considering checking the user agent string, though I’m not sure how reliable that would be.
Use Case
Some users use my Safari extension as a web development tool and want to enable some features exclusively in Safari Technology Preview, while using other features only in standard Safari. If I could detect which browser is in use, I could provide the appropriate functionality for them.
Hi everyone,
I'm exploring the new app icon appearance options (Clear, Dark, Tinted) for Progressive Web Apps (PWAs) on iOS26, iPadOS26, and macOS26. Currently, PWA icons don't seem to render well with these new appearances, particularly in Clear and Tinted modes, resulting in very very poor visual quality. You can hardly see anything.
Has support for these icon appearances been fully implemented for PWAs? If so, could someone point me to the relevant Apple Developer documentation or provide guidance on how to configure PWA icons to support Clear, Dark, and Tinted appearances? I've searched the Apple Developer Forums, Stack Overflow, and Reddit but haven't found clear information on this topic.A possible solution is a png file with transparent areas, but if the pattern is dark, nothing will be visible in dark mode.
Any insights or resources would be greatly appreciated. Thanks!
(plz don't give up on PWA😭)
Reference:
https://developer.apple.com/forums/thread/761615
https://stackoverflow.com/questions/78780916/is-there-a-way-to-provide-light-dark-and-tinted-variants-of-apple-touch-icon
https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html
In my application, I use HTML pages to display the interface. Since it’s a cross-platform app, the pages and interactions work properly on other platforms. However, in WebKit, because HTTPS protocol is used, JS requests from the page cannot use the ws protocol but must use the wss protocol under HTTPS. Is there any way to allow a webpage under HTTPS to use ws requests normally? Google Chrome can do this.
Topic:
Safari & Web
SubTopic:
General
iOS 26 (from beta 1 to beta 2)
We have a VPN app that installs a per-app VPN profile with SafariDomains to filter Safari network traffic. This setup works as expected on iOS versions lower than 26.0.
See here more details on SafariDomains: https://developer.apple.com/business/documentation/Configuration-Profile-Reference.pdf
On iOS 26, all SafariDomains configured to go through the per-app VPN result in the following error: "Safari can’t open the page. The error was: Unknown Error"
Additional Details: Only SafariDomains encounter this error. Other managed apps traffic through the per-app VPN works correctly.
Steps to Reproduce:
Install the VPN app with a per-app VPN profile.
Configure SafariDomains with any URL (e.g., example.com).
Open Safari and navigate to the configured URL.
Example Configuration:
We tested with a simple example by adding only one URL to SafariDomains (example.com). Logs from the console were captured at the moment Safari opened and encountered the error.
safari_google2.txt
Has anyone else encountered this issue on iOS 26? Any insights or solutions would be greatly appreciated.
Thank you!
When our Safari Web Extension makes a api request from its background script (registered via "scripts" in manifest.json, e.g., "background": { "scripts": ["js/background.bundle.js"] }) to our authenticated API endpoint (https://api-domain/user), the Cookie header is not included in the request. This occurs only when the extension is running within a non-default Safari User Profile. This causes our API to treat the user as unauthenticated. The exact same extension code, manifest, and API call work correctly (Cookie header is present and user is authenticated) when the extension is running in the Default Safari User Profile.
Description
When creating an Apple ID via the web form, if the user’s chosen password contains their own name, the server correctly returns an error (e.g., "Password cannot contain your name") in the PUT request's JSON response. However, this error is not shown on the frontend, leaving users unaware of why the form silently fails or stalls.
Steps to Reproduce
Go to the Apple ID account creation page (https://appleid.apple.com/account).
Enter valid account details where the password includes the user's first or last name (e.g., Johnacb2331!l for a user named John Doe).
Complete all fields, including phone number verification and captcha.
Submit the form and monitor the Network tab in your browser’s DevTools.
Observe that the form appears to hang, loop, or silently fail.
Open the PUT request to /account — the response JSON will contain the relevant validation error (e.g., “Password cannot contain your name”), but the user is not shown this.
Expected Behavior
The password validation error (e.g., containing the user’s name) should be immediately displayed in the UI next to the password field to inform the user and allow for correction.
Actual Behavior
No error is shown in the UI. The form appears to fail silently, leaving the user confused. The actual reason for failure is only visible through browser developer tools in the PUT response payload.
Impact
This can lead to:
User frustration and confusion
Increased support overhead
Poor UX in a critical flow (account creation)
Environment
Browser: chrome 136.0.7103.114
Platform: Web (https://appleid.apple.com)
Date observed: 31/5/25
Suggested Fix
Ensure that password validation messages from backend responses surface in the frontend, especially for common user input issues like including names in passwords.
No screenshots as I can not create a new account
Topic:
Safari & Web
SubTopic:
General
I have a business scenario where I want to guide users to Safari and open a Safari extension. How can I open Safari from my app and navigate to a specific webpage?
Topic:
Safari & Web
SubTopic:
General
Hi! My team and I are developing an education platform. One of our features is a auto-play flashcard feature where users can listen to their flashcards hands free.
We are having an issue where the autoplay wont work for users with iPhone's. I think the rule is that user's are supposed to give consent to the auto-play. We do make the user hit play before it starts so that should be the "constent" but it's still not working. Anyone have ideas?
Topic:
Safari & Web
SubTopic:
General
We have an app store app that hosts an internal webserver we use as a proxy and it works for a period until iOS 18.3.x decides our cert is no longer valid at which point our customer have reinstall the app. This has only become a problem on iOS18.3. We publish the self-signed with out app, and it is valid and accepted until it's not. We know the cert is valid and our implementation of the local proxy has not changed. If we install a cert on the device and trust it, then the app will start behaving normally again without reinstall. We have replicated this locally and the error we are seeing is:
Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x301111e40>, networkTaskDescription=LocalDataTask <541390E2-65FA-47AB-80B1-10209D6C761A>.<3>, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=(
"<cert(0x108e3b700) s: 127.0.0.1 i: 127.0.0.1>",
"<cert(0x108e3b980) s: 127.0.0.1 i: 127.0.0.1>"
), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=https://localhost:8082/Blablal/?device=ios&sftouch=1&pgport=8081&secure=1, NSErrorFailingURLStringKey=https://localhost:8082/blahblah/?device=ios&sftouch=1&pgport=8081&secure=1, NSUnderlyingError=0x301e1d680 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802}}, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <541390E2-65FA-47AB-80B1-10209D6C761A>.<3>"
), _kCFStreamErrorCodeKey=-9802, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <541390E2-65FA-47AB-80B1-10209D6C761A>.<3>, networkTaskMetricsPrivacyStance=NotEligible, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x302670a50>, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made.}
Hello there,
back in the old WebKit API there was the WKDownloadDelegate to handle download actions in WebViews. I was wondering how to handle download actions within the new WebKit in SwiftUI. Is there anything to use already or are there workarounds to handle downloads?
Greetings,
Thorben
So I have web Augmented Reality apps hosted on AWS S3. It worked fine for a month, but as soon as the IOS 18.4 update was installed they stopped working. It works on every other device and IOS versions.
The URLs for the mentioned AR experiences:
digitechonline.in/solsprefimaginewt8/
digitechonline.in/solsprefimaginewt8p2/
digitechonline.in/orocarear/
These AR experiences get stuck on the loading screen and either reload or give an error. Ideally the camera is supposed to open.
I have tested it on Safari, Microsoft Edge and Google Chrome browsers.
They were created through Unity webgl and hosted on AWS S3 bucket. Please provide a quick solution to this.
MacOS: 12 ( Monterrey )
Safari: 17.6
Demo Site: https://applepaydemo.apple.com/
At the bottom where the Apple Pay button should appear, I see a warning something like "This browser doesn't support Apple Pay, please use safari" along with a link to requirements for apple pay.
All the requirements are fulfilled, OS and Safari's version are above the minimum required.
Link was opened in Safari.
And the other thing is if I open the same site in Chrome, I can see the apple pay button and when I click on it a QR appears which is the expected behaviour.
How to resolve this?
Push Notification Issue in iOS PWA App
We’ve been trying to implement push notifications in our iOS app, which is a wrapper around a Vite PWA built using PWA Builder. Here's a detailed overview of the issues we’re facing:
Problem Summary
We originally had a working Vite PWA and used Firebase Cloud Messaging (FCM) for push notifications. When converting this PWA to an iOS app using PWA Builder:
The notification permission prompt did not behave as expected in Safari.
Even after requesting permission via a user gesture (e.g., button press), FCM token was not received.
On Safari (both Mac and Windows), permission sometimes works, but the token isn’t saved until Safari is closed and reopened.
In the iOS PWA app, the FCM token never gets retrieved.
We tried the same process on Chrome, and everything works flawlessly there.
What We’ve Tried
Wrapped the permission request and FCM token logic in a user gesture (e.g., button click), as recommended.
Confirmed our manifest includes all necessary fields (see below).
Tested across macOS, Windows, Safari (desktop), and the iOS app.
Manifest.json
{
"name": "Periscopio",
"short_name": "Periscopio",
"start_url": "/",
"display": "standalone",
"background_color": "#f2f2f2",
"lang": "en",
"scope": "/",
"description": "Facilitates the collection of primary data for market research purposes.",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/maskable_icon_x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/maskable_icon_x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"edge_side_panel": {
"preferred_width": 400
},
"display_override": [
"window-controls-overlay",
"standalone"
],
"theme_color": "#08244c",
"orientation": "portrait"
}
Core Logic (Plain TypeScript)
1. Request Notification Permission + FCM Token
async function handleRequestPermission(): Promise<string | null> {
try {
console.log("Requesting notification permission...");
const permission = await Notification.requestPermission();
console.log("Notification permission result:", permission);
if (permission === "denied") {
console.error("Notification permission was denied.");
return null;
}
const token = await requestFCMToken();
console.log("FCM Token:", token);
if (token) {
console.log("Notification setup successful.");
return token;
} else {
console.error("Failed to retrieve FCM token.");
return null;
}
} catch (error) {
console.error("Error requesting FCM token:", error);
return null;
}
}
2. FCM Token Logic
async function requestFCMToken(): Promise<string | undefined> {
try {
let permission = Notification.permission;
if (permission === "default") {
console.log("Requesting notification permission...");
permission = await Notification.requestPermission();
}
if (permission === "granted") {
console.log("Notification permission granted.");
const isSupportedBrowser = await isSupported();
if (!isSupportedBrowser) {
console.error("This browser does not support FCM.");
return;
}
const registration = await navigator.serviceWorker.register("/firebase-messaging-sw.js");
console.log("Service Worker registered:", registration);
const token = await getToken(cloudMessaging, {
vapidKey: "YOUR_PUBLIC_VAPID_KEY_HERE",
serviceWorkerRegistration: registration,
});
if (token) {
console.log("FCM Token:", token);
localStorage.setItem("fcmToken", token);
return token;
} else {
console.warn("No registration token available. Request permission to generate one.");
return;
}
} else if (permission === "denied") {
console.warn("Permission to notify was denied.");
return;
} else {
console.warn("Notification permission not granted.");
return;
}
} catch (error) {
console.error("Error getting FCM token:", error);
return;
}
}
Request for Help
We’d really appreciate support from anyone who’s successfully implemented FCM push notifications in a Vite PWA wrapped as an iOS app using PWA Builder.
Is there something we’re missing about how iOS Safari handles push permissions in PWA mode?
Could there be an issue with the service worker or the manifest setup that causes the token not to register?
Any Safari-specific quirks to be aware of?
Thanks in advance!
Topic:
Safari & Web
SubTopic:
General