为什么 iOS 使用开发证书或企业证书签名的应用启动速度较慢?

Why iOS apps signed with development or enterprise certificates launch slower?

我不禁在 iPhone 5 上注意到,使用我的开发证书和我公司的企业分发证书签名的应用程序启动或激活大约需要 4 秒。这是从点击应用程序图标到看到启动图像所花费的时间——这显然不包括应用程序的初始化代码。

这是一个尴尬的 4 秒,应用程序的图标在被点击后保持灰色并且主屏幕冻结(甚至无法滚动 right/left)。

奇怪的是,从后台重新激活应用程序大约需要 相同的时间(即启动应用程序,等待它运行,按主页按钮,然后立即再次点击该应用程序的图标)。

问题是:

  • 这是什么原因造成的?
    • 我的直觉归咎于 Springboard 试图在每次点击应用程序图标时验证签名证书。但是我无法证明这一点。
  • 如何缩短启动冻结时间? (如果可能的话?)

我在 iPhone 5

上使用 iOS 8.3 测试了这个

可能是设备正在根据 Certificate Revocation List? And that list is possibly online 检查非应用商店构建?

如果是后者,那么您可以通过启用 Airplane Mode.

来加快启动速度

就我而言,我认为这是由于设备中安装了大量 不同的配置文件(出于某种原因,"Profiles" 条目在“设置”应用中不再可用...但它们显示在 Window / Devices / Show Provisioning Profiles... 中)。

理论上,您应该删除 Xcode 的 "Devices" window 中的所有配置文件。但是 - 至少在我的环境中从 Xcode 6 开始 - 这是非常无响应的(通过单击菜单按钮或点击 Delete 键)到几乎海滩的地步 -滚动,并且显示的列表本身有时似乎从设备的一次插入到下一次非常不一致(也许它被缓存了?Xcode 错误?)。


TL;DR:

因此,我只是将我的设备重置为出厂设置 ("Delete all settings and Data"),现在我的应用程序立即启动 (iPad Air) 并且几乎立即(第 5 代 iPod Touch)。

我相信(但这需要确认)所有这些配置文件首先安装在设备上的原因是,在目标 General/Identity 窗格我指定了 "Team"。现在,我有这些设置:

  1. 目标/一般/身份

    捆绑包标识符:com.MyCompanyName.AppName

    团队:None

(设置团队似乎会导致 Xcode 将开发人员门户中的所有配置文件安装到设备中...?)

  1. 目标/构建设置/代码签名

    代码签名身份:iOS 开发者

    配置文件:自动

...在 运行 上,只有我的一个配置文件(Xcode 管理的 "iOS Team Provisioning Profile" 之一)安装在设备上。

附录: 在互联网上搜索 "Xcode specify team why" 得到 this documentation page by Apple 设置 Xcode 团队。 希望能帮助到你。


更新: 与 Xcode 相同 7.x

删除您设备上所有重复的配置文件。您可以在 Xcode-> 设备中执行此操作,然后右键单击您的设备 "Show Provisioning Profiles..."。就我而言,我已经安装了 300 多个不同的配置文件。

再次部署后,我的应用程序立即启动,而不是每次等待 5-8 秒。

我的应用程序也有类似的问题。我正在使用 Parse 和 FBLogin。我尝试了此页面上的所有内容。然后我尝试关闭 Appdelegate 中的所有启动选项并删除 Assets.xcassets 文件夹,但无济于事。我终于备份了我的 info.plist 文件,并从我知道可以正常启动的应用程序中复制了一个 plist 文件。这解决了问题。 然后我返回并使用旧 plist 中的内容重新创建了 plist 文件。我意识到 App Transport Security Settings 和 LSApplicationQueriesSchemes 导致了这个问题。 该应用程序现在可以在没有这些条目的情况下正常运行,但如果需要,我稍后会添加它们。

我也有这个问题,但我的设备上没有重复的配置文件(ipad)。然后我发现 ocsp 导致启动延迟。

连 Apple 都说 (Certificate validation)

"The OCSP response is cached on the device for the period of time specified by the OCSP server — currently, between three and seven days. "

但是 OCSP 在几个小时后出现。