我们有一个正在为客户编写的应用程序。我们编译应用程序并将 IPA 交付给客户,然后客户使用他们的配置文件和 key 退出应用程序。
在客户退出之前,该应用程序运行良好。然后在访问钥匙串(keychain)时失败。我们在设备控制台中收到这样的消息:
... SecItemAdd: missing entitlement
... SecItemCopyMatching: missing entitlement
记录返回代码,我们从所有 SecItem* 调用中得到 -25308“不允许与安全服务器交互”。
我没能找到有同样问题和解决方案的人。
初始构建和后续代码签名都有效,应用程序一直运行,直到它尝试访问钥匙串(keychain)。辞职时,客户指定的应用程序 ID 与我们最初构建它时使用的应用程序 ID 相同。我也添加了权利文件。
我注意到客户使用的配置文件中使用的应用 ID 与应用中的 ID 不同。然而,辞职工作和应用程序运行,所以我假设在这一点上这不是问题。
到目前为止还没有运气。
有没有人遇到过这个问题并解决了?
最佳答案
感谢@borrrden 的回复。他们给了我一些很好的建议。
我最终得到了所有的工作。这是我发现的。
通配符 id 没问题。我在使用通配符 ID 和访问钥匙串(keychain)时没有遇到任何问题。
问题是 XCode 根据它在编译时知道的 ID 动态创建了一组权利。当发生辞职时,供应配置文件包含一个应用程序 ID,生成的权利不匹配。因此 iOS 不允许访问。
为了解决这个问题,我创建了一个授权文件,让客户将其指定为协同设计参数的一部分。此权利包含一个 key 链访问组,该组与配置文件中的新应用程序 ID 相匹配。我还必须将正确的团队 ID 添加到访问组的前面。通常 XCode 会自动插入它。
数据保护也与该问题无关。
关于iOS:已辞职的应用程序无法通过安全 API 访问钥匙串(keychain),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201823/