I want to save two passwords (one app pin and one backend pin) in my keychain and am wondering how this should work.
I am using the KeychainItemWrapper with to different identifiers.
KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil];
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil];
and I am using either one to save and retrive the app or the backend pin.
I use :
[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData]
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData]
But it doesn't work - result is -25299 - The specified item already exists in the keychain
So how can I save multiple passwords in my keychain?
Okay I think I know what the problem is!
KeychainItemWrapper uses the identifier for the kSecAttrGeneric.
But this is not the one to distinguish entries. If you want to save two accounts or two passwords in
kSecValueData
this will result in an arror (-25299) for duplicate entires.
The reason is, that the apple keychain api uses
kSecAttrAccount
and
kSecAttrService
to distinguish entries.
So you can modify the keychainItemWraper if you want like shown in this thread
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With