Я использую ARCified KeychainItemWrapper
и не удается перенести данные в один элемент связки ключей на другой элемент. В основном я пытаюсь скопировать содержимое из определенного приложения в общий элемент. Для краткости я только указал имя пользователя, так как оно не работает.KeychainItemWrapper migrating data throws error
KeychainItemWrapper *legacyKeychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"mainLogin" accessGroup:@"C35BXHSRSA.com.foo.bar"];
NSString *legacyUser = [legacyKeychainItem objectForKey:(__bridge id)kSecAttrAccount];
self.migratedKeychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"security" accessGroup:@"C35BXHSRSA.com.foo.security"];
// dies here
[self.migratedKeychainItem setObject:legacyUser forKey:(__bridge id)kSecAttrAccount];
Он умирает в KeychainItemWrapper
методе writeToKeychain
бросание NSAssert(result == noErr, @"Couldn't update the Keychain Item.");
Глядя ошибку в Keychain Services Reference говорит мне
errSecDuplicateItem -25299 Пункт уже существует.
Я могу подтвердить эту проблему путем жесткого кодирования/изменения строки, и код работает отлично, но я пытаюсь перенести данные ... так что одинаково важно. Вопрос в том, почему это бросает ошибку, когда это два разных элемента keychain и как, черт возьми, я могу заставить его работать по своему желанию?
Поскольку KeyChainItemWrapper не является классом из SDK iOS, можно только предположить, что вы, возможно, ссылались на [dhoerl/KeychainItemWrapper] (https://gist.github.com/dhoerl/1170641). – Till
Это правильно. Исходная версия является частью примера кода Apple для Keychain Services. Затем кто-то сделал версию ARC'd, поэтому нам не нужно добавлять флаги complier каждый раз. – DBD
Не так сложно исключить один файл из ARC –