Soy muy nuevo en el desarrollo de iOS, así que discúlpeme si se trata de una pregunta para novatos. Tengo un mecanismo de autenticación simple para mi aplicación que toma la dirección de correo electrónico y la contraseña de un usuario. También tengo un interruptor que dice 'Recordarme'. Si el usuario activa ese interruptor, me gustaría conservar su correo electrónico/contraseña para que esos campos puedan completarse automáticamente en el futuro.Guardar el correo electrónico/contraseña de Keychain en iOS
He conseguido esto para trabajar con guardar en un archivo plist, pero sé que no es la mejor idea ya que la contraseña no está encriptada. Encontré un código de muestra para guardar en el llavero, pero para ser sincero, estoy un poco perdido. Para la función a continuación, no estoy seguro de cómo llamarlo y cómo modificarlo para guardar la dirección de correo electrónico también.
que supongo que llamar sería: saveString(@"passwordgoeshere");
Gracias por cualquier ayuda !!!
+ (void)saveString:(NSString *)inputString forKey:(NSString *)account {
NSAssert(account != nil, @"Invalid account");
NSAssert(inputString != nil, @"Invalid string");
NSMutableDictionary *query = [NSMutableDictionary dictionary];
[query setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
[query setObject:account forKey:(id)kSecAttrAccount];
[query setObject:(id)kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];
OSStatus error = SecItemCopyMatching((CFDictionaryRef)query, NULL);
if (error == errSecSuccess) {
// do update
NSDictionary *attributesToUpdate = [NSDictionary dictionaryWithObject:[inputString dataUsingEncoding:NSUTF8StringEncoding]
forKey:(id)kSecValueData];
error = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)attributesToUpdate);
NSAssert1(error == errSecSuccess, @"SecItemUpdate failed: %d", error);
} else if (error == errSecItemNotFound) {
// do add
[query setObject:[inputString dataUsingEncoding:NSUTF8StringEncoding] forKey:(id)kSecValueData];
error = SecItemAdd((CFDictionaryRef)query, NULL);
NSAssert1(error == errSecSuccess, @"SecItemAdd failed: %d", error);
} else {
NSAssert1(NO, @"SecItemCopyMatching failed: %d", error);
}
}
me fijo @ código de anomia para trabajar con ARC y ponerlo en Github (I ligado a esta respuesta y el mencionado usuario en ambos archivos, pero si quieres más atribución favor hágamelo saber) También cambié el formato un poco e hice que los nombres de los métodos fueran un poco más genéricos. https://github.com/jeremangnr/JNKeychain – jere