iOS Keychain SecItemAdd返回-25243

Tim*_*Tim 12 keychain ios

我正在努力更新iPhone应用程序,其默认配置稍有变化.自从我最后一次构建它以来已经有一段时间了,因此我将Xcode升级到4.2并在最新版本中包含iOS 5支持.

当我在设备上进行测试时,我收到以下断言错误:

2011-11-02 20:57:18.869 RoseBandwidth[903:707] Tried to add item, got result: -25243
2011-11-02 20:57:18.870 RoseBandwidth[903:707] *** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/tim/code/RoseBandwidth/Classes/KeychainItemWrapper.m:312
2011-11-02 20:57:18.872 RoseBandwidth[903:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'
Run Code Online (Sandbox Code Playgroud)

我正在使用KeychainItemWrapperApple的GenericKeychain项目中的类的实现.值得注意的是,这个错误只出现在设备上,而不是模拟器中(我知道平台之间的访问组限制差异,但通常我认为这会导致模拟器出现问题,而不是真正的硬件).

为什么我会收到此错误?我没有触及与应用程序的钥匙串相关部分相关的任何内容; 它完全像以前一样存储和检索数据.

axi*_*ixc 18

好吧,我无法完成您的项目构建,但是从如何在iOS应用程序之间共享钥匙串数据我认为您可能想要检查您的权利文件.至少在github项目中,您没有在Keychain Access Groups中指定任何内容.


jem*_*ons 9

对于碰巧在这里结束的未来搜索者,No access control在模拟器上运行-25243错误(这意味着BTW)的另一个可能原因.

我最好的理论是应用程序的配置文件(或其签名)是应用程序如何知道其捆绑种子是什么.捆绑种子需要成为钥匙串访问组名称的一部分.但是在模拟器上运行的应用程序没有签名,因此有一个丢失的(或不同的?)捆绑种子比你指定的keychain-access-group.

或者其他的东西.这一切都记录得很糟糕,很难说是什么.只需尝试在设备上运行它,看看是否有帮助.


ysn*_*lcn 5

对于那些收到此错误并尝试在两个应用程序之间实现"共享密钥链访问"的人:

您需要为您的应用创建应用ID,并在第一次激活"功能"中的"共享钥匙串访问"时选择相同的团队ID.在此处创建您的应用ID: Apple会员中心

之后,您需要从该App ID创建配置文件并将其下载到您的计算机.(双击它以安装到x-code)

我假设您已经知道您需要"App ID Prefix"来访问密钥链,但对于那些不知道的人:"App ID Prefix"是与您的Apple开发者帐户关联的唯一文本标识符:在此输入图像描述

要访问"SharedKeychain",您需要在尝试写入或读取钥匙串之前实现它

keychainAccessGroupName = "AB123CDE45.myKeyChainGroup":

您可以查看本教程以获取更多信息:在iOS应用程序之间共享Keychain.

希望有所帮助.