NSURLCredential é a classe perfeita para armazenar nome de usuário e senha nas chaves . Não há necessidade de se preocupar com NSUserDefaults nem com qualquer wrapper de chaveiro.
Depois que o usuário estiver conectado, você pode armazenar seu nome de usuário e senha nas chaves:
NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
Conforme declarado no Apple Doc , NSURLCredentialPersistencePermanent
deve ser usado para armazenar no chaveiro.
Então, cada vez que o aplicativo for iniciado, você pode verificar se o seu usuário já estava logado, procurando por qualquer credencial, a fim de fazer o login automaticamente de volta (se necessário):
NSURLCredential *credential;
NSDictionary *credentials;
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace];
credential = [credentials.objectEnumerator nextObject];
NSLog(@"User %@ already connected with password %@", credential.user, credential.password);
Você também precisa limpar a credencial quando o usuário deseja fazer logout:
NSURLCredential *credential;
NSDictionary *credentials;
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace];
credential = [credentials.objectEnumerator nextObject];
[[NSURLCredentialStorage sharedCredentialStorage] removeCredential:obj forProtectionSpace:self.loginProtectionSpace];
loginProtectionSpace
é criado de uma vez por todas.
Observe que este código de amostra assume que há apenas uma credencial neste espaço, o que geralmente é o caso, a menos que você gerencie várias contas.