Я потратил много дней на борьбу с той же проблемой.Наконец, я нашел причину того, что я прохожу слишком легко.
Это важная константа цепочки для ключей.Посмотрите на коды.(Предполагая, что я использовал цепочку для ключей в моей цели впервые)
KeychainItemWrapper *test1 = [[KeychainItemWrapper alloc] initWithIdentifier:@"test10" accessGroup:nil];
[test1 setObject:(id)@"value1" forKey:(id)kSecValueData];
//Normally it works
KeychainItemWrapper *test2 = [[KeychainItemWrapper alloc] initWithIdentifier:@"test20" accessGroup:nil];
//At this point , we meet the crash with the message of 'Couldn't add the Keychain Item.'
[test2 setObject:(id)@"value2" forKey:(id)kSecValueData];
Даже если имя 'initWithIdentifier' отличается, константа 'kSecAttrAccount' должна быть уникальной.Его значение по умолчанию - "" (пусто).Как только обертка цепочки для ключей используется, 'kSecAttrAccount' сохраняется.Поэтому вам нужно уделять большое внимание kSecAttrAccount, когда вы используете другой initWithIdentifier.
Я могу исправить сбой вышеуказанных кодов, добавив некоторые коды.
KeychainItemWrapper *test1 = [[KeychainItemWrapper alloc] initWithIdentifier:@"test10" accessGroup:nil];
[test1 setObject:@"test1" forKey:(id)kSecAttrAccount];
[test1 setObject:(id)@"value1" forKey:(id)kSecValueData];
KeychainItemWrapper *test2 = [[KeychainItemWrapper alloc] initWithIdentifier:@"test20" accessGroup:nil];
[test2 setObject:@"test2" forKey:(id)kSecAttrAccount];
[test2 setObject:(id)@"value2" forKey:(id)kSecValueData];
ДляДля получения дополнительной информации, если вы используете группу доступа KeychainItemWrapper, как я упоминал выше, kSecAttrAccount должен быть уникальным независимо от того, используется ли accessGroup или нет.
Ниже приведен пример.
KeychainItemWrapper *test = [[KeychainItemWrapper alloc] initWithIdentifier:@"test" accessGroup:"App_ID.SampleName"];
Каквы знаете, App_ID должен быть создан у разработчика Apple, а SampleName должен быть настроен на возможности KeyChain Sharing цели вашего приложения."."между App_ID и SampleName необходимо добавить.Это ключевой момент.
Пожалуйста, обратитесь к публикациям других людей о том, как его установить.