Swift LSCopyDefaultHandlerForURLScheme检查当前应用程序是否为默认浏览器的替代方案?
由于10.15不推荐使用LSCopyDefaultHandlerForURLScheme,检查我的应用程序是否设置为默认浏览器的正确方法是什么 当我执行以下操作时,我会得到一个bundle ID引用:Swift LSCopyDefaultHandlerForURLScheme检查当前应用程序是否为默认浏览器的替代方案?,swift,macos,Swift,Macos,由于10.15不推荐使用LSCopyDefaultHandlerForURLScheme,检查我的应用程序是否设置为默认浏览器的正确方法是什么 当我执行以下操作时,我会得到一个bundle ID引用: let bundleID=LSCopyDefaultHandlerForURLScheme(“http”作为CFString)?.takeRetainedValue(){…} 然后我就可以将bundleID与Bundle.main.bundleIdentifier进行比较 如果改用LSCopyD
let bundleID=LSCopyDefaultHandlerForURLScheme(“http”作为CFString)?.takeRetainedValue(){…}
然后我就可以将bundleID
与Bundle.main.bundleIdentifier
进行比较
如果改用LSCopyDefaultApplicationURLForURL,则会得到一个URL。为了将我的应用程序包ID与LSCopyDefaultApplicationURLForURL进行比较,我需要访问我的应用程序可能由于沙盒而无法访问的URL包
有什么建议吗?您可以将
URL
的lastPathComponent
与应用程序的名称进行比较
例如,考虑到您的应用程序名为MyApp
var isDefaultBrowser: Bool {
LSCopyDefaultApplicationURLForURL(URL(string: "http://")! as CFURL, .all, nil)
.map { $0.takeRetainedValue() as URL }
.map(\.lastPathComponent)
.map { $0 == "MyApp.app" }
?? false
}
您可以使用从
LSCopyDefaultApplicationURLForURL
返回的URL检查捆绑包标识符
func isDefaultBrowser(for bundleIdentifier : String) -> Bool {
guard let defaultbrowserURL = LSCopyDefaultApplicationURLForURL(URL(string: "http://")! as CFURL, .all, nil)?.takeRetainedValue() as URL?,
let bundle = Bundle(url: defaultbrowserURL) else { return false }
return bundle.bundleIdentifier == bundleIdentifier
}
在iOS上有没有创建这样的变量@沃克斯哈勒,你会如何为iOS做到这一点@vadian@Ryan坦白说,我不知道。