本文結(jié)合蒲公英以及FIR兩家應(yīng)用托管平臺(tái)的博文進(jìn)行整理
前言
iOS 的內(nèi)測應(yīng)用在安裝時(shí),很多人都遇到過安裝失敗的情況荆虱,安裝失敗的原因比較多,下面將一些常見原因總結(jié)如下,方便開發(fā)者進(jìn)行排查。
在 iOS 9 中啟動(dòng)應(yīng)用時(shí),出現(xiàn)提示“未受信任的企業(yè)級(jí)開發(fā)者”
這樣問題是因?yàn)樵?iOS 9 以后的版本中,蘋果對(duì)企業(yè)簽名的應(yīng)用做了更嚴(yán)格了限制。具體解決辦法請(qǐng)見: 企業(yè)級(jí)證書打包下載安裝之后無法使用問題
在 iOS 9 中點(diǎn)擊“安裝”按鈕后妙蔗,沒有彈出“是否安裝”的提示
這個(gè)問題是因?yàn)?iOS 9 的一個(gè) Bug 導(dǎo)致的。出現(xiàn)這個(gè)問題的前提疆瑰,一般是由于用戶已經(jīng)從蘋果官方 App Store 上安裝了相同的應(yīng)用眉反。
【解決辦法】
先在設(shè)備中刪除之前已經(jīng)安裝的應(yīng)用,然后再從托管平臺(tái)
安裝即可穆役。
為什么在 iOS 9 中寸五,點(diǎn)擊“安裝”按鈕后,沒有任何反應(yīng)耿币,桌面也沒有出現(xiàn)應(yīng)用圖標(biāo)播歼,但是狀態(tài)欄上的網(wǎng)絡(luò)圖標(biāo)在轉(zhuǎn)
這是由于 iOS 9 中的一個(gè) Bug 造成的。雖然看上去沒有反應(yīng)掰读,其實(shí)應(yīng)用已經(jīng)在后臺(tái)開始下載并安裝了秘狞,狀態(tài)欄上的網(wǎng)絡(luò)圖標(biāo)在轉(zhuǎn)就是一個(gè)證明。這個(gè)時(shí)候蹈集,只要多等待一會(huì)兒就好了烁试,應(yīng)用安裝完成之后會(huì)在桌面上顯示出來的。
應(yīng)用安裝過程中提示"無法下載應(yīng)用程序"
原因一:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時(shí)拢肆,選擇了 App-Store 方式减响。
在導(dǎo)出 iOS 的.ipa
文件時(shí),有些開發(fā)者選擇了App-Store
方式郭怪,這種方式導(dǎo)出的.ipa
文件支示,只適合于上傳到蘋果App Store
,并不能通過托管平臺(tái)
來安裝鄙才。如果是這種方式導(dǎo)出的 .ipa
文件颂鸿,傳到托管平臺(tái)
上是不能通過安裝的。
原因二:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時(shí)攒庵,選擇了 Ad-hoc 方式嘴纺,但是沒有添加設(shè)備 UDID 。
在導(dǎo)出 iOS 的安裝包文件時(shí)浓冒,如果選擇了Ad-hoc
方式(一般用于蘋果個(gè)人開發(fā)者賬戶)栽渴,那么,如果要某臺(tái)設(shè)備可以安裝稳懒,則必須要將這臺(tái)設(shè)備的 UDID
添加到導(dǎo)出安裝包時(shí)所用的證書文件中(.mobileprovision
文件)闲擦,才可以在這臺(tái)設(shè)備上安裝。
使用 Ad-hoc
方式導(dǎo)出的安裝包文件上傳到托管平臺(tái)
后,托管平臺(tái)
會(huì)顯示為內(nèi)測版
墅冷,同時(shí)會(huì)在應(yīng)用管理中贮缕,顯示出該安裝包的證書中包含的 UDID
列表。開發(fā)者可以根據(jù)顯示出的UDID
列表俺榆,來排查某臺(tái)設(shè)備的 UDID
有沒有被添加到安裝包的證書中。
原因三:在導(dǎo)出 iOS App 的安裝包文件( .ipa 文件)時(shí)装哆,選擇了 In-house 方式罐脊,但是證書已過期或被撤銷。
在導(dǎo)出 iOS 的安裝包文件時(shí)蜕琴,如果選擇了In-house
方式(一般用于蘋果企業(yè)開發(fā)者賬戶)萍桌,此時(shí),如果出現(xiàn)無法安裝的情況凌简,開發(fā)者可以檢查一下自己的企業(yè)開發(fā)者證書是否已過期或被撤銷上炎。因?yàn)樘O果對(duì)于企業(yè)開發(fā)者證書管理較為嚴(yán)格,所以開發(fā)者如果使用不當(dāng)雏搂,可能會(huì)導(dǎo)致企業(yè)證書被封藕施,被封后的企業(yè)證書導(dǎo)出的安裝包,也是無法正確安裝的凸郑。
原因四:開發(fā)者在生成App安裝包時(shí)裳食,沒有在 Xcode 中設(shè)置正確的 Architecture 。
iOS 應(yīng)用的 Architecture
(架構(gòu))芙沥,決定了這款 iOS 應(yīng)用可以在哪些設(shè)備機(jī)型上安裝诲祸。例如,如果某個(gè)應(yīng)用在 Xcode 中只添加了 arm64 這一種 Architecture
而昨,那么最終打包后的安裝包文件上傳到托管平臺(tái)
后救氯,對(duì)于 iPad mini、iPhone5 等以下設(shè)備歌憨,都是無法安裝的(因?yàn)檫@些設(shè)備都不是 arm64 架構(gòu))着憨。換句話說,如果需要在某個(gè)設(shè)備上可以安裝务嫡,App 就必須支持那個(gè)設(shè)備的 Architecture
享扔。
所以,正確的解決方法是植袍,在生成 App 安裝包時(shí)惧眠,盡可能讓 App 支持更多的 Architecture
。
具體操作方法是:在 Xcode
- Build Settings
- Architecture
中于个,增加 armv7氛魁、armv7s、arm64,以便所有設(shè)備都可以安裝秀存。然后捶码,將 "Build active architecture only"
設(shè)置為NO。對(duì)于各個(gè) iOS 設(shè)備支持的 Architecture
類型或链。請(qǐng)點(diǎn)擊這里查看惫恼。
原因五:App 支持的 iOS 系統(tǒng)版本,和當(dāng)前設(shè)備系統(tǒng)版本不符澳盐。
打包時(shí) App 選擇支持的 iOS 系統(tǒng)版本過低或者過高祈纯,都可能導(dǎo)致 App 無法安裝成功。例如叼耙,如果某個(gè) App 設(shè)置了只支持 iOS 7.0 以上的系統(tǒng)時(shí)腕窥,那么,如果在 iOS 6.1 系統(tǒng)上安裝時(shí)筛婉,肯定是無法安裝成功簇爆。
因此,我們應(yīng)該盡量讓 App 盡可能支持更寬泛的系統(tǒng)版本爽撒。
具體操作方式是:在Xcode
- General
- Deployment Info
- Deployment Target
中入蛆,給 App 設(shè)置一個(gè)盡量低的版本,例如 iOS 5.0硕勿。
原因六:開發(fā)者上傳的是一個(gè)破解的 ipa 安裝包安寺,或者是一個(gè)使用破解 Xcode 方式打包生成的 ipa 安裝包,或者是通過 iTunes 生成的 ipa 安裝包首尼。
通過任何非 Xcode(或 Xcode 的命令行工具)生成的安裝包挑庶,都是沒有辦法正確在設(shè)備上安裝的(越獄設(shè)備除外)。
常見的不正確的打包 ipa 的方式有:
通過 iTunes 導(dǎo)出安裝包文件
软能、通過 iTools 導(dǎo)出安裝包文件
等等迎捺。這種類型的 App 上傳到托管平臺(tái)
后,會(huì)顯示未簽名
的標(biāo)簽提示查排。
【正確的方法】
使用一個(gè)正常的蘋果開發(fā)者證書凳枝,通過未破解的 Xcode 打包生成 ipa 安裝包。
原因七:設(shè)備上已經(jīng)安裝了這個(gè)App跋核,且已經(jīng)安裝的 App 和要安裝的 App 是用不同證書打包的岖瑰。
這種情況下,也會(huì)造成 App 安裝失敗砂代。解決的方式很簡單蹋订,開發(fā)者只需將設(shè)備上原來已經(jīng)安裝的 App 刪除,再重新安裝新的 App 即可刻伊。
原因八:Info.plist 文件中的LSRequiresIPhoneOS 沒有設(shè)置露戒,或者設(shè)置了 NO椒功。
對(duì)于 iOS 的 App 來說,如果Info.plist
文件中的LSRequiresIPhoneOS
沒有設(shè)置智什,或者設(shè)置了NO动漾,那么由 Xcode 導(dǎo)出的安裝包(.ipa
包),就不會(huì)包含Payload
文件夾荠锭,而是被一個(gè)叫做Applications
的文件夾代替旱眯。這樣的安裝包在安裝時(shí),會(huì)被 iOS 判定為無效的安裝包证九,所以無法被正確安裝删豺。
【解決方式】
只需要將Info.plist
文件中的LSRequiresIPhoneOS
設(shè)置為YES,然后重新打包即可甫贯。具體操作為:在 Xcode 中打開Info.plist
文件,然后檢查 LSRequiresIPhoneOS
是否已設(shè)置看蚜,如果沒有設(shè)置叫搁,就添加一個(gè),然后將LSRequiresIPhoneOS
的類型設(shè)置為Boolean供炎,值設(shè)置為 YES渴逻。
設(shè)置好以后,可以看到Info.plist
文件中顯示Application requires iPhone environment
的值為YES音诫。
原因九:網(wǎng)絡(luò)出現(xiàn)中斷或異常惨奕。
遇到這種情況,用戶可檢查自己手機(jī)的所連接的網(wǎng)絡(luò)是否穩(wěn)定竭钝、速度是否正常等梨撞。可以嘗試一下其他網(wǎng)站香罐,或者更換一個(gè) Wi-Fi卧波,或者由 Wi-Fi 換成 3G/4G 等,然后重新安裝庇茫。
【托管平臺(tái)】: 托管平臺(tái)是指將APP發(fā)布于第三方平臺(tái)上面港粱,供用戶安裝測試。常見的托管平臺(tái)有蒲公英以及FIR
【App-Store】: App-Store版旦签,用于發(fā)布到蘋果商店
【Ad-hoc】: 內(nèi)測版查坪,用于內(nèi)部指定設(shè)備使用
【In-house】: 企業(yè)版,可在任何設(shè)備上安裝宁炫,但不能濫用
再一次感謝您花費(fèi)時(shí)間閱讀這篇文章偿曙!
微博: @Danny_呂昌輝
博客: SuperDanny