iOS9企業部署分發問題深入瞭解與解決

1. iOS9以後,企業級分發ipa包將遭到與Mac上dmg安裝包一樣的待遇:默認不能安裝,也不再出現「信任按鈕解決辦法
2. iOS9以後,企業分發時可能存在:下載的ipa包與網頁兩者的 bundle ID 無法匹配而導致下載失敗的情況  解決辦法

※本文主要針對問題二進行問題的深入瞭解與解決。

我們都知道iOS8企業分發有個bug,就是當因爲某種原因更改manifest文件(plist文件)後,導致「無法現在安裝程序」 的bug,解決方法就是把plist文件中的bundle-identifier隨便加個後綴即可安裝成功,比如org.skyfox.cient 改成了org.skyfox.client8 ,因爲ios8之前是不校驗manifest plist中bundle-identifier是否和app的真實bundle ID相同,所以好用哦耶!(並且還得考慮比如七牛這樣的服務商cdn緩存問題 刷新緩存

然而好景不長,iOS9發佈後蘋果封堵了這個解決方案(其實蘋果並不知道到 這個bundle-identifier坑了多少童鞋啊! ),進行bundle-identifier校驗,所以之前的解決方法完全不通!。提示信息如下!

無法下載應用程序 此時無法安裝

無法下載應用程序 此時無法安裝

今天仔細的研究了下問題的根源,根源所在並不是Safari瀏覽器或者七牛的緩存問題,這些問題可以輕易排查並且解決,最後通過Xcode或者 log guru小工具 查看設備實時日誌,發現當iOS設備安裝itms-services://協議的軟件時候會尋找是否在緩存的plist文件中匹配,若匹配,會讀取緩存後的plist文件,並且校驗緩存文件中  bundle-identifier是否和app的真實bundle id相同」, 假如緩存了錯誤的plist那麼 很長時間都會校驗失敗 導致無法安裝,同樣會提示 」無法下載應用程序 此時無法安裝「。查看log變成了 「Ignore manifest download, already have bundle ID」,證明猜想正確

那麼究竟是根據什麼規則進行緩存的plist文件那,接下來我用ifunbox等工具打開了設備的文件系統,發現最後找到了一個download.28sqlitedb數據庫,當中記錄了APP bundle ID 對應的plist等信息,bundl ID恰好是錯誤的plist中的bundl ID,但這並不能得出結論緩存了plist文件,找了找沒找到存在什麼地方,感興趣的可以找找!!  目測是在類似目錄:/var/mobile/Library/Caches/

download.28sqlitedb數據庫表

download.28sqlitedb數據庫表

download.28sqlitedb數據庫

download.28sqlitedb數據庫

※最後用變相的方法證明的確蘋果是根據plist文件url進行緩存

假如我的安裝地址是: itms-services://?action=download-manifest&url=https://www.skyfox.org/cient.plist

步驟:

  1. 多次更改client.plist中的bundle-identifier ,
  2. 或者更改 url地址爲「https://www.skyfox.org/cient.plist?隨機數」
  3. 或者更改 url地址爲「https://www.skyfox.org/cient.plist?time=隨機數」
  4. 或者同時更改等方法
  5. 查看安裝結果與對照log guru 的log

有人說也可以重啓設備 緩存即可消失,本人測試無效!

多次實驗得出結論,蘋果設備是根據plist文件url進行緩存

解決方法 即 「url變更爲 https://www.skyfox.org/cient.plist?隨機數」或者每次都更改plist文件的域名啊 地址啊 等等方法!

 

如果您有其他不同意見可以隨時聯繫我改正