iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面将一些常见原因总结如下,方便开发者进行排查。
这样问题是因为在 iOS 9 以后的版本中,苹果对企业签名的应用做了更严格了限制。具体解决办法请见: 企业级证书打包下载安装之后无法使用问题
这个问题是因为 iOS 9 的一个 Bug 导致的。出现这个问题的前提,一般是由于用户已经从苹果官方 App Store 上安装了相同的应用。
【解决办法】
先在设备中删除之前已经安装的应用,然后再从托管平台
安装即可。
这是由于 iOS 9 中的一个 Bug 造成的。虽然看上去没有反应,其实应用已经在后台开始下载并安装了,状态栏上的网络图标在转就是一个证明。这个时候,只要多等待一会儿就好了,应用安装完成之后会在桌面上显示出来的。
在导出 iOS 的.ipa
文件时,有些开发者选择了App-Store
方式,这种方式导出的.ipa
文件,只适合于上传到苹果App Store
,并不能通过托管平台
来安装。如果是这种方式导出的 .ipa
文件,传到托管平台
上是不能通过安装的。
在导出 iOS 的安装包文件时,如果选择了Ad-hoc
方式(一般用于苹果个人开发者账户),那么,如果要某台设备可以安装,则必须要将这台设备的 UDID
添加到导出安装包时所用的证书文件中(.mobileprovision
文件),才可以在这台设备上安装。
使用 Ad-hoc
方式导出的安装包文件上传到托管平台
后,托管平台
会显示为内测版
,同时会在应用管理中,显示出该安装包的证书中包含的 UDID
列表。开发者可以根据显示出的UDID
列表,来排查某台设备的 UDID
有没有被添加到安装包的证书中。
在导出 iOS 的安装包文件时,如果选择了In-house
方式(一般用于苹果企业开发者账户),此时,如果出现无法安装的情况,开发者可以检查一下自己的企业开发者证书是否已过期或被撤销。因为苹果对于企业开发者证书管理较为严格,所以开发者如果使用不当,可能会导致企业证书被封,被封后的企业证书导出的安装包,也是无法正确安装的。
iOS 应用的 Architecture
(架构),决定了这款 iOS 应用可以在哪些设备机型上安装。例如,如果某个应用在 Xcode 中只添加了 arm64 这一种 Architecture
,那么最终打包后的安装包文件上传到托管平台
后,对于 iPad mini、iPhone5 等以下设备,都是无法安装的(因为这些设备都不是 arm64 架构)。换句话说,如果需要在某个设备上可以安装,App 就必须支持那个设备的 Architecture
。
所以,正确的解决方法是,在生成 App 安装包时,尽可能让 App 支持更多的 Architecture
。
具体操作方法是:在 Xcode
- Build Settings
- Architecture
中,增加 armv7、armv7s、arm64,以便所有设备都可以安装。然后,将 "Build active architecture only"
设置为NO。对于各个 iOS 设备支持的 Architecture
类型。请点击这里查看。
打包时 App 选择支持的 iOS 系统版本过低或者过高,都可能导致 App 无法安装成功。例如,如果某个 App 设置了只支持 iOS 7.0 以上的系统时,那么,如果在 iOS 6.1 系统上安装时,肯定是无法安装成功。
因此,我们应该尽量让 App 尽可能支持更宽泛的系统版本。
具体操作方式是:在Xcode
- General
- Deployment Info
- Deployment Target
中,给 App 设置一个尽量低的版本,例如 iOS 5.0。
通过任何非 Xcode(或 Xcode 的命令行工具)生成的安装包,都是没有办法正确在设备上安装的(越狱设备除外)。
常见的不正确的打包 ipa 的方式有:通过 iTunes 导出安装包文件
、通过 iTools 导出安装包文件
等等。这种类型的 App 上传到托管平台
后,会显示未签名
的标签提示。
【正确的方法】
使用一个正常的苹果开发者证书,通过未破解的 Xcode 打包生成 ipa 安装包。
这种情况下,也会造成 App 安装失败。解决的方式很简单,开发者只需将设备上原来已经安装的 App 删除,再重新安装新的 App 即可。
对于 iOS 的 App 来说,如果Info.plist
文件中的LSRequiresIPhoneOS
没有设置,或者设置了NO,那么由 Xcode 导出的安装包(.ipa
包),就不会包含Payload
文件夹,而是被一个叫做Applications
的文件夹代替。这样的安装包在安装时,会被 iOS 判定为无效的安装包,所以无法被正确安装。
【解决方式】
只需要将Info.plist
文件中的LSRequiresIPhoneOS
设置为YES,然后重新打包即可。具体操作为:在 Xcode 中打开Info.plist
文件,然后检查 LSRequiresIPhoneOS
是否已设置,如果没有设置,就添加一个,然后将LSRequiresIPhoneOS
的类型设置为Boolean,值设置为 YES。
设置好以后,可以看到Info.plist
文件中显示Application requires iPhone environment
的值为YES。
遇到这种情况,用户可检查自己手机的所连接的网络是否稳定、速度是否正常等。可以尝试一下其他网站,或者更换一个 Wi-Fi,或者由 Wi-Fi 换成 3G/4G 等,然后重新安装。