swift openURL在设置方案下失败

k2arahey  于 2023-03-11  发布在  Swift
关注(0)|答案(1)|浏览(222)

bounty将在2天后过期。回答此问题可获得+100声望奖励。Oscar Apeland希望引起更多人关注此问题。

我正在尝试添加一个按钮来快速访问iCloud钥匙串。我知道App Store不允许使用该按钮,但这没关系。
基于this文章,我找到了iOS设置〉密码的首选深度链接prefs:root=PASSWORDS&search=$query。我也将prefs值添加到info.plist中的“查询的URL方案”中。
尽管如此,应用程序还是无法打开我的URL,并抛出以下错误:

Failed to open URL prefs:root=PASSWORDS: Error Domain=NSOSStatusErrorDomain Code=-10814 "(null)" UserInfo={_LSLine=244, _LSFunction=-[_LSDOpenClient openURL:fileHandle:options:completionHandler:]}

当省略“search”参数时也会出现此错误。
你知道我该怎么做吗?

rmbxnbpk

rmbxnbpk1#

Apple经常更改设置应用程序的方案名称、路径、参数等。虽然一些旧版本的设置应用程序支持prefs:方案,但新版本的设置应用程序支持App-prefs:,因此,如果要打开设置密码,您应该尝试后者:

let url = URL(string: "App-prefs:PASSWORDS&search=your-domain.com")!
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url)
}

您也可以使用更通用的解决方案来支持所有已知方案:

func openSettings(path: String) {
    let schemes = [
        "App-prefs:",
        "App-prefs:root=",
        "prefs:",
        "prefs:root=",
    ]
    
    for scheme in schemes {
        let url = URL(string: "\(scheme)\(path)")!
        if UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url)
            break
        }
    }
}

openSettings(path: "PASSWORDS&search=your-domain.com")

相关问题