iPhone写入KeyChain无标准错误

时间:2010-03-03 10:24:43

标签: iphone keychain

我正在尝试在钥匙串上写入一个条目,但它失败了,返回代码为-25243,文档只列出了“常见”错误代码,并指向“开放组”的方向寻求帮助。我已经下载了该文档,但还没有找到在哪里查看,该文档长度超过1000页,似乎列出了#define的负载。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

在设备上运行时,有一些原因导致您看到此错误。在尝试使用访问组将值存储到钥匙串时,我发现了这两种情况。

  • 未启用权利
  • 已启用权利,但访问组不存在

确保正确设置所有这些内容:

  1. 在Xcode中选择您的应用目标
  2. 选择摘要标签
  3. 在“权利”部分中,确认已选中“启用权利”复选框。
  4. 验证Keychain Access Groups是否包含您尝试写入的组。

答案 1 :(得分:2)

好的,问题似乎是我试图在kSecAttrAccessGroup中存储一个值,将其更改为kSecAttrDescription并且一切都很好

答案 2 :(得分:2)

有点晚了,但值得回答。尝试将访问组与模拟器中的钥匙串一起使用时会发生此错误。

请注意GenericKeychain示例中的此片段。

#if TARGET_IPHONE_SIMULATOR
        // Ignore the access group if running on the iPhone simulator.
        // 
        // Apps that are built for the simulator aren't signed, so there's no keychain access group
        // for the simulator to check. This means that all apps can see all keychain items when run
        // on the simulator.
        //
        // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the
        // simulator will return -25243 (errSecNoAccessForItem).
#else           
        [genericPasswordQuery setObject:accessGroup forKey:(id)kSecAttrAccessGroup];
#endif

答案 3 :(得分:1)

我最近遇到了这个问题,结果发现我有多个开发者帐户,而Xcode选择了“错误的”开发者证书来签署我的调试版本。此证书与App Id不属于同一个开发人员,因此该应用程序无法再访问该Keychain组。

一旦我强制代码签名使用正确的开发人员证书,那么错误就消失了。