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

问题描述 投票:0回答:1

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

我对应用一的代码:

    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.

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

enter image description here

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

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

enter image description here

这是什么使它可以在Xcode模拟器中成功运行吗?我想让它在手机上运行还缺少什么?我认为这与我的证书/配置文件有关,但是我对此还很陌生,因此我不确定我到底需要什么/缺少什么或要检查什么?

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

ios keychain entitlements
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.