ver llavero guardadas descargar cuentas correo contraseñas contraseña como apple iphone objective-c ios cocoa-touch ios4

llavero - ver contraseña de correo en iphone



Restablecer el llavero de la aplicación de iPhone (4)

- (void)resetKeychainItem { OSStatus junk = noErr; if (!keychainItemData) { self.keychainItemData = [[NSMutableDictionary alloc] init]; } else if (keychainItemData){ NSMutableDictionary *tempDictionary = [self dictionaryToSecItemFormat:keychainItemData]; junk = SecItemDelete((CFDictionaryRef)tempDictionary); if ( junk != noErr ) { UIAlertView *dialog = [[UIAlertView alloc] initWithTitle:@"Keychain Error" message:[NSString stringWithFormat:@"A problem with updating the secure Keychain items with this information (likely, this email address information is duplicated in another Player). Error code: %d %@", junk, [self resultText:-junk]] delegate:self cancelButtonTitle:NSLocalizedStringFromTable(@"Ok", @"Localizable", @"display text") otherButtonTitles:nil]; [dialog show]; [dialog release]; //NSAssert( junk == noErr || junk == errSecItemNotFound, @"Problem deleting current dictionary." ); return; } } // Default attributes for keychain item. [keychainItemData setObject:@"" forKey:(id)kSecAttrAccount]; [keychainItemData setObject:@"" forKey:(id)kSecValueData]; [keychainItemData setObject:@"" forKey:(id)kSecAttrLabel]; [keychainItemData setObject:@"" forKey:(id)kSecAttrDescription]; [keychainItemData setObject:@"" forKey:(id)kSecAttrComment]; // Default data for keychain item. [keychainItemData setObject:@"" forKey:(id)kSecAttrModificationDate]; [keychainItemData setObject:@"" forKey:(id)kSecAttrService]; }

Me gustaría saber si hay una manera de restablecer el llavero de Mi aplicación. Me pregunto si algo existe como

[NSUserDefaults resetStandardUserDefaults]

para llavero. La cadena de claves no se restablece incluso después de eliminar la aplicación. Hasta ahora, la única forma que conozco es restablecerlos uno por uno desde la aplicación.


KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"nameOfYourKeychain" accessGroup:nil]; [keychainItem resetKeychainItem];

Mucho más simple :)

Editar: En respuesta a una pregunta que se hace a continuación, ¿qué es KeychainItemWrapper?

Es una clase escrita por Apple que puedes descargar aquí: http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_m.html

Añádalo a su proyecto y luego impórtelo donde quiera usarlo. Luego use el fragmento de código que proporcioné arriba.


Versión basada en bloques de la solución de @ Vegard:

void (^deleteAllKeysForSecClass)(CFTypeRef) = ^(CFTypeRef secClass) { id dict = @{(__bridge id)kSecClass: (__bridge id)secClass}; OSStatus result = SecItemDelete((__bridge CFDictionaryRef) dict); NSAssert(result == noErr || result == errSecItemNotFound, @"Error deleting keychain data (%d)", (int)result); }; deleteAllKeysForSecClass(kSecClassGenericPassword); deleteAllKeysForSecClass(kSecClassInternetPassword); deleteAllKeysForSecClass(kSecClassCertificate); deleteAllKeysForSecClass(kSecClassKey); deleteAllKeysForSecClass(kSecClassIdentity);

Para aquellos de nosotros a quienes les gusta simplemente ingresar el código sin tener que tener métodos de ayuda.


Como todas las respuestas hasta ahora se basan en que usted conoce los identificadores que desea eliminar, me gustaría enviar la siguiente solución que elimina TODAS las claves existentes para la aplicación (solo iOS)

-(void)resetKeychain { [self deleteAllKeysForSecClass:kSecClassGenericPassword]; [self deleteAllKeysForSecClass:kSecClassInternetPassword]; [self deleteAllKeysForSecClass:kSecClassCertificate]; [self deleteAllKeysForSecClass:kSecClassKey]; [self deleteAllKeysForSecClass:kSecClassIdentity]; } -(void)deleteAllKeysForSecClass:(CFTypeRef)secClass { NSMutableDictionary* dict = [NSMutableDictionary dictionary]; [dict setObject:(__bridge id)secClass forKey:(__bridge id)kSecClass]; OSStatus result = SecItemDelete((__bridge CFDictionaryRef) dict); NSAssert(result == noErr || result == errSecItemNotFound, @"Error deleting keychain data (%ld)", result); }

Versión de Swift 2.2 :

func resetKeychain() { self.deleteAllKeysForSecClass(kSecClassGenericPassword) self.deleteAllKeysForSecClass(kSecClassInternetPassword) self.deleteAllKeysForSecClass(kSecClassCertificate) self.deleteAllKeysForSecClass(kSecClassKey) self.deleteAllKeysForSecClass(kSecClassIdentity) } func deleteAllKeysForSecClass(secClass: CFTypeRef) { let dict: [NSString : AnyObject] = [kSecClass : secClass] let result = SecItemDelete(dict) assert(result == noErr || result == errSecItemNotFound, "Error deleting keychain data (/(result))") }

Swift 3 versión

func resetKeychain() { deleteAllKeysForSecClass(kSecClassGenericPassword) deleteAllKeysForSecClass(kSecClassInternetPassword) deleteAllKeysForSecClass(kSecClassCertificate) deleteAllKeysForSecClass(kSecClassKey) deleteAllKeysForSecClass(kSecClassIdentity) } func deleteAllKeysForSecClass(_ secClass: CFTypeRef) { let dict: [NSString : Any] = [kSecClass : secClass] let result = SecItemDelete(dict as CFDictionary) assert(result == noErr || result == errSecItemNotFound, "Error deleting keychain data (/(result))") }