SecItemCopyMatching
è la chiamata giusta per questo. Prima costruiamo nostro dizionario query in modo che gli attributi le voci vengono restituiti nei dizionari, e che tutti gli articoli sono tornati:
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
(__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
nil];
Come SecItemCopyMatching
richiede almeno la classe dei restituiti SecItem
s, creiamo un array con tutti le classi ...
NSArray *secItemClasses = [NSArray arrayWithObjects:
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity,
nil];
... e per ogni classe, impostare la classe nella nostra query, chiamata SecItemCopyMatching
, e log il risultato.
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);
}
Nel codice di produzione, si dovrebbe verificare che il OSStatus
restituito da SecItemCopyMatching
è o errSecItemNotFound
(articoli trovati) o errSecSuccess
(almeno un elemento è stato trovato).
fonte
2012-07-26 15:37:15
Grazie! Non l'ho ancora provato, ma sembra la risposta giusta. – noamtm
Lo è. L'ho provato :) –
Ho ottenuto tutti i null nella stampa sia in iPhone che nel simulatore. C'è qualcosa che dovrei fare? – karim