iOS 包大小瘦身实践记录
关于此前包大小瘦身的一些浅显认知:
- 资源文件尽量压缩(js或者图片之类的)或者采用服务器CDN下发缓存等
 - 代码尽量简洁,冗余代码删减或者注释,打包不会把注释的代码打进去
 - 善用条件编译,比如Debug宏,release打包时不会把Debug的代码编译进去
 - 导入头文件未被调用的话也不会对打包产物的体积造成影响,一旦调用就会把整个包加进去,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
⚠️需要注意的是: Optimization Level Debug 不要设置fastest,smallest 应该默认为 -O0即可 Release设置fastest,smallest 就行了 不然会发生奇怪的问题: 调试断点会发现空值 虽然NSLog打印有值
做过一些尝试~ (收效甚微减了十多kb,还是不如设置编译器优化选项的效果明显,不过有胜于无嘛)
- 删除单例allocWithZone和copyWithZone相关代码(这个有风险,得和团队协商好编码规范)
 - 删除机型名称翻译代码,用identifier代替 (这里仅作为埋点收集机型,知道identifier可以事后翻译处理)
 - 删除未用到的方法,属性 (可能与Dead Code Stripping作用相同 手动删显得无用功了 求个心安罢了)
 - 直接使用魔法数字或者语法糖字面量,尽量不定义额外的变量或者常量,尤其是全局变量
 - 非必要不使用@property,使用成员变量代替即可,@property会自动合成setter和getter
 - 采用设计模式优化代码,复用公共接口,避免CV重复代码
 
本文来自博客园,作者:CoderWGB,转载请注明原文链接:https://www.cnblogs.com/wgb1234/p/15746237.html

                
            
        
浙公网安备 33010602011771号