如何在iOS应用程序之间共享钥匙串数据

时间:2010-11-06 23:36:37

标签: iphone ipad ios4 shared keychain

我正在描述一个问题,我花了很长时间才得到答案。

GenericKeychain”示例是在init中使用accessGroup时提供在应用程序之间共享钥匙串数据的包装器的良好开端。

然而,在我的应用程序中实现这一点产生了一个模糊的错误代码(永远定位)-25243,这意味着:没有访问控制。

我在iPad上运行Apple的示例应用程序(GenericKeychain)只是为了得到同样的错误。咦?

Apple的文档是否无法实现完成此任务所需的内容?

2 个答案:

答案 0 :(得分:52)

经过一些(很多)挖掘整个网络后,我找到了答案。在构造KeychainItemWrapper类时使用的访问组也必须在“keychain-access-groups”部分的每个应用程序的Entitlements.plist文件中指定。

现在我看到“ keychain-access-groups ”似乎很明显。但是,我甚至不想看那里。希望这有助于其他人。

答案 1 :(得分:14)

实际上并不难做到。请按照步骤进行操作。

App1的:

  1. 打开您应用的目标功能并启用KeyChain Sharing。
  2. 添加标识符。 (例如:com.example.sharedaccess)
  3. 将“UICKeyChainStore”添加到您的项目中。
  4. 请确保您的App1项目已添加了团队ID。
  5. 将Security.framework添加到App1项目中。
  6. 并将这些代码添加到您需要的地方。

    [UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"];
    
  7. App2的:

    • 打开您应用的目标功能并启用KeyChain Sharing。
    • 添加标识符。 (例如:com.example.sharedaccess)
    • 将“UICKeyChainStore”添加到您的项目中。
    • 请确保您的App2项目已添加了团队ID。
    • 将Security.framework添加到App2项目中。
    • 并将这些代码添加到您需要的地方。

      NSString *string = [UICKeyChainStore stringForKey:@"someKey" service:@"someService"];
      
    • 两个项目的 TeamIDs 应相同。

    • 我在真正的 iPhone设备上尝试了这些步骤。
    • 我还尝试使用自动 iOs开发配置文件进行这些步骤。
    • 我的应用的包标识符是这样的:com.example.app1,com.example.app2。