我有这样的代码取回从钥匙串密码对于一个给定的用户名的NSString:的iOS SFHFKeychainUtils遇事*有时*错误-25308 errSecInteractionNotAllowed
NSError *error = nil;
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
NSString *pw = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:appName error:&error];
if(error != nil)
// log the error
大部分时间对于大多数用户来说,这一切工作正常 - 但对于一些特定的用户,这似乎调用失败(并进行不及格)它返回以下错误:
The operation couldn’t be completed. (SFHFKeychainUtilsErrorDomain error -25308.)
这显然是errSecInteractionNotAllowed - 从我读过我认为这意味着要访问钥匙链需要某种用户交互。
有没有人有任何想法为什么这个调用可能会失败的一些特定的用户只?此钥匙串条目特定于我的应用程序 - 那么为什么需要任何用户交互才能访问它?
任何指针非常感谢...
我已经验证了这一点上的iOS4,iOS5的和iOS6的。在所有iOS版本中,如果在设备处于锁定状态(例如后台任务,报亭下载等)时读取未标记为kSecAttrAccessibleAlways的数据,则会返回errSecInteractionNotAllowed错误代码。 – 2012-11-12 09:35:41
kSecAttrAccessibleAlways不是一个很好的选择 - 通过使用类似kSecAttrAccessibleAfterFirstUnlock(或更严格的设置,如果适用于您的应用),您可以获得更多的安全优势,并且仍然可以避免错误。 – frankodwyer 2012-11-12 13:05:42
我可以确认,当应用程序在前台,但设备被锁定密码时,钥匙串库给我-25308。谢谢 ! – Magurizio 2013-12-28 12:18:43