天天看點

iOS 企業包無法安裝

通用方案

請先參考這裡:

1.​​​iOS ipa 安裝包安裝失敗原因​​​ 2.​​iOS企業應用安裝失敗原因排查​​

如果上面的打不開

請看文末的原文

還沒解決?(這是不是原因)

看看這裡

我遇到情況是

項目的​​

​project.pbxproj​

​檔案裡面的縮進格式變了!

iOS 企業包無法安裝

左邊的縮進是​

​4個空格​

​,打包是能安裝成功的

右邊的縮進是​

​1個Tab​

​,打包後安裝不成功

是以,問題就出在​

​SVN​

​​同步代碼時

​​

​空格縮進​

​​被改成了​

​Tab縮進​

後續

— 2020-03-19

後來測試

其實​​

​Tab縮進​

​​也是沒問題的

也許是證書的問題

再續

— 2020-03-28

後來項目修改

再次打包後,又不行了

使用​​

​打廣告賣假藥的​

​​搜尋引擎,找不到解決方案

于是使用了​​

​https://cn.bing.com/​

​ 查找

找到了一篇通過檢視安裝日志來定位原因的​​文章​​​ 下載下傳蒲公英桌面​​用戶端​​ 安裝打開用戶端

連接配接手機

在螢幕左上角,選擇菜單​

​檢視​

​->​

​檢視設定日志​

​ 先在右上角的搜尋框内輸入:​

​installcoordinationd​

​ 過濾不必要的資訊

然後開始安裝企業包

安裝失敗時,會有日志包含以下内容:

​​

​This app could not be installed at this time​

然後往後找,安裝失敗的原因:

​​

​Failed to load Info.plist from bundle at path /private/var/installd/Library/Caches/ NSLocalizedDescription=Failed to load Info.plist from bundle at path /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.x3G89O/extracted/Payload/\M-h\M^@\M^C\M-g\M-1\M-3.app/Frameworks/XXXXX.framework​

原文

  • iOS ipa 安裝包安裝失敗原因
原因一:在導出 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 等,然後重新安裝。      
  • iOS企業應用安裝失敗原因排查
一、網絡問題

網絡問題比較好排查,如果隻有某一個人或者幾個人出現這種失敗,其他人不存在這種情況,基本就可以确定為網絡問題導緻,可以通過多重試幾次,或者切其他的wifi或網絡模式來嘗試解決這個問題。

二、手機設定問題

甄别是不是手機設定問題,可以到appstore嘗試下載下傳商店中的應用,如果這是也出現同樣的錯誤的話,基本就可以确定是手機設定的問題。

修複這個問題呢,就需要考慮嘗試以下動作:

首先清除safari的曆史記錄:打開“設定”-"Safari"-點選 “清除曆史記錄與網站資料"

其次登出Apple ID賬戶:打開"設定"-"iTunes store與app store"點選"Apple ID:"然後"登出"帳戶。

最後還原網絡設定:打開設定-通用-還原-還原網絡設定。裝置自動重新開機。

重新開機後連結網絡如果還是不能下載下傳的話,可以通過設定-目前wifi後的感歎号-dns,修改dns為8.8.8.8即可。

三、雲存儲的設定問題

雲存儲的設定如果出現問題,最明顯的就是ios7.1後所有的系統安裝都會失敗,而且失敗提醒不是簡單的下載下傳不成功,而是“無法安裝應用程式因為http://xxx.xxx.xxx證書無效”

導緻這個問題的原因其實是ios7.1後要求應用的下載下傳位址必須是https導緻。

修複這個問題的辦法就是将應用plist的URL修改http修改成https同時plist中ipa的位址也改成https

itms-services://?action=download-manifest&url=http://example.com/manifest.plist

最後伺服器也增加對https的支援即可,詳細的描述見下面連結中的文章。

http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22325916#22325916

四、打包證書的問題

如果您的應用大部分安裝都失敗的話,基本就可以确定是打包證書的問題。

對于這種情況,我們可能需要從以下角度排查:

首先,您使用的企業賬号是否有效(一般考慮是否過期,如果過期,則聯系相關人員續費即可)

其次,您的企業賬号下打包用的證書是不是被别人revoke了。如果是隻需要重新設定證書,再打包釋出就可以了,具體的打包釋出流程可以參考這篇文章:http://blog.csdn.net/kmyhy/article/details/6418280

最後,考慮是不是導出ipa的時候選擇的到處選項不對。切記,一定是選擇Save for Enterprise Deployment這種才有效。

五、打包時電腦連接配接外設問題

這個問題不好歸納問題現象,我遇到的現象就是有的手機安裝成功,有的安裝失敗。然後試了各種系統,發現ios7,到ios9.3,均是有的成功有的失敗。真的是很崩潰的問題。

最後也是試了上面所有的修複辦法,都沒有修複,才懷疑可能是打包時電腦連接配接了外設導緻。據說連接配接外設的電腦,在打包時,包會打成自動比對該外設的硬體資訊,也就是說,如果您的外設正好是64位的系統的話,那麼不好意思,這個新包不比對32位裝置。

不過這個問題要修複倒是比較簡單。

就是用之前打包的代碼版本,重新打包。隻是特别提醒,請拔出所有的連結電腦的裝置(手機,pad等),選擇build only for device下的Generic ios device,然後Archive,最後将導出的包重新上傳托管平台就可以了。