SecItemCopyMatching
es la decisión correcta para eso. En primer lugar construimos nuestro diccionario consulta para que los atributos de los ítems se devuelven en los diccionarios, y que se devuelven todos los artículos:
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
(__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
nil];
Como SecItemCopyMatching
requiere al menos la clase de los devueltos SecItem
s, creamos una matriz con todos las clases ...
NSArray *secItemClasses = [NSArray arrayWithObjects:
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity,
nil];
... y para cada clase, definen la clase en nuestra consulta, llaman SecItemCopyMatching
y registrar el resultado.
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);
}
En el código de producción, se debe comprobar que el OSStatus
devuelto por SecItemCopyMatching
es o bien errSecItemNotFound
(artículos encontrados) o errSecSuccess
(se encontró al menos un elemento).
Gracias! Aún no lo he probado, pero parece ser la respuesta correcta. – noamtm
Lo es. Lo probé :) –
Tengo todo nulo en impresión tanto en iPhone como en simulador. ¿Hay algo más que debería hacer? – karim