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

我正在描述一个问题,为此我花了相当长的时间来学习答案。

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

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

我在iPad上运行苹果的示例应用程序(GenericKeychain),以获得相同的错误。 咦?

苹果公司的文件没有提供完成这个任务的必要条件吗?

经过一些(很多)挖掘整个networking,我find了答案。 您在构buildKeychainItemWrapper类时使用的访问组还必须在“keychain-access-groups”部分的每个应用程序的Entitlements.plist文件中指定。

现在看来,我看到“ 钥匙串访问组 ”。 但是,我甚至不知道在那里看。 希望这可以帮助别人。

其实这并不难。 请按照步骤。

应用1:

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

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

应用2:

  • 打开您的应用程序的目标function并启用KeyChain共享。
  • 添加一个标识符。 (例如:com.example.sharedaccess)
  • 添加“ UICKeyChainStore ”到您的项目。
  • 确保你有一个团队ID添加到你的App2项目。
  • 将Security.framework添加到您的App2项目。
  • 并将这些代码添加到您需要的地方。

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

  • 我在真正的iPhone设备上尝试了这些步骤。
  • 我还尝试了自动iOs开发configuration文件的这些步骤。
  • 我的应用程序捆绑标识符是这样的:com.example.app1,com.example.app2。