我们有一个已经发布的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.entitlements
和MyApp 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/