SecItemCopyMatching
- правильный звонок для этого. Сначала мы строим наш словарь запросов, так что все атрибуты, элементы возвращаются в словарях, и что все элементы будут возвращены:
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
(__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
nil];
Как SecItemCopyMatching
требует, по крайней мере, класса возвращенных SecItem
с, мы создаем массив со всеми классы ...
NSArray *secItemClasses = [NSArray arrayWithObjects:
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity,
nil];
... и для каждого класса, установить класс в нашем запросе, вызовите SecItemCopyMatching
и войти результат.
for (id secItemClass in secItemClasses) {
[query setObject:secItemClass forKey:(__bridge id)kSecClass];
CFTypeRef result = NULL;
SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
NSLog(@"%@", (__bridge id)result);
if (result != NULL) CFRelease(result);
}
В производстве код, вы должны проверить, что OSStatus
возвращаемый SecItemCopyMatching
не либо errSecItemNotFound
(никаких пунктов найден) или errSecSuccess
(по крайней мере, один пункт был найден).
Спасибо! Еще не проверял его, но выглядит как правильный ответ. – noamtm
Это так. Я протестировал его :) –
Я получил всю нулевую печать как в iPhone, так и в симуляторе. Есть ли что-то еще, что я должен сделать? – karim