SecItemCopyMatching
to odpowiednie połączenie. Najpierw musimy zbudować nasz słownik zapytań tak, że atrybuty przedmiotów są zwracane w słownikach, a wszystkie elementy są zwracane:
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
(__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
nil];
Jak SecItemCopyMatching
wymaga co najmniej klasa zwróconych SecItem
s, tworzymy tablicę ze wszystkimi zajęcia ...
NSArray *secItemClasses = [NSArray arrayWithObjects:
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity,
nil];
... i dla każdej klasy, ustawić klasę w naszym zapytaniu, zadzwoń SecItemCopyMatching
i zaloguj wynik.
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);
}
W produkcji kodu, należy sprawdzić, czy OSStatus
zwrócony przez SecItemCopyMatching
jest albo errSecItemNotFound
(nie znaleziono pozycji) lub errSecSuccess
(przynajmniej jeden element został znaleziony).
Dzięki! Nie testowałem jeszcze, ale wygląda na właściwą odpowiedź. – noamtm
To jest. Testowałem to :) –
Mam wszystkie null w druku zarówno na iPhone'a jak i na symulatorze. Czy jest coś, co powinienem zrobić? – karim