我正在使用 ARCifiedKeychainItemWrapper
并且无法将一个钥匙串项目中的数据迁移到另一个项目。基本上我正在尝试将内容从应用程序特定项目复制到共享项目。为简洁起见,我只输入了用户名,因为它在那里失败了。
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 项目已存在。
我可以通过硬编码/更改字符串来确认这个问题,并且代码运行良好,但我正在尝试迁移数据......所以相同很重要。问题是,为什么当它是 2 个不同的钥匙串项目时会引发错误,我到底如何让它按需要工作?