Sono molto nuovo nello sviluppo di iOS, quindi perdonatemi se questa è una domanda per principianti. Ho un semplice meccanismo di autenticazione per la mia app che accetta l'indirizzo e-mail e la password di un utente. Ho anche un interruttore che dice "Ricordami". Se l'utente attiva questa opzione, vorrei conservare la loro email/password in modo da poterli compilare automaticamente in futuro.Salvataggio di email/password sul portachiavi in iOS
Ho ottenuto che questo funzioni con il salvataggio in un file plist ma so che non è l'idea migliore poiché la password non è criptata. Ho trovato un codice di esempio per il salvataggio sul portachiavi, ma ad essere onesti, sono un po 'perso. Per la funzione seguente, non sono sicuro di come chiamarlo e come modificarlo per salvare anche l'indirizzo email.
Sto indovinando chiamare sarebbe: saveString(@"passwordgoeshere");
Grazie per tutto l'aiuto !!!
+ (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);
}
}
ho fissato @ codice di Anomie a lavorare con ARC e metterlo su Github (ho collegato a questa risposta e citato l'utente in entrambi i file, ma se si vuole ulteriormente attribuzione fatemelo sapere). Ho anche modificato la formattazione un po 'e reso i nomi dei metodi un po' più generici. https://github.com/jeremangnr/JNKeychain – jere