Hi, I am developing a drawing app using SafariView and is using apple pencil double tap handler for crucial features.
In IOS 17.5 I lost functionality of it when interacting with SafariView, my friend confirmed that it worked with IOS 17.4 and I can confirm it also worked with IOS 17.1. However, I cannot downgrade my system nor can my uses. THIS IS A FATAL MALFUNCTION FOR MY APP.
Detailedly, as I tested, the double tap handlers cannot be activated when my last tapped component is SafariView, so it never works when interacting with my web app. But I can enable this by clicking outside the SafariView or some non-SafariView component on top of it, just anything other than the Safari view, even webkit view can work but it is not usable for me. My aim is to keep listening to double tapping while interacting with SafariView in full screen, so I cannot let the user tap elsewhere to just activate double tap, there is no other walk around for me, unless there is a way to enable 120fps animation in WebKit view, which is only available in safari feature flags as I know.
I would like to hear a solution in this situation or a promise of a fix, this is devastating to my users' experience.
code to reproduce:
import SwiftUI
import WebKit
import SafariServices
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
return SFSafariViewController(url: url)
}
func updateUIViewController(_ uiViewController: SFSafariViewController, context: Context) {
// No update code needed for this example
}
}
struct WKWebViewWrapper: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
let request = URLRequest(url: url)
webView.load(request)
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
// No update code needed for this example
}
}
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
.onPencilDoubleTap { value in
print("tap1")
}
Text("Hello, world!")
.padding()
SafariView(url: URL(string: "https://www.example.com")!)
.onPencilDoubleTap { value in print("tap2")}
.frame(width:300)
WKWebViewWrapper(url: URL(string: "https://www.example.com")!).onPencilDoubleTap { value in
print("tap3")
}
.frame(width:300)
}
}
}
#Preview {
ContentView()
}