首页 > 解决方案 > 具有应用生命周期的 SwiftUI macOS 应用在接收通用链接时不会触发 onOpenURL

问题描述

我有一个简单的 SwiftUI 应用程序,带有一个 onOpenURL 处理程序来处理通用链接,我的目标是 macOS:

var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, persistenceController.container.viewContext)
                .onOpenURL { url in
                    print("Inside onOpenURL....")
                 }
         }
    }

我还在我的域中配置了 Associated Domains 功能和 apple-app-site-association 文件,因此当打开指向该域的链接时,我的应用程序被打开而不是 Safari。因此,在调试应用程序并单击通用链接(例如,在 Notes 应用程序中)打开我的应用程序(它确实如此)时,我希望在输出窗口中看到“Inside onOpenURL ....”消息Xcode,意味着 onOpenURL 处理程序正在处理通用链接。

但这不会发生。每次单击通用链接时,应用程序都会打开,但 Xcode 中没有显示任何内容。这是在 macOS Big Sur 11.1 和最近更新的 11.2 中。

但是,如果将相同的代码用于针对 iOS 14 应用程序,则可以正常工作,无需更改任何代码,只需更改应用程序的目标即可。

尝试了很多事情后,我还发现,如果我使用自定义 URL 方案(例如 myapp://),则会在我的 macOS 应用程序中调用 onOpenURL 处理程序。我可以看到“Inside onOpenURL ....”消息。但是通用链接不会发生这种情况,我的应用程序是针对 macOS 的,并且需要通用链接。

有没有人发现这个问题,以及如何解决它?

谢谢

标签: macosswiftuiuniversal-link

解决方案


推荐阅读