Что может быть причиной сбоя 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 терпеть неудачу? Я попытался включить блокировку пароля, но это, похоже, не имеет никакого эффекта.

0 ответов

Другие вопросы по тегам