Ios OSStatus错误:[-34018]当所需权限为';设备上不存在错误

Ios OSStatus错误:[-34018]当所需权限为';设备上不存在错误,ios,keychain,entitlements,Ios,Keychain,Entitlements,我正在尝试使用KeyChainAccess实现keychain共享。我构建了两个非常基本的应用程序:应用程序1将字符串写入共享密钥链,应用程序2从共享密钥链读取数据并显示 我的应用程序一代码: override func viewDidLoad() { super.viewDidLoad() //save item to keychain let keychain = Keychain(service: "app.test", accessGroup: "xxx

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

我的应用程序一代码:

    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)"
    }

}
从共享钥匙链读取和显示的应用程序2的我的代码:

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")"
}
   OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.
这是一个非常基本的示例,只是为了尝试这个概念,但是我发现,当我在Mac上使用Xcode的模拟器运行它时,它的行为与预期一样,我运行第一个应用程序-它成功,然后运行第二个应用程序,并显示正确的字符串

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

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")"
}
   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”。您可以在应用ID配置中的apple developer帐户中找到此前缀。完整的accessGroup名称将为“xxxxxxxxx.com.myCompany.app”,其中xxxxxxxxx是您的应用程序ID前缀。

我也有同样的问题。解决方法非常简单。请再次检查钥匙链初始值设定项中的accessGroup参数。
例如,您在Capabilities中添加了名为“com.myCompany.app”的密钥链组。但它不是accessGroup的全名。要解决此问题,只需在密钥链组名称前加上“app ID prefix”。您可以在应用ID配置中的apple developer帐户中找到此前缀。完整的accessGroup名称将为“xxxxxxxxx.com.myCompany.app",其中xxxxxxxxx是你的应用程序ID前缀。

你有付费开发者帐户吗?@Paulw11是的,我有,可能我使用了错误的配置文件吗?你有付费开发者帐户吗?@Paulw11是的,我有,可能我使用了错误的配置文件吗?迪米特里,谢谢你。这很有效。我不知道这个前缀是必要的。很多人感谢你s!谢谢。确定共享密钥链访问的细节非常棘手。嘿,Dmitry,当我将APPID添加到授权文件时,它会给我一个配置文件错误。官方文档说Xcode将自动添加TeamID。我很困惑。实际上,没关系,我通过删除密钥链共享来解决这个问题g功能并将其添加回来。Dimitry,谢谢你。这很有效。我不知道需要这个前缀。非常感谢!谢谢你。确定共享密钥链访问的细节非常棘手。嘿,Dmitry,当我将APPID添加到授权文件时,它会给我一个配置文件错误。还有正式文档entation说Xcode会自动添加TeamID。我很困惑。事实上,没关系,我通过删除密钥链共享功能并将其添加回来解决了这个问题。