【问题标题】:iOS storing data in keychain for use across devicesiOS 将数据存储在钥匙串中以供跨设备使用
【发布时间】: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


【解决方案1】:

最后我使用了内置同步功能的 SSKeyChain。

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2014-08-09
    相关资源
    最近更新 更多