iOS减包实践-大图是否用Assets管理?

Asset Catalog优势

  • 使用方面
    • 对图片资源方便统一管理;
    • 方便图片拉升;
    • 方便适配暗黑模式;
  • 性能方面
    • xcassets目录下的所有图片最终被打包到Assets.car文件中,多张图片被整合为一张大图。App运行时根据索引从大图中获取单张小图片,可以减少文件IO次数,Performance会更好;
    • Apple为了优化iPhone读取图片的速度,Xcode编译时,Asset Catalog中的png图片转换成CgBI格式(非标准的png格式),jpg格式图片会转为png.其他非Asset Catalog管理的图片资源,在编译时不会被优化;
    • 使用Asset Catalog管理的图片能被App Store工具app thinning处理,处理后用户只会下载匹配其设备分辨率的图片资源,用户下载的包更小;

是否所有图片都适合用Assets管理?

先说结论

  • Assets适合用来管理icon类会重复使用的小图;
  • 背景图这类的大图不适合用Assets管理;

例子

image.png

图片大小:39524字节
未添加图片时Assets.car的大小:5,026,528字节
添加图片后Assets.car的大小: 5,083,664字节

添加图片后Assets.car大小增大了57136字节,比原图多了17612字节;

通过 assetutil 工具对Assets.car进行解析,查看图片在Assets.car中的大小:

image.png

图片放到Assets中,Xcode做了什么事情?

Xcode会执行iphoneos-optimize脚本对Assets中的图片进行优化

脚本路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/iphoneos-optimize

通过查阅相关资料发现,Compress PNG Files做的并不是单纯的压缩数据,而是把文件格式也做了修改,Apple是将png图片转换成了一种CgBI格式:

These modifications cause the generated images to be invalid as per the current version of the PNG standard.

extra critical chunk (CgBI)
byteswapped (RGBA -> BGRA) pixel data, presumably for high-speed direct blitting to the framebuffer
zlib header, footer, and CRC removed from the IDAT chunk
premultiplied alpha (color' = color * alpha / 255)

明显的改动就是在IHDR块之前插入了CgBI块来表示这种格式,同时修改了IDAT块中的数据,原因就是在iPhone中,图像是以BGRA格式在内存中处理的,到这里就可以发现,其实这个所谓的Compress PNG Files,最主要的目的并不是压缩图片的大小,而是将图片转换成iPhone能更方便处理的格式,加快处理速度。

因为CgBI的IDAT是BGRA格式的,所以不管之前的IDAT是否有Alpha通道,在处理的时候,都会增加alpha通道,其次就是因为每一行数据的filter不同,apple处理的时候,默认每一行都使用相同的filter,而原始文件则可以通过更好的算法,对不同的数据行使用不同的filter,为后面的数据压缩提供更容易压缩的数据。

工具

  • assetutil
    将Assets.car中一些信息资源解析成json格式;

    sudo xcrun — sdk iphoneos assetutil — info ./Assets.car > ./Assets.json

  • AssetCatalogTinkerer
    查看Assets.car中所有图片的可视化工具,还可以导出图片;

    https://github.com/insidegui/AssetCatalogTinkerer

    image.png

参考

iOS减包实战:Compress PNG Files作用分析
Assets.car解剖作弊条
iOS获取ipa及解压Assets.car,兼容M1
抖音品质建设 - iOS 安装包大小优化实践篇
iOS 优化 - 瘦身

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容