美文网首页
包体积瘦身

包体积瘦身

作者: tom__zhu | 来源:发表于2022-02-06 22:23 被阅读0次

    包体积是什么

    包体积优化前,先要明白包体积是什么,在app store上看到的体积又是什么。
    在app store里装的是ipa类型的安装包,他存储了iOS应用程序的归档文件,包含被签名过后的二进制文件app、资源信息、配置信息。
    在iTunes Connect可以看到我们的app代销分download size和install size



    install size 是指安装在设备后占用磁盘空间
    download size 是指下载的安装包ipa大小
    需要注意app store提示的大小也是针对download size,也就是ipa大小


    包大小包含哪几部分

    正如上文提到,app store里的ipa包是包含二进制、资源文件、配置文件等。所以优化包体积可以关注在这三部分的优化上。

    苹果的包体积优化方案

    在iOS9之后苹果推出了三项优化App Slicing、Bitcode、On-Demand Resources

    App Slicing

    App Slicing帮助开发者把二进制文件中不需要的架构代码去除,并且把assets中不需要的屏幕适配图片清除。所以本地的包和App Store上最终显示的大小是不一样的,而且各个设备间也有差别。


    WWDC App Thinning in Xcode

    Bitcode

    Bitcode是为了统一编译中间产物的格式语法的中间码,和架构有关,也就是也就是说armv7s、arm64会生成两份.bc文件,他们的作用是经过archive的app包在apple后台进行二次编译链接,并且会把不需要的架构移除,移除armv7的.bc保留arm64的.bv.这样的好处是如果以后apple推出了新的CPU架构或是优化了LLVM,就不用重新发包,因为apple会在后台自动为我们优化。

    On-Demand Resource#

    资源托管在苹果,独立于app store安装包,应用程序按需请求由操作系统管理下载和存储。资源包括下面类别。


    On-demand resource types

    二进制大小检测

    包体积可以通过linkedmap检测,每个静态库的代码端和数据段都可以获取



    linkmap主要包括三大部分:

    • Object Files 生成二进制用到的link单元的路径和文件编号
    • Sections 记录Mach-O每个Segment/section的起始地址和大小
    • Symbols 按顺序记录每个符号的起始地址和大小

    推荐一个GUI工具快速查看#

    每个静态库大小
    总大小
    或者使用CLI,自己开发的CLI工具用来分析linkmap以及资源大小
    壳工程二进制大小
    系统链接库二进制大小
    静态库target二进制大小

    推荐一个三方的工具,不过简单使用发现有链接问题😅#
    每个静态库都是由独立团队维护,所以我们需要为他们分配大小合理的上限,如果需要超过配额是可以通过降低对应的大小换取,这个过程可以通过CICD过程作自动检测,如果超过大小上限熔断合并即可。

    CICD hook

    体积优化手段

    我们开发了工程化的性能分析优化工具,包括包大小计算和压缩,代码质量扫描、启动性能分析和监控开发提效工具,下面列举包大小相关的特性

    1. 无用类无用方法扫描:静态检测工程里包含的所有类和方法,未被其他类引用或使用,不包括动态调用方式,按业务线各个库分别输出无用类和方法。
    2. 重复代码扫描:扫描工程中代码拷贝,代码重复按行数判断,最小重复是100行。主要检查单个工程中代码拷贝情况。
    3. 线上无用页面、功能等监控:统计创建的页面、网络请求等线上使用情况,没有使用或是低频页面可以建议删除。
    4. 按日期、版本对比模块包体积变化情况:根据日期和版本对比业务线下各个二进制和资源大小变化情况。
    5. 竞品IPA包自动下载:自动下载竞品最新版本IPA包,分析包大小以及历史功能溯源。
    6. 包大小计算:每天定时更新代码并编译然后计算app整体包大小,输出各个模块二进制大小、资源大小以及单个代码文件二进制大小和单个资源文件大小。
    7. 图片/json文件压缩:将单个图片或者zip包压缩,压缩后大小平均会减少50%以上,色彩较为单一的图片可以压缩70%以上。
    8. 无用图片、重复图片扫描:支持检测app内imageasset、jpg、png、gif、png、webp、json等资源文件使用情况

    相关文章

      网友评论

          本文标题:包体积瘦身

          本文链接:https://www.haomeiwen.com/subject/nzdtkrtx.html