我试图从具有相同标识符(相同配置文件)的另一个应用程序访问应用程序的密钥链数据集。我使用这个链接来实现这一点。
密钥链数据的保存正在正常发生,我得到errSecSuccess以下语句(在模拟器和设备)
OSStatus status = SecItemAdd((CFDictionaryRef)dictionary, NULL);
到目前为止还不错,但是当我试图取回我的应用程序A保存在另一个应用程序B中的凭据时,它在模拟器和设备中的工作方式不同。
在iOS模拟器6.1中,我得到以下语句的状态为'0'。
OSStatus status = SecItemCopyMatching((CFDictionaryRef)searchDictionary, &foundDict);
在任何iOS设备中,我得到的状态都是'-25300'。
我知道这些是安全框架中的错误代码:
//errSecSuccess = 0, /* No error. */
//errSecUnimplemented = -4, /* Function or operation not implemented. */
//errSecParam = -50, /* One or more parameters passed to a function where not valid. */
//errSecAllocate = -108, /* Failed to allocate memory. */
//errSecNotAvailable = -25291, /* No keychain is available. You may need to restart your computer. */
//errSecDuplicateItem = -25299, /* The specified item already exists in the keychain. */
//errSecItemNotFound = -25300, /* The specified item could not be found in the keychain. */
//errSecInteractionNotAllowed = -25308, /* User interaction is not allowed. */
//errSecDecode = -26275, /* Unable to decode the provided data. */
//errSecAuthFailed = -25293, /* The user name or passphrase you entered is not correct. */
和我得到它的项目没有找到,但为什么不同的设备和模拟器。
据我所知,您在应用程序中处理的Keychain组默认情况下不会在系统上的其他应用程序之间共享。如果是这种情况,这意味着如果你设法找到另一个应用程序的组,你可以窃取他们的私有Keychain项目,使Keychain提供的安全性失效。
因此,有一个概念被称为钥匙链访问组,它允许公共定义一个你想在你的应用程序中共享的钥匙链组。文档说明:
启用密钥链共享允许您的应用程序共享密码与您的团队开发的其他应用程序的钥匙串
所以请注意,您只能与来自同一开发人员的其他应用程序(即您的其他应用程序)共享钥匙链项。