Хранение электронной почты в связке ключей невозможно (KeychainItemWrapper) - PullRequest
18 голосов
/ 27 марта 2012

Я использую ARCified версию KeychainItemWrapper, доступную по адресу github , и я не могу заставить ее хранить как электронную почту, так и пароль.

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"myApp" accessGroup:@"MY_APP.com.yourcompany.GenericKeychainSuite"];
    [keychainItem setObject:[self.email dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount];
    [keychainItem setObject:self.password forKey:(__bridge id)kSecValueData];    

Я отлично работаю, покакогда я храню электронную почту ... на которой нет знака (@).В противном случае я получаю ошибку

*** Assertion failure in -[KeychainItemWrapper writeToKeychain]
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'

, которая исходит из этих строк

result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL);
NSAssert( result == noErr, @"Couldn't add the Keychain Item." );

Есть ли у вас какие-либо идеи о том, что здесь может пойти не так?

Спасибо

Ответы [ 2 ]

37 голосов
/ 27 марта 2012

Ну, я только что нашел ответ, следуя совету на этой странице iOS KeychainItemWrapper не обновляет , то есть добавить

[keychainWrapper setObject:@"Myappstring" forKey: (id)kSecAttrService];
1 голос
/ 19 мая 2016

Я знаю, это старый вопрос, но это происходило со мной, и вышеупомянутые ответы не решили мою проблему. В моем случае я получал доступ к связке ключей, когда телефон был заблокирован. Наконец-то я решил эту проблему, используя это сразу после инициализации цепочки для ключей.

keychainWrapper.setObject(kSecAttrAccessibleAlways, forKey: kSecAttrAccessible)

По умолчанию кажется, что брелок не позволяет вам получить к нему доступ, если ваш телефон не разблокирован.

Подробнее здесь: http://b2cloud.com.au/tutorial/using-the-keychain-to-store-passwords-on-ios/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...