減小iOS應用程序的大小

Q: 怎樣才能讓我的程序安裝包小一點,讓程序的下載和安裝更快速?

A: 本文收集了一些減小程序安裝包大小的相關技巧(當第一次下載和安裝程序時)。如果是針對升級程序的話,可以看這篇文章(減小iOS應用程序升級時所需下載的大小)(這與第一次安裝使用的工作原理有所不同)。

檢查應用程序

首先是檢查.app bundle,看一下程序包裏面哪些文件佔的空間最大。

在做任何相關優化之前,我們需要做一些權衡。通過權衡,可以知道把優化的重點集中在什麼地方。本文提到的一些技術缺點我們也需要做出考慮,我們必須考慮相關影響,以確保做出正確的決定。如果不做權衡的話,我們無法知道需要對程序做出什麼樣的改變。

當第一安裝iOS程序時,需要下載完整的一個.ipa文件。(注意這不同於升級)。實際上.ipa文件就是一個.zip結構。

我們可以通過這樣的方法來找出程序的.ipa文件:從App Store下載應用,然後利用iTunes對iOS設備做同步處理,接着查看目錄:~/Music/iTunes/iTunes Music/Mobile Applications,就能找到.ipa文件了。

當讓我們也可以通過使用: Xcode的Archive命令來構造出.ipa文件——該文件與提交到App Store上的格式基本一致

檢查.ipa文件

簡單的將後綴爲.ipa文件修改爲.zip,然後利用Finder將其解壓出來。右鍵單擊解壓出來的.app bundle,選擇顯示包內容,以查看裏面的資源文件。通過該方法我們可以看到哪些文件佔的空間最大。記住:.app bundle是經過壓縮的,並且有些文件的壓縮效果要比別的文件好,所以壓縮後的效果纔是纔是最重要的。不過一般情況下在壓縮前最大的文件,在壓縮後依舊是最大的文件。我們可以將某個文件刪除,然後在Finder中右鍵單擊,選擇壓縮,這樣可以更加精確的測量文件壓縮效果。

iOS App Store相關因素

作爲提交到App Store中app裏的可執行文件是被加過密的。加密的副作用是可執行文件的壓縮效果沒有之前的好了,因爲加密會隱藏一些細節問題。因此,從App Store下載下來的.ipa文件大小要比從本地build出來的.ipa文件大。

注意:將長文本內容表數據等從代碼中移除,並添加到外部文件中,這樣可以減小最終安裝包下載的大小——因爲這些文件的壓縮效果更好。

如果你選擇Organizer window中的某個archived,然後點擊Estimate Size,Xcode可以對最終分發的程序尺寸做出一個評估。這裏並不考慮Mac App Store上面的和企業級部署的iOS程序。

Build Settings

編譯選項

將build setting中的Optimization Level設置爲Fastest, Smallest [-Os]; 將build setting 中的Strip Debug Symbols During Copy設置爲YES(COPY_PHASE_STRIP = YES),這樣可以減小編譯出二進制文件的尺寸。這裏提到的這些設置在Xcode工程中對於Release的配置是默認的。

警告:這些設置會讓你的程序很難debug。在一般開發環境build中不建議這樣設置,

Target針對較少的CPUs

默認情況下,Xcode工程都配置爲:對程序指定的特定CPU類型做優化處理,以生成相對於的可執行文件。不同的硬件,將運行不同的可執行代碼。雖然這樣優化後的程序,只能針對某些設備運行,但是這大大減小可執行程序的大小。

要想只設定特定類型的CPUs,可以修改build setting中的Architectures,將其從Standard $(ARCHS_STANDARD)修改爲你希望支持的列表中對應的特定類型CPU。有效的CPU名稱列在Valid Architectures (VALID_ARCHS) build setting中。請不要修改Valid Architectures設置項,最好由Xcode管理。

Assets

對應用程序做一個完整性檢查

利用Inspecting Your App中介紹的流程,對.app bundle做一個全面的檢查,以瞭解那些是真正需要用到的。在程序中,經常會包含一些額外的文件,例如readme之類的,這些從來都不會被用到。

將數據從代碼中剝離出來

將所有的資源(例如很長的字符串)從代碼中剝離出來,並存入外部文件,這樣會減小最終文件下載的大小,因爲這些文件的壓縮效果更好。(參考iOS App Store Specific Considerations中的完整介紹。)

Image Assets

儘量使用8-bit圖片

使用8-bit的PNG圖片,比32-bit的圖片能減少4倍的壓縮率。由於8-bit的圖片支持最多256種不同的顏色,所以8-bit的圖片一般只應該用於一小部分的顏***片。例如灰度圖片最好使用8-bit。

針對32-bit的圖片儘量使用高壓縮的比率

利用Adobe Photoshop的Save For Web可以減小JPEG和PNG的圖片大小。在Xcode中,默認情況下,會自動的使用pngcrush來壓縮.png圖片。

Audio Assets

音頻的壓縮

參考WWDC中的Audio Development for Games,裏面介紹瞭如何有效的處理音頻。常規來說,我們要使用AAC或MP3來壓縮音頻,並且可以嘗試降低一下音頻的比特率。有時候44.1khz的採樣是沒有必要的,稍微低一點的比特率也不會降低音頻的質量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章