55

我正在描述一个我花了很长时间才知道答案的问题。

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

然而,在我的应用程序中实现这个产生了一个模糊的错误代码(它需要很长时间才能找到)-25243,这意味着:没有访问控制。

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

Apple 的文档是否未能提供实现这一目标的必要条件?

4

2 回答 2

53

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

现在我看到“ keychain-access-groups ”似乎几乎很明显。然而,我什至不知道去看那里。希望这对其他人有帮助。

于 2010-11-15T21:49:24.383 回答
14

其实做起来也不难。请按照步骤操作。

应用程序1:

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

    [UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"];
    

应用 2:

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

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

  • 我在真正的iPhone 设备上尝试了这些步骤。
  • 我还使用AutomaticiOs Development配置文件尝试了这些步骤。
  • 我的应用程序包标识符是这样的:com.example.app1、com.example.app2。
于 2015-05-08T06:11:31.000 回答