3

很长一段时间以来,我一直在使用 ARC 版本的 KeychainItemWrapper 成功地读取和写入私有钥匙串项目。

我现在正在努力将我的 iOS 应用程序转换为使用共享访问组,以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串项目。在功能部分,我添加了钥匙串组“MYAPPPREFIX.MYSHAREDACCESSNAME”

我正在使用这些行将我的变量写入钥匙串组:

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"MYAPPPREFIX.MYSHAREDACCESSNAME"];
[keychainItemWrapper setObject:value forKey:(__bridge id)(kSecAttrAccount)]; // store the new value in the keychain

如果 accessGroup 被指定为nil,它工作得很好。但是,如果我指定访问组,我会在调试器日志中出现以下错误并崩溃:

-[KeychainItemWrapper writeToKeychain] 中的断言失败,..../KeychainItemWrapper.m:329 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法添加钥匙串项。”

生成的 OSStatus 错误代码是 -25243,我无法找到更多信息。

为了写入共享访问组,我可能还需要做些什么吗?

4

1 回答 1

6

如果它对其他人有帮助,我能够确定问题所在。在 Xcode 'Capabilities' 中,我需要省略 app id 前缀。但是,识别访问组时需要包含应用 ID 前缀。

因此,在功能方面,我将一个组命名为“myAccessGroup”。

在我的代码中,我包含这样的前缀:

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"xxxxxxxx.myAccessGroup"];
于 2014-10-10T21:50:33.763 回答