本文會基于1個已有的腳本工具自動導出所有的圖片;終究給出的是1個從 Images.xcassets 到基于文件夾的精簡 適合 的圖片資源集的完全進程.難點在于從完全圖片集到精簡圖片集,肯定是基于1個定制化的腳本,自定義導出的.如果自己手動導出?那可有的忙嘍~
Images.xcassets,是Xcode項目中的,用于寄存資源文件.那末我們為何不直接處理 Images.xcassets 呢?由于Images.xcassets中寄存的圖片名稱可能與圖片的資源名稱不1致,終究決定圖片資源名的是資源文件夾的名稱;也有可能Images.xcassets寄存的是pdf格式的圖片,這樣可以自動預編譯對應尺寸的圖片資源.
Images.xcassets 編譯后,終究ipa包中,是以Assets.car包的情勢出現的,內部是處理后的圖片名.此處的文件名與我們代碼中援用的圖片資源名稱是1致的.
也就是說: 直接基于Assets.car進行處理,可使我們的使用圖片處的代碼變更盡量少.
Assets.car 沒法直接zip解壓,需要借助專門的工具,此處推薦: cartool 使用方法,參見: iOS學習之解壓Assets.car
如果你缺少足夠復雜的Assets.car或cartool用法有問題,可以直接使用我處理過的資源:https://github.com/ios122/ios_assets_hot_update/tree/master/res
針對文章github給定的目錄, cartool的用法,可以簡述為:
cd 到 res目錄,然后
mkdir Assets
./cartool ./Assets.car ./Assets
從 Assets.car 導出后的圖片,大致有以下幾種:
以上圖片的緣由,很大1部份是由于App迭代引發的.對1個圖片,存在上述不同情況時,圖片通常加載與當前屏幕比例(scale)最符合的圖片,具體細節下1篇文章會更完全描寫.
經過我自己的實驗與網上各種資料的查詢,使用 @3x 的圖片是可以同時作為 iPhone和iPad的通用圖標的.固然,這是需要自定義 imageNamed方法,也是下1篇文章的重點. 2套共5個圖片,現在只需要1個圖片,理論圖片資源體積可以減小
((1 + 2 + 3 + 3 + 1.5) - 3) / (1 + 2 + 3 + 3 + 1.5) = 71.428571 % (信息量超大的速算法,看不懂就當是個嘲笑話吧~(≧▽≦)/~)
我們想要獲得的是 可用的@3x圖片文件夾 與 不包括@3x圖片的有問題的資源列表. 對不存在@3x副本的圖片,很大可能這個資源已被廢棄了.這1塊,暫定手動去排查與核實.如果1個圖片仍在使用但是不存在@3x的副本,絕對是RD挖了1個坑,等你來填!
基本思路是:
除以上的第5步之外,前4步都可以自動化運行:
#0. 需要先cd到解壓后的Assets目錄;
#1. 去除 ~ipad 結尾的圖片,如bg_mypage_edit~ipad.png;
find . -iname "*~ipad*.png" -delete
#2. 去除 ~iphone 圖片中的 ~iphone文字;
find . -name "*~iphone.png" -exec sh -c 'for i do mv -- "$i" "${i%~iphone.png}.png"; done' sh {} +
find . -name "*~iphone@2x.png" -exec sh -c 'for i do mv -- "$i" "${i%~iphone@2x.png}@2x.png"; done' sh {} +
find . -name "*~iphone@3x.png" -exec sh -c 'for i do mv -- "$i" "${i%~iphone@3x.png}@3x.png"; done' sh {} +
# 3.將含有@3x的圖片組的@1x @2x @3x 的圖片按順序移動到單獨文件夾 如 assets_3x,并都命名為@3x,此時原文件夾中即為有問題的資源,新文件夾中為有效的資源文件,且只保存了@3x;
mkdir ../assets_3x
find . -name "*@3x.png" -exec sh -c 'for i do mv -- "${i%@3x.png}.png" "../assets_3x/${i%@3x.png}@3x.png"; mv -- "${i%@3x.png}@2x.png" "../assets_3x/${i%@3x.png}@3x.png";mv -- "${i%@3x.png}@3x.png" "../assets_3x/${i%@3x.png}@3x.png";done' sh {} +
# 4.將原資源文件夾命名為assets_error,以供以后使用;
cd ..
mv Assets assets_error
終究得到的 assets_3x 即為可用資源,assets_error 即為需要手動確認可用性的資源.
系列專屬github地址: https://github.com/ios122/ios_assets_hot_update