在Mac上通用链接默认打开方式为浏览器时候无法直接调起APP ,需要指定APP路径
macOS10.15提供了一个接口可以指定路径并设置一些参数,代码中只写了一部分,有其它需求可自行查看系统文档
lazy var appURL: URL? = {
// 通用链接自行拼接
let urlString = "https://xxx.xxx.com/xxx/xxx/xxx/?" + "parameter=" + "xxx"
return URL(string: urlString)
}()
if let strongAppURL = appURL {
if #available(macOS 10.15, *) {
let configuration = NSWorkspace.OpenConfiguration()
// 一个布尔值,指示您是否要打印文档和 URL 的内容而不是打开它们。
configuration.isForPrinting = false
// 一个布尔值,指示您是否要求 URL 具有关联的通用链接。
configuration.requiresUniversalLinks = true
// 一个布尔值,指示系统是否激活应用程序并将其置于前台。
configuration.activates = true
// 一个布尔值,指示您是否希望系统启动应用程序的新实例。
configuration.createsNewApplicationInstance = false
// 一个布尔值,指示是否向用户显示错误、身份验证请求或其他 UI 元素。
configuration.promptsUserIfNeeded = false
// 一个布尔值,指示是否使用正在运行的应用程序实例,即使它位于不同的 URL。
configuration.allowsRunningApplicationSubstitution = true
// 应用程序文件夹
if let path = FileManager.default.urls(for: .applicationDirectory, in: .localDomainMask).first?.appendingPathComponent("名称.app") {
NSWorkspace.shared.open([strongAppURL],
withApplicationAt: path,
configuration: configuration) { app, error in
guard error == nil else {
print("打开失败")
//直接打开
self.gotoLowVersionURL()
return
}
print("打开成功")
// 到主线程
DispatchQueue.main.async {
NSApp.hide(nil)
}
}
}else {
gotoLowVersionURL()
}
} else {
// 10.14以下是用直接跳转
gotoLowVersionURL()
}
}
在低于10.15的版本等情况可以直接调旧版的接口
//MARK: 低版本方式跳转(不指定app路径)
func gotoLowVersionURL() {
if let strongAppURL = appURL {
let result = NSWorkspace.shared.open(strongAppURL)
if result == false {
// 显示到下载页
if let lastURL = URL(string: "https://xxx.xxx.com") {
NSWorkspace.shared.open(lastURL)
}
}
else {
// 到主线程
DispatchQueue.main.async {
NSApp.hide(nil)
}
}
}
}
网友评论