本文会基于一个已有的脚本工具自动导出全部的图片;最终给出的是一个从 Images.xcassets 到基于文件夹的精简 合适 的图片资源集的完整过程.难点在于从完整图片集到精简图片集,确定是基于一个定制化的脚本,自定义导出的.若是本身手动导出?那可有的忙喽~ios
Images.xcassets,是Xcode项目中的,用于存放资源文件.那么咱们为何不直接处理 Images.xcassets 呢?由于Images.xcassets中存放的图片名称可能与图片的资源名称不一致,最终决定图片资源名的是资源文件夹的名称;也有可能Images.xcassets存放的是pdf格式的图片,这样能够自动预编译对应尺寸的图片资源.git
Images.xcassets 编译后,最终ipa包中,是以Assets.car包的形式出现的,内部是处理后的图片名.此处的文件名与咱们代码中引用的图片资源名称是一致的.github
也就是说: 直接基于Assets.car进行处理,可使咱们的使用图片处的代码变动尽量少.算法
Assets.car 没法直接zip解压,须要借助专门的工具,此处推荐: cartool 使用方法,参见: iOS学习之解压Assets.carshell
若是你缺乏足够复杂的Assets.car或者cartool用法有问题,能够直接使用我处理过的资源:https://github.com/ios122/ios_assets_hot_update/tree/master/resiphone
针对文章github给定的目录, cartool的用法,能够简述为: cd 到 res目录,而后工具
mkdir Assets ./cartool ./Assets.car ./Assets
从 Assets.car 导出后的图片,大体有如下几种:学习
以上图片的缘由,很大一部分是因为App迭代引发的.对于一个图片,存在上述不一样状况时,图片一般加载与当前屏幕比例(scale)最符合的图片,具体细节下一篇文章会更完整描述.优化
通过我本身的实验与网上各类资料的查询,使用 @3x 的图片是能够同时做为 iPhone和iPad的通用图标的.固然,这是须要自定义 imageNamed方法,也是下一篇文章的重点. 2套共5个图片,如今只须要1个图片,理论图片资源体积能够减少 ((1 + 2 + 3 + 3 + 1.5) - 3) / (1 + 2 + 3 + 3 + 1.5) = 71.428571 % (信息量超大的速算法,看不懂就当是个冷笑话吧~(≧▽≦)/~)code
咱们想要获取的是 可用的@3x图片文件夹 与 不包含@3x图片的有问题的资源列表. 对于不存在@3x副本的图片,很大可能这个资源已经被废弃了.这一块,暂定手动去排查与核实.若是一个图片仍在使用可是不存在@3x的副本,绝对是RD挖了一个坑,等你来填!
基本思路是:
除了以上的第五步之外,前四步均可以自动化运行:
#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