2012-03-25 11 views
15

Tengo un poco de código Mac que necesita almacenar, acceder y actualizar contraseñas para conectar a los usuarios con una API web. El lugar correcto para poner esta información debe ser el Mac Keychain, pero no parece haber una interfaz de cacao (ver this answer). ¿Sigue siendo así?Interfaz de cacao con llavero MacOS X

He mirado Keychain documentation de Apple, y la API parece increíblemente torpe. Puedo almacenarlo y recuperar registros, pero cualquier cosa más compleja parece requerir una gran cantidad de reflexión sobre qué podría salir mal (ver this list of error codes).

¿Hay una mejor interfaz para el llavero de Mac, aparte de cargar el código C? Lo más cercano que he venido es EMKeychain pero parece que necesita un poco de trabajo (por ejemplo, ningún código de manejo de errores aparte de escupir a la consola).

Respuesta

10

Deberías echar un vistazo a SSKeychain. Funciona genial, código increíble.

+0

Esto podría funcionar, aunque he estado pensando que la contraseña de Internet parece un poco mejor para mi configuración que el sistema de contraseña genérico. Creo que podría codificar la URL en el "servicio" que SSKeychain usa como identificador. Si no hay nada mejor para mis propósitos, al menos este es un punto de partida si quiero armar un sistema alrededor de las contraseñas de internet. – Noah

0

Demasiada respuesta tardía pero sería útil para futuras consultas. A continuación es lo que hice para guardar la contraseña en el llavero de Mac

#pragma -mark Password save in Keychain 

-(NSURLProtectionSpace *)createProtectionSpaceForBasicAuthentication{ 

    NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] 
              initWithHost:@"http://yourURLHere" 
              port:1804 //add Your port here 
              protocol:@"http" //can be pass as nil 
              realm:nil 
              authenticationMethod:NSURLAuthenticationMethodHTTPBasic]; 
    return protectionSpace; 
} 

-(void)createCredentialForUsername:(NSString *)username Password:(NSString *)password{ 

    NSURLCredential *credentialObject; 
    credentialObject = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent]; 
    [[NSURLCredentialStorage sharedCredentialStorage] setCredential:credentialObject forProtectionSpace:[self createProtectionSpaceForBasicAuthentication]]; 
} 

Para guardar la contraseña

- (IBAction)saveButtonClicked:(id)sender { 
    [self createCredentialForUsername:@"User_Name" Password:@"Your_Pass"]; 
} 

para ir a buscar la contraseña

NSURLCredential *credential; 
NSDictionary *credentials; 
credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:[self createProtectionSpaceForBasicAuthentication]]; 
credential = [credentials.objectEnumerator nextObject]; 
    NSLog(@"Username: %@ and password %@", credential.user, credential.password); 

Cuando ejecutamos la aplicación a buscar contraseña, obtendremos un indicador de acción del usuario para el acceso de llavero.

Cuestiones relacionadas