我们有一个已经发布的iOS应用。 IDE是XCode6。我想添加钥匙串(keychain)共享,以从iOS 8共享扩展程序访问应用程序中存在的sessionID。

问题是,每当打开钥匙串(keychain)共享时,就无法再访问已经存在的sessionID。

每当关闭钥匙串(keychain)共享时,都可以访问它。

将此字典传递到SecItemCopyMatching中,无论启用了“钥匙串(keychain)组”是什么,只要启用了钥匙串(keychain)共享,该字典都会始终返回-25300(未找到)。

[0] (null)  @"svce" : @"SESSION_ID_KEY"
[1] (null)  @"r_Data" : @"1"
[2] (null)  @"m_Limit" : @"m_LimitOne"
[3] (null)  @"class" : @"genp"
[4] (null)  @"acct" : @"SESSION_ID_KEY"
[5] (null)  @"pdmn" : @"ck"

知道为什么访问 key 可能行不通吗?我尝试使用 bundle 包前缀和名称设置kSecAttrAccessGroup,但在模拟器上仍然无法使用。

最佳答案

希望我能得到你的答复和赏金:)

最初我遇到了同样的问题,并且碰到了这篇文章,我知道您提到您尝试过使用包前缀和名称。但是,让我们进行一次健全性检查。

MyApp.entitlementsMyApp Extension.entitlements中,我将Keychain Access Groups设置为$(AppIdentifierPrefix)com.company.MyApp(这是默认设置)。

我使用此SO答案https://stackoverflow.com/a/20340883访问了ABCD1234的值(又名AppIdentifierPrefix值),但是在此处硬编码可能不是最佳实践,因此请考虑使用类似于https://stackoverflow.com/a/11841898/2588957的解决方案

然后注意在我的应用程序中,我添加的所有要使当前代码正常工作的内容如下:
在更新项目之前使用[keychainItem setObject:@"ABCD1234.com.company.MyApp" forKey:(__bridge id)kSecAttrAccessGroup];,我现在可以在我的共享扩展中访问钥匙串(keychain)项目。

关于ios - 将钥匙串(keychain)共享添加到已经有用户的生产应用程序中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26391272/

10-13 09:17