寫這篇文章的原由是要更新 app ,然而上傳 ipa 文件到 iTunes Connect 時發現體積巨大,是 App Store 顯示的體積的好幾倍,因而仔細研究了一下,各類體積的文件都是些什麼。javascript
.xcarchivehtml
- Xcode Archive
- 由 Xcode 進行 Archive 操做產生的結果,出如今 Xcode Organizer 中
- 主要包含 .dSYM .app .dylib(針對 Swift)
- 用於生成 .ipa 文件複製代碼
.ipa(Xcode 產出)java
- iPhone Application Archive
- 主要包含 .app .dylib(針對 Swift)
- 最終從本地 upload 到 iTunes Connect 的文件複製代碼
.ipa(iTunes 下載)xcode
- iPhone Application Archive
- 主要包含 .app iTunesMetadata iTunesArtwork
- iTunes 用於管理應用軟件安裝包的形式複製代碼
.app服務器
- Applicaiton
- 主要包含圖片、語言文件等資源,以及動態庫和 Unix 可執行文件
- 安裝到 iOS 設備的文件的格式複製代碼
在進行 Archive 操做以前,咱們就能夠在 Xcode 導航欄的 Products 目錄中看到 .app 文件,extension target 對應的是 .appex 文件,因此歸檔出 .xcarchive 並非一個很是複雜的操做,只須要編譯、連接、簡單的簽名,若是是 Swift 項目的話還須要拷貝一下標準庫。架構
咱們查看 .xcarchive 裏面的內容是經過「顯示包內容」看見的,而 .ipa 則須要像 .zip 文件同樣解壓,那麼也能夠理解爲何打包出 ipa 文件相對耗時了,尤爲是 Swift 項目,不光要進行壓縮操做,要 processing,一堆原生動態庫加上第三方 framework 還要輪着等着簽名。
app
因此 ipa 文件才能夠做爲加密文件放在軟件商店,xcarchive 不能夠。ide
至此能夠看出,AppStore 頁面顯示的體積應該是預估的應用安裝到設備的體積,而不是你下載這款軟件所耗費的流量。這也解釋了我以前嘗試用剩 1G 存儲的 iPad 去裝一個 AppStore 顯示 大小不到 1G 的遊戲,爲何會裝不上,由於下載到 iPad 的文件實際可能大於 1G。ui
TestFlight 裏面顯示的 30M+,確定是通過 iTunes Connect 處理過的 ipa,但考慮到 .ipa 文件並不會比安裝到設備的 .app 包體積更小,我的認爲這是解壓事後的 ipa 文件的體積。加密
未處理的 .app - 85.6 M
(加入動態庫、.dSYM 等)
xcarchive - 167.7 M
未處理的 ipa 文件夾 - 172 M
(通過相似 zip 壓縮)
未處理的 .ipa - 70.8 M(開發者感覺到的體積)
(我的推測)處理後的 ipa 文件夾- 約 30M(用戶下載須要耗費的流量)
處理後的 .app - 約 15M(最終佔用用戶設備體積)
App Thining 包含 Slicing、Bitcode 和 On-Demand Resources,其中 Slicing 是默認啓用、沒法關閉的,但只在 iOS 9.0.2 以後有效,後面兩個選項在 Xcode 中默認開啓,能夠手動關閉。
這是 Xcode 產物體積與用戶下載到設備中的軟件體積差距較大的主要緣由。
推薦閱讀:初探 iOS 9 的 App 瘦身功能