背景:
移動端關于瘦身杈湾,合理處理資源應該是風險最小,見效最快的手段了攘须。
項目中會用到很多的圖片資源漆撞,合理的壓縮<壓縮但不失真>和刪除無用的圖片在一定程度上可以優(yōu)化我們的包大小
操作步驟:
操作步驟簡介
1、查找出項目中沒有使用到的圖片資源于宙,進行確認然后刪除
2浮驳、確認項目中的圖片存放地,并批量壓縮項目中的圖片
一捞魁、查找出項目中沒有使用到的圖片資源至会,進行確認然后刪除
-
1.1、查找出項目中沒有使用到的圖片資源
網(wǎng)上也有些工具谱俭,但是功能不太好用奉件,只能查找源文件名稱在項目中有沒有被用到,不能查找Assets.xcassets中的資源有沒有被用到昆著,查找不準確
為了方便操作县貌,搞了一個Python腳本進行這項工作
FindUnUseResource.py
腳本地址
感興趣也可查看 iOS 查找項目中無用資源腳本原理
python3 FindUnUseResource.py -f .png,.jpg,.jpeg,.mp3,.m4a -p /Users/a58/Desktop/XXXXPath -e .bundle,Assets.xcassets,Pods
參數(shù)說明:
-f 查找的資源類型,多個用逗號隔開
-p 查找的項目路徑
-e 排除哪些路徑凑懂,多個用逗號隔開
主要是篩選的主項目中<不包含bundle>煤痕,和Assets.xcassets中的圖片資源有沒有在項目中使用。
腳本的掃描結果顯示的不包含Assets.xcassets接谨,說的是不包含Assets.xcassets中圖片的源文件名稱
1.2杭攻、將查找出來的結果,挨個在項目中查詢疤坝,然后確認刪除
為啥不直接刪除呢兆解?因為有一些圖片名稱可能是loading_1.png、loading_2.png跑揉,在項目中用for循環(huán)把名稱拼接起來使用锅睛,所以還得根據(jù)開發(fā)者的實際使用情況來確認。-
1.3历谍、刪除Assets.xcassets中沒有使用到的單倍圖
我們現(xiàn)在應該不支持單倍屏幕的機器了
image.png
image.png
二现拒、確認項目中的圖片存放地,并批量壓縮項目中的圖片
圖片的存放地一般是.bundle望侈,Assets.xcassets印蔬,主項目直接拖進去的
1、批量壓縮Assets.xcassets
使用腳本CompressImages.py
進行檢查壓縮脱衙,該腳本會在目標文件生成和源文件一模一樣的目錄侥猬,只壓縮.jpg和.png文件例驹,其他的文件只是拷貝回去
腳本地址
CompressImages.py
腳本使用需要滿足一些環(huán)境條件,具體參考參考批量壓縮圖片
python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/projectPath/Assets.xcassets -t /Users/a58/Desktop/Tools/FinalFile
參數(shù)說明:
-k tinify平臺申請的key
-f 要壓縮的文件路徑<對于iOS項目來說退唠,就可以直接把Assets.xcassets扔進去>
-t 壓縮文件存儲路徑
2鹃锈、bundle中圖片資源處理
bundle一般情況下是配合一些私有庫使用的,極大可能是配合.a或者framework使用瞧预,所以屎债,我們只把這部分的圖片進行壓縮,再放回去就好垢油,不能隨便刪除
2.1盆驹、檢測項目中所有的bundle文件
使用FindAllAPartFiles.py
腳本進行檢測,該腳本可以查找一個路徑下除了哪些文件下面所有的某一類文件和文件夾
有點繞?? 看療效滩愁。召娜。。惊楼。
python3 FindAllAPartFiles.py -f .bundle -p /Users/a58/Desktop/Tools/TestFile -e Pods
參數(shù)說明
-f 要查找的文件或者文件夾類型玖瘸,多個用逗號隔開 -f .bundle,.png,.jpg
-p 要查找的文件目錄
-e 不在什么文件下面找,這里我們不去找Pods中的bundle檀咙,如果在Pods中有自己寫的bundle雅倒,那么可以不用寫Pods,但是必須得寫一個字符串當做參數(shù)
私有Pods中的資源最好不要使用bundle的形式進行圖片管理弧可,可以使用Images.xcassets
相關的使用方法和區(qū)別參考:
http://www.reibang.com/p/5cb284934be2
因為只有把圖片資源加到Images.xcassets才會被蘋果優(yōu)化
2.2蔑匣、壓縮主項目bundle中的圖片資源
這個地方為啥要用手動去一個個的壓縮bundle呢?
因為不是所有的bundle中都有圖片資源的棕诵,而且一些不想壓縮或者拿不準的bundle可以選擇不壓縮裁良,一般一個項目中bundle也沒幾個
如果bundle中的圖片多,使用腳本CompressImages.py
進行檢查壓縮
腳本地址
CompressImages.py
腳本使用需要滿足一些環(huán)境條件校套,具體參考參考批量壓縮圖片
python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/Tools/TestFile/HUDSource.bundle -t /Users/a58/Desktop/Tools/FinalFile
bundle壓縮完畢之后价脾,將新文件中的內容拷貝出來替換原bundle中內容就行
3、主項目中的圖片
這些圖片就是些散戶了笛匙,常見的圖片比如引導頁侨把,為了使用[UIImage imageWithContentsOfFile:"imagePath"]
加載圖片,可能放在主項目中等
3.1妹孙、查找主項目中的這些散戶
FindAllAPartFiles.py
python3 FindAllAPartFiles.py -f .png,.jpg,.jpeg -p /Users/a58/Desktop/projectPath -e .bundle,Assets.xcassets
參數(shù)說明
-f 查找文件類型秋柄,這里查找
-p 需要查找項目路徑
-e 排除搜索的文件夾名稱
感覺圖片路徑找到圖片,對于比較分散的圖片蠢正,直接用網(wǎng)頁在線壓縮就可以了https://tinypng.com/
壓縮后的結果查看
壓縮完畢之后一打包骇笔,可能顯示壓縮效果明顯,但是打出來的包其實是包含多個架構的包,不能真實反饋將來上線到AppStore后的大小
可以參考:
iOS查看將來各種機型在AppStore中下載的包大小
只需要把壓縮后的包扔到itunes上就可以查看
坑點:
1笨触、項目中的jpg圖片最好轉化成png圖片懦傍,因為在ipa包中發(fā)現(xiàn),蘋果自動把jpg轉化成了png旭旭,并且體積變大了
2、pod私有庫中的圖片資源最好加到Images.xcassets葱跋,因為只有把圖片資源加到Images.xcassets才會被蘋果優(yōu)化持寄。有的團隊是這么做的,將圖片放在bundle中娱俺,但是只放兩倍圖稍味。這樣估計還是會有差別,待驗證荠卷。
3模庐、圖片不要過度壓縮,蘋果有自己的圖片處理策略油宜,如果壓縮過度掂碱,打出的包可能感覺小了,但是放在應用商店下載可能會發(fā)現(xiàn)圖片反而比之前大慎冤,有種圖片壓縮回滾的表現(xiàn)疼燥,待驗證。
4蚁堤、對比最終壓縮效果醉者,不要只看ADHOC下打出來的ipa大小。要看將來在appStore的ipa大小iOS查看將來各種機型在AppStore中下載的包大小,這樣的參考才是有意義的
擴展:
iOS 腳本查看項目中重復文件
可以進一步檢測項目中資源披诗,對于重復的資源可以優(yōu)化一下
在項目中查看某一類文件腳本
可以查看項目某一類的文件撬即,并且大小排序排好,比如查詢所有png的文件呈队,可以將較大的文件進行處理剥槐,或者UI再切圖之類的