Хранение ключей в KeyChain с KeyChainItemWrapper - PullRequest
15 голосов
/ 19 августа 2011

Я использую класс KeyChainItemWrapper, предоставленный примером кода Apple, для сохранения токена аутентификации в цепочке ключей.

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier"JetTaxiApp_AuthToken" accessGroup:nil];  

Но когда я пытаюсь установить значение для цепочки для ключей, возникает странное исключение

[_authenticationTokenKeychain setObject:authenticationToken forKey: @"auth_token"];

Завершение приложения из-за необработанного исключения NSInternalInconsistencyException, причина: «Не удалось добавить цепочку для ключей Пункт ".

Брелок еще не существует (на момент этого вызова) Что может вызвать это исключение?

Ответы [ 2 ]

33 голосов
/ 23 января 2012

Вам нужно использовать стандартные ключи, поэтому здесь ваш @"auth_token" неверен.

Ключи, которые можно использовать для этой цели, и возможные значения для каждого ключа перечислены в разделе «Константы служб цепочки для ключей».

источник со списком допустимых констант: Справочник по связке ключей

Например, вы можете использовать:

[_ authenticationTokenKeychain setObject: authenticationToken forKey: (__bridge NSString *) kSecValueData];

0 голосов
/ 25 мая 2015
[_authenticationTokenKeychain setObject:authenticationToken forKey: @"auth_token"];  

Для приведенного выше фрагмента кода параметр ключа может использовать только ключи, предоставленные SDK.Вы можете найти все в SecItem.h

...