Что может быть причиной сбоя SecItemAdd или SecItemCopyMatching?
Я использую этот метод для получения сохраненного значения (и использую 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%) получают результаты, указывающие на то, что чтение или запись здесь не удаются. Мой код, к сожалению, проглатывает любые ошибки (то есть не регистрирует их нигде, когда они происходят), поэтому я не могу сказать, почему в мире происходит сбой, и я вообще не могу воспроизвести проблему ни на одном из моих устройств разработки.
Кто-нибудь знает какие-либо настройки безопасности / разрешений, которые могут быть включены на устройстве iOS, которые могут вызвать SecItemAdd
или же SecItemCopyMatching
терпеть неудачу? Я попытался включить блокировку пароля, но это, похоже, не имеет никакого эффекта.