OSStatus错误:[-34018]设备上没有必需的授权时出现内部错误

我正在尝试使用KeyChainaccess实现钥匙串共享。我已经构建了两个非常基本的应用程序:将一个字符串写到共享钥匙串的App One,以及从共享钥匙串读取数据并显示它的App Two。

我对应用一的代码:

    override func viewDidLoad() {
    super.viewDidLoad()

    //save item to keychain
    let keychain = Keychain(service: "app.test",accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")

    do {
        try keychain.set("Some Data Set in app one",key: "sharedData")
        print("Success")
        label.text = "Success"
    }
    catch let error {
        print("Keychain write failed: \(error)")
        label.text = "Keychain write failed: \(error)"
    }

}

我用于应用二的代码从共享钥匙串读取并显示:

override func viewDidLoad() {
    super.viewDidLoad()

    //load item from keychain
    let keychain = Keychain(service: "app.test",accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")

    let data = try? keychain.get("sharedData")

    print("Data from Keychain: \(data ?? "nil")")

    label.text = "Data from Keychain: \(data ?? "nil")"
}

这是一个非常基本的示例,仅用于尝试该概念,但是我发现,当我在Mac上使用Xcode的模拟器运行它时,它的行为符合预期,我运行了第一个应用程序-成功,然后运行第二个应用程序,并显示正确的字符串。

然后我尝试在设备上运行它(通过将设备插入Mac并更改运行位置时,在尝试从共享钥匙串进行读写时收到以下错误:

   OSStatus error:[-34018] Internal error when a required entitlement isn't present,client has neither application-identifier nor keychain-access-groups entitlements.

我已经检查了我的权利文件,可以看到它们都包含在两个应用程序中:

OSStatus错误:[-34018]设备上没有必需的授权时出现内部错误

并且在构建设置中正确引用了权利文件:

OSStatus错误:[-34018]设备上没有必需的授权时出现内部错误

此外,当我将鼠标悬停在我的配置文件上时,它会告诉我它们已包含在其中:

OSStatus错误:[-34018]设备上没有必需的授权时出现内部错误

这是否是允许它在Xcode模拟器中成功运行的原因?我想让它在手机上运行还缺少什么?我认为这与我的证书/个人资料有关,但是我对此还很陌生,因此我不确定我到底需要什么/缺少什么或要检查什么?

任何人都可以帮助或指出正确的方向吗?

lbwaaa 回答:OSStatus错误:[-34018]设备上没有必需的授权时出现内部错误

我有同样的问题。解决方案非常简单。再次检查钥匙串初始化程序中的accessGroup参数。 例如,您在功能中添加了名为“ com.myCompany.app”的钥匙串组。但这不是accessGroup的全名。要解决此问题,只需在钥匙串组名称前添加“ App ID前缀”。您可以在App ID配置中的Apple开发人员帐户中找到此前缀。完整的accessGroup名称将为“ XXXXXXXXXX.com.myCompany.app”,其中XXXXXXXXXX是您的应用ID前缀。

本文链接:https://www.f2er.com/2521742.html

大家都在问