克魔助手
全部文章

IPA 为什么无法安装?

4 分钟阅读分发设备

将安装包装到测试设备上时,失败的原因大约有六种,而 iOS 对其中大多数只给出同一条笼统的提示。下面介绍如何快速区分它们。

先确认安装包的类型

签名类型 可安装到 说明
开发(Development) UDID 在描述文件中的设备 团队内部包的常见类型
Ad Hoc UDID 在描述文件中的设备,上限 100 台 面向更大范围的测试人员
企业(Enterprise) 任意设备,需信任证书 仅限内部分发
App Store 无法直接安装到任何设备 仅为商店分发签名

最后一行最容易让人困惑。App Store 签名的包始终无法侧载。如果有人把提交审核的包交给您,询问为什么装不上,原因就在于此。

原因一:设备不在描述文件中

症状: 立即失败,提示笼统的签名错误。

开发或 Ad Hoc 描述文件中嵌入了一份允许安装的设备 UDID 列表。设备不在列表中,安装尚未开始就会终止。

解决方法: 读取设备 UDID,在开发者后台将其添加到描述文件中,重新生成描述文件,然后重新打包。必须重新打包,因为描述文件嵌入在 IPA 中,在后台修改描述文件对已有的安装包没有任何影响。

原因二:描述文件已过期

症状: 与原因一完全相同,但整批设备在同一天全部失效。

开发描述文件会过期(通常为一年),证书也会过期。当整批测试设备同时无法安装时,基本可以确定是这个原因。

解决方法: 续期、重新打包、重新分发。区分「过期」与「UDID 问题」的依据是:过期会同时影响所有设备,包括昨天还正常的设备。

原因三:存储空间不足

症状: 开始安装后,中途失败。

安装过程需要同时容纳安装包和解包后的应用,因此一个 200 MB 的 IPA 需要的可用空间远不止 200 MB。在仅剩 1 GB 的设备上安装大型 App,结果会时好时坏。这比稳定失败更麻烦,因为它看起来像是一个间歇出现的签名问题。

解决方法: 在排查其他原因之前,先检查剩余空间。只需几秒,却可能节省一小时。

原因四:版本号回退

症状: 提示「已安装此应用的更新版本」。

iOS 不允许直接降级。如果设备上是 build 412,而您要安装 build 409,在删除旧版本之前无法安装。

解决方法: 先卸载。卸载前请导出所需的沙盒数据,因为卸载会同时删除这些数据。

原因五:开发者未受信任

症状: 安装成功但无法打开,弹窗提示开发者未受信任。

这实际上并不是安装失败。App 已在设备上,只是 iOS 不会运行由用户尚未信任的证书签名的代码。

解决方法: 在设备上进入 设置 → 通用 → VPN 与设备管理,找到该开发者并点击信任。每台设备的每个证书只需信任一次。

原因六:描述文件未包含所需能力

症状: 立即失败,错误信息中可能会提到 entitlements。

App 申请了某项能力(如推送、App Groups、HealthKit、关联域名),但描述文件中未包含。签名本身有效,但权限不匹配。

解决方法: 在 App ID 上启用该能力,重新生成描述文件,然后重新打包。

高效的排查顺序

  1. 剩余存储空间。 只需几秒,而且是很常见的原因。
  2. 设备 UDID 是否在描述文件中? 从设备上读取 UDID,不要依赖表格。
  3. 描述文件是否过期? 查看日期,并确认其他设备是否同时失效。
  4. 是否已安装更高版本? 卸载前先比较版本号。
  5. 是否已安装但无法打开? 这是信任问题,而非签名问题。
  6. 最后再检查 entitlements。

测试设备的日常维护

只要持续更新以下三项,上述大部分问题都不会再出现:一份与实体设备一致的 UDID 清单、一份各描述文件到期时间的记录,以及在设备加入或离开测试机队时检查已安装描述文件的习惯。每项只需五分钟,却能节省日后大量的排查时间。