5

我正在使用此方法来检索保存的值(并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 设备上启用的任何可能导致SecItemAddSecItemCopyMatching失败的安全/权限设置?我试过打开密码锁定,但这似乎没有效果。

4

0 回答 0