В настоящее время я использую упрощенный c WkWebView, созданный в SwiftUI - со всеми советами, которые я смог увидеть из этого сообщения StackOverflow . Это открывает веб-сайт. На сайте есть кнопка браузера. Если я нажимаю на кнопку браузера в Safari, открывается окно Finder. Если я делаю то же самое внутри .app, созданного с помощью Xcode, окно Finder не открывается.
Это то, что я включил в Песочницу:
Я использую следующий код (все из ContentView.swift)
import SwiftUI
import WebKit
public struct WebBrowserView {
private let webView: WKWebView = WKWebView()
// ...
public func load(url: URL) {
webView.load(URLRequest(url: url))
}
public class Coordinator: NSObject, WKNavigationDelegate, WKUIDelegate {
var parent: WebBrowserView
init(parent: WebBrowserView) {
self.parent = parent
}
public func webView(_: WKWebView, didFail: WKNavigation!, withError: Error) {
// ...
}
public func webView(_: WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error) {
// ...
}
public func webView(_: WKWebView, didFinish: WKNavigation!) {
// ...
}
public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
// ...
}
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
}
public func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil {
webView.load(navigationAction.request)
}
return nil
}
}
public func makeCoordinator() -> Coordinator {
Coordinator(parent: self)
}
}
#if os(macOS) // macOS Implementation (iOS version omitted for brevity)
extension WebBrowserView: NSViewRepresentable {
public typealias NSViewType = WKWebView
public func makeNSView(context: NSViewRepresentableContext<WebBrowserView>) -> WKWebView {
webView.navigationDelegate = context.coordinator
webView.uiDelegate = context.coordinator
return webView
}
public func updateNSView(_ nsView: WKWebView, context: NSViewRepresentableContext<WebBrowserView>) {
}
}
#endif
struct BrowserView: View {
private let browser = WebBrowserView()
var body: some View {
HStack {
browser
.onAppear() {
self.browser.load(url: URL(string: "http://specificwebsitewithbrowserbutton")!)
}
}
.padding()
}
}
struct ContentView: View {
@State private var selection = 1
var body: some View {
BrowserView()
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
Итак, как мне дать этому .app достаточно разрешений, чтобы окно Finder было открыть при нажатии кнопки «Загрузить» на веб-сайте?