首页 > 技术文章 > iOS 包大小瘦身实践记录

wgb1234 2021-12-29 19:31 原文

关于此前包大小瘦身的一些浅显认知:

  1. 资源文件尽量压缩(js或者图片之类的)或者采用服务器CDN下发缓存等
  2. 代码尽量简洁,冗余代码删减或者注释,打包不会把注释的代码打进去
  3. 善用条件编译,比如Debug宏,release打包时不会把Debug的代码编译进去
  4. 导入头文件未被调用的话也不会对打包产物的体积造成影响,一旦调用就会把整个包加进去,App瘦身的话这一点需要注意移除未使用的代码

包大小优化实践

参考博客 http://blog.cnbang.net/tech/2544/
① 编译器优化级别Build Settings->Optimization Level,现在Xcode默认就是Fastest, Smalllest,这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小。
② 去除符号信息,Strip Linked Product / Deployment Postprocessing / Symbols Hidden by Default release 版本应该设为 yes,可以去除不必要的调试符号。Symbols Hidden by Default 会把所有符号都定义成private extern,详细信息见官方文档
③ Generate Debug Symbols 设置Release为 NO, 即不产生调试符号 (会影响dsym文件的生成 需考虑线上日志收集/symbols符号翻译等)
④ Dead Code Stripping 设置Release为YES 去掉冗余代码,即裁剪无用代码
Strip Style 符号裁剪类型选择, 主工程选择 All Symbols,静、动态库选择 Non-Global Symbols
Link-Time Optimization设置为 Incremental
Build Settings -> Enable Bitcode -> 设置为 YES (不过老项目一般都不支持这个)
⑧ 将 Deployment Postprocessing 设置为 NO,将 Strip Linked Product 设置为 YES,将 Release 模式的下的 Debug Information Format 修改为 DWARF with dSYM file

做过一些尝试~ (收效甚微减了十多kb,还是不如设置编译器优化选项的效果明显,不过有胜于无嘛)

  1. 删除单例allocWithZonecopyWithZone相关代码(这个有风险,得和团队协商好编码规范)
  2. 删除机型名称翻译代码,用identifier代替 (这里仅作为埋点收集机型,知道identifier可以事后翻译处理)
  3. 删除未用到的方法,属性 (可能与Dead Code Stripping作用相同 手动删显得无用功了 求个心安罢了)
  4. 直接使用魔法数字或者语法糖字面量,尽量不定义额外的变量或者常量,尤其是全局变量
  5. 非必要不使用@property,使用成员变量代替即可,@property会自动合成setter和getter
  6. 采用设计模式优化代码,复用公共接口,避免CV重复代码
未经作者授权,禁止转载
THE END

推荐阅读