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

Posted

技术标签:

【中文标题】为啥使用开发或企业证书签名的 iOS 应用启动速度较慢?【英文标题】:Why iOS apps signed with development or enterprise certificates launch slower?为什么使用开发或企业证书签名的 iOS 应用启动速度较慢? 【发布时间】:2015-04-12 12:08:36 【问题描述】:

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

这是一个尴尬的 4 秒,其中应用程序的图标在被点击后仍然变暗并且主屏幕冻结(甚至无法向右/向左滚动)。

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

问题是:

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

我在 iPhone 5 上使用 ios 8.3 对此进行了测试

【问题讨论】:

我也注意到了这一点,但还不到 4 秒。也许归档雷达会有所帮助。 当您为分发而不是为开发而编译时,使用了更多的编译时优化,但由于这种延迟在开发和企业部署中都可以注意到,因此这不太可能是原因。跨度> 我遇到了同样的问题。没有意识到这是因为 Enterprise(起初,我认为设备可能有故障或对于最新的操作系统来说太旧了)。我尝试构建最简单的应用程序(单一视图),然后完全删除情节提要(无视图),然后编辑方案以在“发布”配置中运行(而不是“调试”),但无济于事。我很高兴找到了这个问题(即使还没有明确的答案)。 【参考方案1】:

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

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


TL;DR:

因此,我只是将我的设备重置为出厂设置(“删除所有设置和数据”),现在我的应用程序立即启动(iPad Air)和几乎立即启动(iPod Touch 第 5 代) .

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

    目标/一般/身份

    捆绑标识符:com.MyCompanyName.AppName

    团队:

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

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

    代码签名身份:iOS 开发人员

    配置文件:自动

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

附录: 在互联网上搜索“Xcode 指定团队原因”在设置 Xcode 团队时得到了this documentation page by Apple。 希望能帮助到你。


更新:仍与 Xcode 7.x 相同

【讨论】:

附带说明:在 iPad 上,我的启动时间从 4 多秒变为“与工厂应用程序一样快”(Safari 等)。此外,在调试时经常发生超时/启动失败/跳板崩溃问题,但不知不觉地消失了。在较旧的 iPod touch 上,启动我的应用程序仍需要大约半秒时间。 我似乎无法在 Xcode 6.4 的“设备”窗口中找到配置文件列表。 右键单击列表中的设备行(左窗格),然后右键单击(或者,单击底部的齿轮按钮)。然后选择“显示配置文件”。 (如果您的 Mac 设置为单键鼠标,请按住 ctrl 单击而不是右键单击) 我抹掉了我的手机,但是那些配置文件神奇地回来了——尽管我没有在上面运行任何开发应用程序,也没有从备份中恢复。我确实登录了 iCloud 并将其插入 iTunes 以创建新的备份。任何提示如何防止这些配置文件回来?【参考方案2】:

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

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

【讨论】:

这也为我修复了它。注意设备上的“右键单击”。我花了一分钟才弄清楚在哪里可以找到 Show Provisioning Profiles 它对我有用,但我怀疑重复的配置文件如何影响我的应用程序启动时间?因为应用程序是使用当前配置文件签名的,应该只检查这个配置文件而不是其他重复的配置文件。我很困惑关于它的影响。【参考方案3】:

可能是设备正在根据Certificate Revocation List 检查非应用商店构建吗?那个名单是possibly online?

如果后者是真的,那么您可以通过启用Airplane Mode 来加快启动速度。

【讨论】:

飞行模式下仍然存在延迟。 这是我的最佳猜测。每次都会检查签名似乎很奇怪。您可以尝试定时更大的二进制启动时间... 我的设备没有蜂窝连接(iPad、iPod Touch),也没有连接到任何 WiFi 网络,所以一切都是离线进行的。我尝试从我的 Mac 创建一个 WiFi 网络并共享它。现在他们的设备有 WiFi,但仍然需要大约 4 秒才能启动(没有变化)。飞行模式在这里也不起作用。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

连苹果都说 (Certificate validation)

“OCSP 响应在 OCSP 服务器指定的时间段内缓存在设备上 - 目前为 3 到 7 天。”

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

【讨论】:

以上是关于为啥使用开发或企业证书签名的 iOS 应用启动速度较慢?的主要内容,如果未能解决你的问题,请参考以下文章

企业为啥不能使用自签名SSL证书?

ios签名原理详解

iOS苹果企业签名为什么会掉?

企业分发签名 - 谁做它,为啥?

临时和企业签名的应用程序在 iOS 13.3.1 的启动屏幕上崩溃

如何保护 iOS p12 分发证书?