iOS:已退出的应用无法通过安全API访问钥匙串

dre*_*kka 4 code-signing keychain ios

我们正在为客户撰写应用程序.我们编译应用程序并向客户提供IPA,然后客户使用其配置文件和密钥重新授予应用程序.

该应用程序正常工作,直到客户辞职.然后在访问钥匙串时失败.我们在设备控制台中收到消息,如下所示:

... SecItemAdd: missing entitlement
... SecItemCopyMatching: missing entitlement
Run Code Online (Sandbox Code Playgroud)

记录我们收到的返回码-25308"所有SecItem*调用中都不允许与安全管理服务器进行交互".

我找不到任何有同样问题和解决方案的人.

初始构建和后续代码签名都有效,应用程序一直运行,直到它尝试访问钥匙串.在辞职时,客户指定了我们最初使用的相同应用ID.我也添加了和权利文件.

我注意到客户使用的配置文件中使用的应用程序ID与应用程序中的ID不同.然而,辞职的工作和应用程序运行所以我在这一点上假设它不是一个问题.

到目前为止没有运气.

有人有这个问题并解决了吗?

dre*_*kka 6

感谢@borrrden的回复.他们给了我一些好的指示.

我最终把它全部搞定了.这是我发现的.

  1. 通配符ids很好.我使用外卡ID并访问钥匙串没有问题.

  2. 问题是XCode根据它在编译时知道的id动态创建一组权利.发生重新签名时,配置文件包含一个应用程序ID,生成的权利不匹配.因此iOS不允许访问.

  3. 为了解决这个问题,我创建了一个权利文件,我让客户端指定为codesign参数的一部分.此权利包含与配置文件中的新应用程序ID匹配的密钥链访问组.我还必须在访问组的前面添加正确的团队ID.通常XCode会自动插入.

  4. 数据保护也与此问题无关.