Хранение электронной почты в связке ключей невозможно (KeychainItemWrapper)

Я использую 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 ответа

Решение

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

[keychainWrapper setObject:@"Myappstring" forKey: (id)kSecAttrService];

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

keychainWrapper.setObject(kSecAttrAccessibleAlways, forKey: kSecAttrAccessible)

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

Более подробная информация здесь: http://b2cloud.com.au/tutorial/using-the-keychain-to-store-passwords-on-ios/

Другие вопросы по тегам