App再瘦身
從09年開始做iPhoneDev到現在剛好3年時間,那個時候還在北京的一家公司實習,從OC語法開始自學,你可以看到周圍的人在用iPhone3GS,但沒人懂OC、很少人用過Mac系統。一路過來有stackoverflow、iphonedevsdk等出名站點的幫助,收獲不少。現在,自己正處在角色的轉型,對自己這3年來的iPhone開發在不停的思考著,整理成文檔,希望自己的經驗能夠對CC朋友有所幫助。有錯誤的地方和任何問題,請毫不猶豫的指出。
這個帖子整理App大小優化的經驗。
之前看過阿里UED的一篇文章“App瘦身記”,是從UED的角度來看待減小App大小,前面3點是建議,后面2點是瘦身辦法。
我來說一下我的經驗。大致的思路是:分析Xcodebuild目錄下xx.app的資源,按從大到小排序,重點優化大文件。這個方法效果最好,能夠讓app瘦身50%以上,也就是減小用戶一半的下載時間。
查看生成的app大小
Debug和Release編譯模式產生的文件大小是不一樣的,Debug模式生成的xx.app要大些。建議用Release模式生成的xx.app來分析,這個是最接近提交審核的IAP。
產品上線后顯示在AppStore上程序的大小是經過壓縮的。可以手動壓縮xx.app,查看生成的xx.zip的大小,這個是最接近產品上線后的大小。
產品上線后iTunes顯示的大小:
開始瘦身
右鍵點擊xx.app查看包的內容,按大小排序。
可以看到最占用空間的那些文件,一般是png文件占用的空間比較大,特別是iPad3視網膜的啟動畫面,可以大到7MB!如果app支持橫豎屏,那么啟動畫面文件的大小又增加1倍。
這里列出常見的大文件:
• 可執行文件
• 啟動畫面 (比如:iPad 3 Retina)
• 背景圖片
• 阿里UED里提到的Workthrough (這個在國內app很常見)
• 第三方庫的bundle包、說明文件
• 音效素材 (比如:wav格式文件)
優化方法有:
• 不需要透明的地方,使用jpg而不是png
比如:背景圖片、Workthrough、bundle里面的png文件,jpg壓縮比使用0.6左右,在不影響視覺效果的情況下盡可能的小;
• 不使用Default.png,使用Default.jpg
蘋果限制啟動畫面只能是png格式,iPad3 Retina的png文件往往都很大。這種情況下可以在app啟動時顯示Default.jpg,等到載入完畢后再顯示首頁。該方式的缺點是啟動時會有黑屏然后才顯示Default.jpg;優點是大大減小app大小,以及可自定義啟動畫面。比如UC瀏覽器HD在倫敦奧運會期間更換的啟動畫面;
• 素材做成可拉伸,類似Android的.9
界面導航條背景、彈框背景、按鈕等都可以考慮用拉伸素材;
• 去除不必要的文件
一般開發時都有統一的通用庫,方便其它工程調用,節省開發時間。把常用的庫集成到通用庫里會造成通用庫體積變大,應該注意不必要的資源不要添加進去。比如:在發布的時候,TestFlight可以不用編譯;第三方庫的說明文件不要引入工程,Flurry的txt、pdf文件;如果付費版本不需要廣告,那么廣告SDK不要集成到通用庫,只在單獨的工程里引用;
• 優化png, jpg素材
推薦使用ImageOptim,在準備提交審核前,使用該工具優化所有png, jpg素材。可以減小~20%左右的圖片大小。但png素材在Xcode編譯后體積跟優化前的差不多,這個應該跟Xcode的優化方式有關。更新:需要關掉Xcode的png優化,ImageOptim優化的效果才明顯,參考官方說明:Xcode's built-in (de)optimization;
• 音視頻素材使用經過壓縮的格式
wav的音頻格式生成的文件比較大,可以使用蘋果推薦的caf格式代替。關于如何選擇音頻壓縮格式可以參考這篇文章:Audio101 for iPhone Developers: File and Data Formats。
在第一次產品提交審核前,可以過一下上面提到的方法,減小App大小。我們的一個產品PhotoCool 1.2版本的大小是22.4MB,在1.3版本使用以上方法進行優化,優化后只有13.1MB,縮小了41.5%!下載速度快了,用戶會更高興的。