MacOS 通用链接未在 AppDelegate 中运行预期功能

Posted

技术标签:

【中文标题】MacOS 通用链接未在 AppDelegate 中运行预期功能【英文标题】:MacOS Universal Links not running expected function in AppDelegate 【发布时间】:2020-10-29 12:15:37 【问题描述】:

我正在尝试在 Swift MacOS 应用程序中实现通用链接,单击链接确实会打开应用程序,但它应该使用此签名在 AppDelegate 中运行应用程序功能:

func application(_ application: NSApplication,
                   continue userActivity: NSUserActivity,
                   restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void) -> Bool

根据文档,但它没有运行。我已经使用os_log() 验证了这一点 - 我已经在我的应用程序周围放置了日志,包括这个函数,除了这个之外,所有的都按预期命中。

这是我到达这一点的过程:

    在 Xcode 中添加适当的关联 Associated Domains,以及我的 AASA 在 Xcode 中运行我的应用程序 将通用链接粘贴到 Notes 中,然后单击它 第一次,链接在 Safari 中打开,然后我选择了我想在我的应用程序中打开它 现在每次点击链接时应用都会打开

我需要从链接中获取信息,所以我确实需要从userActivity 获取 URL,但到目前为止,单击通用链接似乎就像单击了应用程序一样。

我错过了什么吗?我是否错误地期望它与 ios 通用链接类似?

【问题讨论】:

虽然我已经在下面写了一个答案,但我仍然欢迎可以提供进一步了解为什么我必须与文档所说的不同的答案 【参考方案1】:

似乎我已经找到了答案 - 在文档中(甚至当您为 NSApplicationDelegate 选择“跳转到定义”时),它说要使用

restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void

作为您的最后一个参数,但是当您键入“应用程序”并从自动完成中选择时,它会出现

restorationHandler: @escaping ([Any]) -> Void

作为最后一个参数。取而代之的是,当我单击通用链接时,它会被调用。

【讨论】:

以上是关于MacOS 通用链接未在 AppDelegate 中运行预期功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在处理通用链接之前等待 didFinishLaunchingWithOptions 完成?

Swiftui: MacOS App: Fetching Core Data in ContentView OK,但是如何使用 AppDelegate 的结果呢?

XAMPP 服务器未在 Macos Sierra 中启动

Swift UI Canvas 未在 macOS 10.15 和 Xcode 11.1 中显示

项目未在活动配置中构建 Visual Studio MacOS .net Core

SwiftUI - 如何在 macOS 上隐藏窗口标题