本文譯自:Reducing the size of my Apphtml
Q: 怎樣才能讓個人程序安裝包小一點,讓程序的下載和安裝更快速?ios
A: 本文收集了一些減少程序安裝包大小的相關技巧(當第一次下載和安裝程序時)。若是是針對升級程序的話,能夠看這篇文章(減少iOS應用程序升級時所需下載的大小)(這與第一次安裝使用的工做原理有所不一樣)。小程序
首先是檢查.app bundle
,看一下程序包裏面哪些文件佔的空間最大。app
在作任何相關優化以前,咱們須要作一些權衡。經過權衡,能夠知道把優化的重點集中在什麼地方。本文提到的一些技術缺點咱們也須要作出考慮,咱們必須考慮相關影響,以確保作出正確的決定。若是不作權衡的話,咱們沒法知道須要對程序作出什麼樣的改變。ide
當第一安裝iOS程序時,須要下載完整的一個.ipa
文件。(注意這不一樣於升級)。實際上.ipa
文件就是一個.zip
結構。優化
咱們能夠經過這樣的方法來找出程序的.ipa
文件:從App Store下載應用,而後利用iTunes對iOS設備作同步處理,接着查看目錄:~/Music/iTunes/iTunes Music/Mobile Applications
,就能找到.ipa
文件了。ui
當讓咱們也能夠經過使用: Xcode的Archive命令來構造出.ipa
文件——該文件與提交到App Store上的格式基本一致。加密
.ipa
文件簡單的將後綴爲.ipa
文件修改成.zip
,而後利用Finder將其解壓出來。右鍵單擊解壓出來的.app bundle
,選擇顯示包內容
,以查看裏面的資源文件。經過該方法咱們能夠看到哪些文件佔的空間最大。記住:.app bundle
是通過壓縮的,而且有些文件的壓縮效果要比別的文件好,因此壓縮後的效果纔是纔是最重要的。不過通常狀況下在壓縮前最大的文件,在壓縮後依舊是最大的文件。咱們能夠將某個文件刪除,而後在Finder中右鍵單擊,選擇壓縮
,這樣能夠更加精確的測量文件壓縮效果。spa
做爲提交到App Store中app裏的可執行文件是被加過密的。加密的反作用是可執行文件的壓縮效果沒有以前的好了,由於加密會隱藏一些細節問題。所以,從App Store下載下來的.ipa文件大小要比從本地build出來的.ipa文件大。debug
注意:將長文本內容
和表數據
等從代碼中移除,並添加到外部文件中,這樣能夠減少最終安裝包下載的大小——由於這些文件的壓縮效果更好。
若是你選擇Organizer window中的某個archived,而後點擊Estimate Size
,Xcode能夠對最終分發的程序尺寸作出一個評估。這裏並不考慮Mac App Store上面的和企業級部署的iOS程序。
將build setting中的Optimization Level
設置爲Fastest, Smallest [-Os]
; 將build setting 中的Strip Debug Symbols During Copy
設置爲YES
(COPY_PHASE_STRIP = YES),這樣能夠減少編譯出二進制文件的尺寸。這裏提到的這些設置在Xcode工程中對於Release
的配置是默認的。
警告:這些設置會讓你的程序很難debug。在通常開發環境build中不建議這樣設置,
默認狀況下,Xcode工程都配置爲:對程序指定的特定CPU類型作優化處理,以生成相對於的可執行文件。不一樣的硬件,將運行不一樣的可執行代碼。雖然這樣優化後的程序,只能針對某些設備運行,可是這大大減少可執行程序的大小。
要想只設定特定類型的CPUs,能夠修改build setting中的Architectures
,將其從Standard $(ARCHS_STANDARD)
修改成你但願支持的列表中對應的特定類型CPU。有效的CPU名稱列在Valid Architectures (VALID_ARCHS)
build setting中。請不要修改Valid Architectures
設置項,最好由Xcode管理。
利用Inspecting Your App中介紹的流程,對.app bundle作一個全面的檢查,以瞭解那些是真正須要用到的。在程序中,常常會包含一些額外的文件,例如readme之類的,這些歷來都不會被用到。
將全部的資源(例如很長的字符串)從代碼中剝離出來,並存入外部文件,這樣會減少最終文件下載的大小,由於這些文件的壓縮效果更好。(參考iOS App Store Specific Considerations中的完整介紹。)
使用8-bit的PNG圖片,比32-bit的圖片能減小4倍的壓縮率。因爲8-bit的圖片支持最多256種不一樣的顏色,因此8-bit的圖片通常只應該用於一小部分的顏色圖片。例如灰度圖片最好使用8-bit。
利用Adobe Photoshop的Save For Web
能夠減少JPEG和PNG的圖片大小。在Xcode中,默認狀況下,會自動的使用pngcrush來壓縮.png圖片。
參考WWDC中的Audio Development for Games,裏面介紹瞭如何有效的處理音頻。常規來講,咱們要使用AAC或MP3來壓縮音頻,而且能夠嘗試下降一下音頻的比特率。有時候44.1khz的採樣是沒有必要的,稍微低一點的比特率也不會下降音頻的質量。