iOS сохраняет несколько паролей в связке ключей

Я хочу сохранить два пароля (один пин-код приложения и один пин-код бэкенда) в своей связке ключей, и мне интересно, как это должно работать.
Я использую KeychainItemWrapper с разными идентификаторами.

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

и я использую либо один из них для сохранения и извлечения приложения, либо пин-кода бэкэнда.

Я использую :

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

Но не работает - результат -25299 - Указанный элемент уже существует в связке ключей

Итак, как я могу сохранить несколько паролей в своей связке ключей?


person Alexander    schedule 15.06.2012    source источник
comment
[[KeychainItemWrapper alloc] id1 accessGroup:nil]; ‹== как это вообще компилируется?   -  person    schedule 15.06.2012
comment
Извините, пост был сделан не методом копирования и вставки, а из моей головы! я редактировал...   -  person Alexander    schedule 15.06.2012


Ответы (1)


Ладно, кажется, я знаю, в чем проблема! KeychainItemWrapper использует идентификатор для kSecAttrGeneric.
Но это не то, что позволяет различать записи. Если вы хотите сохранить две учетные записи или два пароля в

kSecValueData

это приведет к ошибке (-25299) для повторяющихся целых.
Причина в том, что API связки ключей Apple использует

ксекаттраккаунт

и

ксекаттрсервице

чтобы различать записи.
Таким образом, вы можете изменить keychainItemWraper, если хотите, как показано в этом поток

person Alexander    schedule 15.06.2012
comment
Я обнаружил, что KeychainItemWrapper имеет различные маленькие отверстия, подобные этой. После его использования и изменения для нескольких проектов я создал гораздо более простую оболочку для доступа к цепочке ключей github.com/reidmain/FDKeychain - person Reid Main; 25.07.2013