原因一:開發(fā)者在打包App時,導出 iOS App 的安裝包文件(.ipa文件)時,選擇了 App-Store 方式。
在導出 iOS 的 .ipa 文件時,有些開發(fā)者選擇了 App-Store 方式,這種方式導出的 .ipa 文件,只適合于上傳到蘋果 App Store,并不能通過蒲公英來安裝。如果是這種方式導出的 .ipa文件,傳到蒲公英上時,蒲公英會顯示“App-Store版”,這種版本是不能通過蒲公英安裝的。
原因二:在導出 iOS App 的安裝包文件(.ipa文件)時,選擇了 Ad-hoc 方式,但是沒有添加設備 UDID。
在導出 iOS 的安裝包文件時,如果選擇了 Ad-hoc 方式(一般用于蘋果個人開發(fā)者賬戶),那么,如果要某臺設備可以安裝,則必須要將這臺設備的 UDID 添加到導出安裝包時所用的證書文件中(. mobileprovision文件),才可以在這臺設備上安裝。
使用 Ad-hoc 方式導出的安裝包文件上傳到蒲公英后,蒲公英會顯示為“內(nèi)測版”,同時會在應用管理中,顯示出該安裝包的證書中包含的 UDID 列表。開發(fā)者可以根據(jù)顯示出的 UDID 列表,來排查某臺設備的 UDID 有沒有被添加到安裝包的證書中。
原因三:在導出 iOS App 的安裝包文件(.ipa文件)時,選擇了 In-house 方式,但是證書已過期或被撤銷。
在導出 iOS 的安裝包文件時,如果選擇了 In-house 方式(一般用于蘋果企業(yè)開發(fā)者賬戶),此時,如果出現(xiàn)無法安裝的情況,開發(fā)者可以檢查一下自己的企業(yè)開發(fā)者證書是否已過期或是否被撤銷。因為蘋果對于企業(yè)開發(fā)者證書管理較為嚴格,所以開發(fā)者如果使用不當,可能會導致企業(yè)證書被蘋果官方撤銷,被撤銷后的企業(yè)證書導出的安裝包,也是無法正確安裝的。
原因四:開發(fā)者在生成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 系統(tǒng)版本,和當前設備系統(tǒng)版本不符。
App 支持的 iOS 系統(tǒng)版本過低或者過高,都可能導致 App 無法安裝成功。例如,如果某個 App 設置了只支持 iOS 11.0 以上的系統(tǒng)時,那么,如果在低于這個版本的系統(tǒng)上安裝時,是無法安裝成功的。
因此,解決的方法也很簡單,我們應該盡量讓 App 盡可能支持更寬泛的系統(tǒng)版本。
具體操作方式是:在 Xcode - General - Deployment Info - Deployment Target 中,給 App 設置一個盡量低的版本,例如 iOS 6.0。
原因六:設備上已經(jīng)安裝了這個App,且已經(jīng)安裝的 App 和要安裝的 App 是用不同證書打包的。
這種情況下,也會造成 App 安裝失敗。解決的方式很簡單,用戶只需將設備上原來已經(jīng)安裝的 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。