iOS应用安装失败原因排查

iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面我们将一些常见原因总结如下,方便开发者进行排查。

 

原因一:在导出 iOS APP 的安装包文件时,选择了Ad Hoc 方式,但没有添加设备 UDID

在导出 iOS 的安装包文件时,如果选择了 Ad Hoc 方式(一般用于苹果个人开发者账户),那么,如果要某台设备可以安装,则必须要将这台设备的 UDID 添加到导出安装包时所用的证书文件中(. mobileprovision 文件),才可以在这台设备上安装。使用 Ad Hoc 方式导出的安装包文件上传到Pre.im 后,Pre.im会显示为“内测版”。

 

原因二:在导出 iOS APP 的安装包文件(.ipa 文件)时,选择了 In-house 方式,但是证书已过期。

在导出 iOS 的安装包文件时,如果选择了 In-house 方式(一般用于苹果企业开发者账户),此时,如果出现无法安装的情况,开发者可以检查一下自己的企业开发者证书是否已过期。因为苹果对于企业开发者证书管理较为严格,所以开发者如果使用不当,可能会导致企业证书被封,被封后的企业证书导出的安装包,也是无法正确安装的。

 

原因三:开发者在生成APP安装包时,没有在 Xcode 中设置正确的 Architecture

iOS 应用的 Architecture(架构),决定了这款 iOS 应用可以在哪些设备机型上安装。例如,如果某个应用在 Xcode 中只添加了 arm64 这一种 Architecture,那么最终打包后的安装包文件上传到 Pre.im后,对于 iPad miniiPhone5 等以下设备,都是无法安装的(因为这些设备都不是 arm64 架构)。换句话说,如果需要在某个设备上可以安装,APP 就必须支持那个设备的 Architecture。所以,正确的解决方法是,在生成 APP 安装包时,让 APP 支持更多的 Architecture 。具体操作方法是:在 Xcode - Build Settings - Architecture 中,增加 armv7 armv7sarm64等,以便所有设备都可以安装。然后,将 "Build active architecture only" 设置为 NO。对于各个 iOS 设备支持的 Architecture 类型。请 点击这里查看。

 

原因四:APP 支持的 iOS 系统版本,和当前设备系统版本不符。

APP 支持的 iOS 系统版本过低或者过高,都可能导致 APP 无法安装成功。例如,如果某个 APP 设置了只支持 iOS 7.0 以上的系统时,那么,如果在 iOS 6.1 系统上安装时,肯定是无法安装成功。因此,解决的方法也很简单,我们应该尽量让 APP 尽可能支持更宽泛的系统版本。具体操作方式是:在 Xcode - General - Deployment Info - Deployment Target 中,给 APP 设置一个尽量低的版本,例如 iOS 5.0

 

原因五:打包操作出现问题

开发者上传的是一个破解的 ipa 安装包,或者是一个使用破解 Xcode 方式打包生成的 ipa 安装包,或者是通过 iTunes 生成的 ipa 安装包。通过任何非 Xcode (或 Xcode 的命令行工具)生成的安装包,都是没有办法正确在设备上安装的(越狱设备除外)。常见的不正确的打包 ipa 的方式有:通过 iTunes 导出安装包文件、通过 iTools 导出安装包文件等等。这种类型的 APP 上传到Pre.im 后,会显示“未签名”。正确的方法是,使用一个正常的苹果开发者证书,通过未破解的 Xcode 打包生成 ipa 安装包。

 

原因六:设备上已存在不同签名的相同APP

设备上已经安装了这个APP,且已经安装的 APP 和要安装的 APP 是用不同证书打包的。这种情况下,也会造成 APP 安装失败。解决的方式很简单,只需将设备上原来已经安装的APP删除,再重新安装新的APP 即可。

 

原因七:Info.plist 文件中的LSRequiresIPhoneOS 没有设置,或者设置了NO

对于 iOS APP 来说,如果Info.plist 文件中的LSRequiresIPhoneOS 没有设置,或者设置了 NO,那么由 Xcode 导出的安装包(.ipa 包),就不会包含 Payload 文件夹,而是被一个叫做 APPlications 的文件夹代替。这样的安装包在安装时,会被 iOS 判定为无效的安装包,所以无法被正确安装。解决方式也很简单,只需要将Info.plist 文件中的LSRequiresIPhoneOS 设置为 YES,然后重新打包即可。具体操作为:在 Xcode 中打开 Info.plist 文件,然后检查 APPlication requires iPhone environment 是否已设置,如果没有设置,就添加一个,然后将 APPlication requires iPhone environment 的类型设置为 Boolean ,值设置为 YES