【发布时间】:2014-07-22 14:37:47
【问题描述】:
我正在尝试将数据写入 iCloud 钥匙串并让它在使用相同 Apple ID 的设备之间复制。
如果我安装一个应用程序并调用以下代码,写入一个条目,然后读取,我会看到正在读回的数据以登录当前设备。
但是,如果我使用相同的 Apple ID 在另一台设备上安装相同的代码,并打开 iCloud/钥匙串,如果我尝试从该设备上的钥匙串读取数据,我将看不到数据。
我尝试在功能中启用 icloud 和钥匙串共享,但无济于事。
有人能指出我正确的方向吗?
-(void)writekc{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"AppName" accessGroup:nil];
[keychainItem setObject:@"password" forKey:(__bridge id)(kSecValueData)];
[keychainItem setObject:@"username" forKey:(__bridge id)(kSecAttrAccount)];
}
-(void)readkc{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"AppName" accessGroup:nil];
NSString *password = [keychainItem objectForKey:(__bridge id)(kSecValueData)];
NSString *username = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
NSLog(@"Password:%@, User:%@",password,username);
}
【问题讨论】:
-
您需要确保您调用的包装代码将 kSecAttrSynchronizable true 添加到传递给 secItem 调用的字典中
-
@Paulw11 我刚刚添加了 [keychainItem setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)(kSecAttrSynchronizable)];到上面写代码,但是得到一个断言错误。
-
使用 (__bridge id)(kSecAttrSynchronizableAny
标签: ios synchronization icloud keychain keychainitemwrapper