我正在使用此方法来检索已保存的值(并使用SecItemAdd
最初添加它):
+ (NSData *)passwordDataForService:(NSString *)service
account:(NSString *)account error:(NSError **)error {
CFTypeRef result = NULL;
NSMutableDictionary *query = [self _queryForService:service account:account];
[query setObject:(__bridge id)kCFBooleanTrue
forKey:(__bridge id)kSecReturnData];
[query setObject:(__bridge id)kSecMatchLimitOne
forKey:(__bridge id)kSecMatchLimit];
status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
if (status != noErr && error != NULL) {
*error = [NSError errorWithDomain:kSSKeychainErrorDomain code:status
userInfo:nil];
return nil;
}
return (__bridge_transfer NSData *)result;
}
此代码适用于大多数用户,但我的一小部分用户(<1%)正在遇到结果,表明此处的读取或写入失败。不幸的是,我的代码吞没了任何错误(即当它们出现时不会将它们记录在任何地方)所以我不知道为什么它在世界上失败了,我无法在我的任何开发设备上重现这个问题。 / p>
是否有人知道可以在iOS设备上启用的任何可能导致SecItemAdd
或SecItemCopyMatching
失败的安全/权限设置?我已尝试打开密码锁定,但似乎没有效果。