2012-06-15 16 views
5

Quiero guardar dos contraseñas (un pin de aplicación y un pin de backend) en mi llavero y me pregunto cómo debería funcionar.
Estoy usando KeychainItemWrapper con diferentes identificadores.iOS guarde varias contraseñas en el llavero

KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil]; 
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil]; 

y estoy usando cualquiera para guardar y recuperar la aplicación o el pin de fondo.

que utilizo:

[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData] 
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData] 

Pero no funciona - resultado es -25299 - El elemento especificado ya existe en el llavero

Entonces, ¿cómo puedo guardar múltiples contraseñas en mis llaves?

+0

'[[KeychainItemWrapper alloc] accessGroup ID1: nil];' <== ¿cómo afecta esto incluso compilar? –

+0

Lo sentimos, pero no fue hecho por copiar y pegar, ¡pero no lo recuerdo! Hice la edición ... – Alexander

Respuesta

8

Bien, creo que sé cuál es el problema. KeychainItemWrapper usa el identificador para kSecAttrGeneric.
Pero este no es el único para distinguir las entradas. Si desea guardar dos cuentas o dos contraseñas en

kSecValueData

esto se traducirá en un arror (-25.299) para entires duplicados.
La razón es, que la API llavero Apple utiliza

kSecAttrAccount

y

kSecAttrService

distinguir las entradas.
para que pueda modificar el keychainItemWraper si quieres Al igual que se muestra en este thread

+1

He encontrado que KeychainItemWrapper tiene varios agujeros pequeños como este. Después de usarlo y modificarlo para múltiples proyectos, creé un envoltorio mucho más simple para acceder al llavero https://github.com/reidmain/FDKeychain –

Cuestiones relacionadas