2012-06-15 17 views
5

Desidero salvare due password (un pin di app e un pin back-end) nel mio portachiavi e mi chiedo come dovrebbe funzionare.
Sto usando KeychainItemWrapper con identificatori diversi.iOS salva più password nel portachiavi

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

e sto usando uno dei due per salvare e riattivare l'app o il pin back-end.

io uso:

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

Ma non funziona - risultato è -25.299 - L'elemento specificato esiste già nel portachiavi

Così come posso salvare più le password nel mio portachiavi?

+0

'[[KeychainItemWrapper alloc] id1 AccessGroup: nil];' <== come fa questo anche compilare? –

+0

Mi spiace, post sprecato non fatto da copia e incolla ma fuori di testa! Ho fatto il montaggio ... – Alexander

risposta

8

Okay, penso di sapere qual è il problema! KeychainItemWrapper utilizza l'identificatore per kSecAttrGeneric.
Ma questo non è quello che distingue le voci. Se si desidera salvare due account o due password in

kSecValueData

questo si tradurrà in un arror (-25.299) per interi duplicati.
La ragione è, che l'API portachiavi Apple utilizza

kSecAttrAccount

e

kSecAttrService

per distinguere le voci.
in modo da poter modificare la keychainItemWraper se si desidera amano mostrato in questo thread

+1

Ho trovato che il KeychainItemWrapper ha vari piccoli fori come questo. Dopo averlo utilizzato e modificato per più progetti, ho creato un involucro molto più semplice per accedere al Portachiavi https://github.com/reidmain/FDKeychain –

Problemi correlati