4

我们有一个正在为客户编写的应用程序。我们编译应用程序并向客户提供 IPA,然后客户使用他们的配置文件和密钥退出应用程序。

该应用程序运行良好,直到客户辞职。然后在访问钥匙串时失败。我们在设备控制台中收到如下消息:

... SecItemAdd: missing entitlement
... SecItemCopyMatching: missing entitlement

记录我们从所有 SecItem* 调用中得到 -25308“不允许与安全服务器交互”的返回代码。

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

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

我注意到客户正在使用的配置文件中使用的应用程序 ID 与应用程序中的 ID 不同。但是,辞职有效并且应用程序运行,所以我假设此时这不是问题。

到目前为止还没有运气。

有没有人遇到过这个问题并解决了?

4

1 回答 1

6

感谢@borrrden 的回复。他们给了我一些很好的指导。

我最终让一切正常了。这是我发现的。

  1. 通配符 id 很好。我使用通配符 ID 和访问钥匙串没有问题。

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

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

  4. 数据保护也与这个问题无关。

于 2013-08-16T06:04:26.767 回答