iOS应用安装失败原因排查

作者: SuperDanny | 来源:发表于2016-02-26 11:08 被阅读28271次

    本文结合蒲公英以及FIR两家应用托管平台的博文进行整理

    前言

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

    在 iOS 9 中启动应用时,出现提示“未受信任的企业级开发者”

    这样问题是因为在 iOS 9 以后的版本中,苹果对企业签名的应用做了更严格了限制。具体解决办法请见: 企业级证书打包下载安装之后无法使用问题

    在 iOS 9 中点击“安装”按钮后,没有弹出“是否安装”的提示

    这个问题是因为 iOS 9 的一个 Bug 导致的。出现这个问题的前提,一般是由于用户已经从苹果官方 App Store 上安装了相同的应用。

    【解决办法】

    先在设备中删除之前已经安装的应用,然后再从托管平台安装即可。

    为什么在 iOS 9 中,点击“安装”按钮后,没有任何反应,桌面也没有出现应用图标,但是状态栏上的网络图标在转

    这是由于 iOS 9 中的一个 Bug 造成的。虽然看上去没有反应,其实应用已经在后台开始下载并安装了,状态栏上的网络图标在转就是一个证明。这个时候,只要多等待一会儿就好了,应用安装完成之后会在桌面上显示出来的。

    应用安装过程中提示"无法下载应用程序"

    原因一:在导出 iOS App 的安装包文件( .ipa 文件)时,选择了 App-Store 方式。

    在导出 iOS 的.ipa文件时,有些开发者选择了App-Store方式,这种方式导出的.ipa文件,只适合于上传到苹果App Store,并不能通过托管平台来安装。如果是这种方式导出的 .ipa文件,传到托管平台上是不能通过安装的。

    原因二:在导出 iOS App 的安装包文件( .ipa 文件)时,选择了 Ad-hoc 方式,但是没有添加设备 UDID 。

    在导出 iOS 的安装包文件时,如果选择了Ad-hoc方式(一般用于苹果个人开发者账户),那么,如果要某台设备可以安装,则必须要将这台设备的 UDID 添加到导出安装包时所用的证书文件中(.mobileprovision文件),才可以在这台设备上安装。

    使用 Ad-hoc 方式导出的安装包文件上传到托管平台后,托管平台会显示为内测版,同时会在应用管理中,显示出该安装包的证书中包含的 UDID 列表。开发者可以根据显示出的UDID列表,来排查某台设备的 UDID 有没有被添加到安装包的证书中。

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

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

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

    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 选择支持的 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 上传到托管平台后,会显示未签名的标签提示。

    【正确的方法】

    使用一个正常的苹果开发者证书,通过未破解的 Xcode 打包生成 ipa 安装包。

    原因七:设备上已经安装了这个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文件,然后检查 LSRequiresIPhoneOS是否已设置,如果没有设置,就添加一个,然后将LSRequiresIPhoneOS的类型设置为Boolean,值设置为 YES

    设置好以后,可以看到Info.plist文件中显示Application requires iPhone environment的值为YES

    原因九:网络出现中断或异常。

    遇到这种情况,用户可检查自己手机的所连接的网络是否稳定、速度是否正常等。可以尝试一下其他网站,或者更换一个 Wi-Fi,或者由 Wi-Fi 换成 3G/4G 等,然后重新安装。


    【托管平台】: 托管平台是指将APP发布于第三方平台上面,供用户安装测试。常见的托管平台有蒲公英以及FIR

    【App-Store】: App-Store版,用于发布到苹果商店

    【Ad-hoc】: 内测版,用于内部指定设备使用

    【In-house】: 企业版,可在任何设备上安装,但不能滥用


    再一次感谢您花费时间阅读这篇文章!

    微博: @Danny_吕昌辉
    博客: SuperDanny

    相关文章

      网友评论

      • d5d0afe2cd5c:谢谢楼主
      • Jenny_e668:请问大家有没有遇到过油的手机可以安装,有的手机不能安装的情况
      • Work_6395:1、基本就是证书的问题,
        2、还有就是用云打包,有时候可能由于网络等问题某些动态库没有打包进去,跟签名是没有任何关系的,建议大家还是用xcode开发
        3、还有搞不懂的可以专注我
      • 玉思盈蝶:10.3.3的5s安装不上企业级app是为啥呢?
      • d551c712efbe:想起来,原因七,用不同在证书签名,那么budle identifier是不一样的,应该就是不一样的APP(哪怕源码一样)= =所以应该是不存在无法安装的问题= =
        如果BU ID是一样的,不同的证书是指???
        d551c712efbe:@SuperDanny 啊,Get。
        SuperDanny:@不君子 包名相同,证书不同,是无法正常安装,需要删除旧的
      • d551c712efbe:重签名之后,安装时提示“无法下载APP”
        用的fir下载安装,有考虑过是不是第一种情况,但是我用原版未重签名的ipa是可以安装的。
        重签名之后就无法安装。
        大神有相似的或者了解相关问题么
      • 申经炳Ewane::sob: 你好 想问一下 在打包平台上打的包 只有在iOS11上装不上的原因是什么呀? Architecture里都设置了arm64了
        SuperDanny:证书是企业证书还是公司证书?另外是否使用托管平台的检测工具进行自检
      • df654ae89c07:你好,我用的企业级证书打包的ipa安装包给用户安装,可以正常安装(通过iTools安装),但是过了3周时间再用这个包安装到手机就提示安装失败,已经安装了的点击app就会闪退。然后我再重新打包安装就又可以安装了(注:10.0以上系统会出现这种情况,10.0以下正常,企业证书没过期)。我现在用的xcode8.1,最低支持8.0最高支持10.1,请问一下这是什么原因?
        SuperDanny:是否描述文件存在问题
        e384404bda33:我想问下这个问题您解决了吗?我现在也碰到同样的问题了
      • yanhooIT:应用安装过程中提示"无法下载应用程序"这里列举的所有办法我都试了,还是不能安装,用的是Adhoc证书打的包
        a浮生若梦a:请问这个问题解决了吗?我是个人账号,添加了十几个人udid,打adhoc包,大部分都可以安装成功,但是有些就是一直安装失败,我看上面的几个好多也都试过了,请问你解决了吗
        yanhooIT:adHOC,有设备次数限制的那种
        SuperDanny:企业证书还是个人
      • iDog:正好用上
      • bc20007d7352:还有个问题 就是之前安装好了,如果有新版本升级 老版本不卸载 就会安装失败!卸载了就能安装成功,可能是缓存问题,暂时还不知道解决方案!
        SuperDanny:是否修改过描述文件之类的

      本文标题:iOS应用安装失败原因排查

      本文链接:https://www.haomeiwen.com/subject/lmcwkttx.html