OSStatus error:[-34018] Internal error when a required entitlement isn't present error on device

OSStatus error:[-34018] Internal error when a required entitlement isn't present error on device

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

我的 App One 代码:

    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.

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

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

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

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

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

我遇到了同样的问题。解决方案非常简单。再次检查钥匙串初始化程序中的 accessGroup 参数。 例如,您在 Capabilities 中添加名称为 "com.myCompany.app" 的钥匙串组。但它不是accessGroup的全称。要解决此问题,只需将 "App ID prefix" 添加到钥匙串组名称。您可以在 App ID 配置中的苹果开发者帐户中找到此前缀。完整的 accessGroup 名称将为 "XXXXXXXXXX.com.myCompany.app",其中 XXXXXXXXXX 是您的 App ID 前缀。