轉載
前言
iOS 的內測應用在安裝時,很多人都遇到過安裝失敗的情況,安裝失敗的原因比較多,下面將一些常見原因總結如下,方便開發者進行排查。
在 iOS 中啟動應用時,出現提示“未受信任的企業級開發者”
這樣問題是因為在 iOS 9 以后的版本中,蘋果對企業簽名的應用做了更嚴格了限制。具體解決辦法請見: 企業級證書打包下載安裝之后無法使用問題
應用安裝過程中提示"無法下載應用程序"
原因一:在導出 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 等,然后重新安裝。