美文网首页
ios代码瘦身

ios代码瘦身

作者: 二斤寂寞 | 来源:发表于2018-12-25 10:24 被阅读33次

对iOS安装包瘦身是很多App都必须要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源。这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大,又因为AppStore会对可执行文件加密,导致可执行文件的压缩率低,压缩后可执行文件占整个APP安装包的体积比例大约有80%~90%,优化还是有意义的。

分析ipa文件:iOS可执行文件的组成

通过生成LinkMap文件,分析源代码生成的编译文件的大小。在Build Settings中Write Link Map File设置为Yes (记住release时候不要设置为Yes)。

编译之后会在build目录中生成两个LinkMap文件: XXX-LinkMap-normal-i386和XXX-LinkMap-normal-x86_64,分别代表在模拟器中32位和64位指令集生成的LinkMap文件。
LinkMap的文件详细结构解释

LinkMap会包含每个可执行文件的偏移量及大小,所以可以很方便的知道每个可执行文件的大小。
编译目录文件:~/Library/Developer/Xcode/DerivedData/XXX-eumsvrzbvgfofvbfsoqokmjprvuh/Build/Intermediates/XXX.build/Debug-iphoneos/XXX.build/
LinkMap分析工具

image.png LinkMap使用说明.png

App瘦身checkList

image.png 参考图片.png
编译选项

1.编译器优化级别
Build Settings->Optimization Level有几个编译优化选项,release版应该选择Fastest, Smalllest,这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小。

2.去除符号信息
Strip Linked Product / Deployment Postprocessing / Symbols Hidden by Default 在release版本应该设为yes,可以去除不必要的调试符号。Symbols Hidden by Default会把所有符号都定义成”private extern”,详细信息见官方文档
这些选项目前都是XCode里release的默认选项,但旧版XCode生成的项目可能不是,可以检查一下。

资源瘦身:

1.清理无用图片
2.清理重复图片
3.无损压缩图片

代码瘦身
  1. 已经下线的陈旧代码,AB试验已经下线的代码
  2. 通过转H5、Hybrid或者RN实现的Native功能,可以定期清理
  3. 一些非核心Hybrid或者RN模块,可以考虑不要打包进入APP,通过动态下发的方式获取
  4. 代码的重构,UI组件、业务逻辑的重用等等
  5. 冗余字符串
    代码上定义的所有静态字符串都会记录在在可执行文件的__cstring段,如果项目里Log非常多,这个空间占用也是可观的,也有几百K的大小,可以考虑清理所有冗余的字符串。另外如果有特别长的字符串,建议抽离保存成静态文件,因为AppStore对可执行文件加密导致压缩率低,特别长的字符串抽离成静态资源文件后压缩率会比在可执行文件里高很多。

资源瘦身

1、删除无用的图片文件

LSUnusedResources查找无用的图片文件

image.png
2、重复的图片文件

查找重复图像文件,使用Duplicate Photo Finder(App Store有免费下载)


image.png
3、无损压缩图片

ImageOptim进行png文件的无损压缩
注意:
实际生产的安装包体积没有变小,因为COMPRESS_PNG_FILESSTRIP_PNG_TEXT设置成了YES,Xcode会重新压缩一次图片,但是压缩之后的图反而比ImageOptim处理之后的图更大。改成NO就能让项目中的PNG保持不变。如果搜不到,手动添加一下。

image.png
image.png image.png
4、WebP图片压缩 WebP转换工具

WebP是Google提供的一种图片编码格式,通常情况下WebP格式的图片是原始JPG/PNG图片的1/3,所以对于重度依赖图片显示的应用,转换使用WebP可以节省大量的网络传输数据和时间。对于APP瘦身,使用WebP格式可能是一种方式,可以使用WebP格式的图片替代现有的图片资源,可以一定程度的节省空间。

注:iOS原生并不支持WebP格式加载,需要引入SDWebImage/WebP

代码瘦身

1、AppCode代码静态检查

AppCode提供了非常强大的代码静态检查工具,使用Inspect Code,可以找到很多代码优化的地方。可以参考AppCode inspections for your code perfection

2、清除无用代码
  • AppCode搜索出来的无用的Class,会有误报需要仔细检查每一个报错的代码。
  • 使用Fui查找发现无用文件,可以用于查找无用的import,同时也提供xcfui 可以和Xcode集成。

清除无用类
fui find
fui --path=~/source/project/Name --ignore-path=Pods --ignore-path=Libraries find

  • 清除无用的Import

fui -g --path=~/source/project/Name --ignore-path=Pods find
fui -l --path=~/source/project/Name --ignore-path=Pods find

  • 清除无用的Method

  • 查找相似的代码:SameCodeFinder可以查找到相似的代码,最后一位数字代表两个文件的海明距离,数字越小说明两个文件越类似。

  • 静态库瘦身
    暂时还没选择,可以参考文章iOS APP安装包瘦身实践

    项目中多少都会引入一些第三方静态库,通过lipo工具可以查看支持的指令集,比如:
    lipo -info libWeChatSDK.a
    i386,x86_64,这不是模拟器的指令集么?去掉看能不能减少体积?armv7可以兼容armv7s,armv7s也可以删了,只保留armv7和arm64

    lipo libWeChatSDK.a -thin armv7 -output libWeChatSDK-armv7.a
    lipo libWeChatSDK.a -thin arm64 -output libWeChatSDK-arm64.a
    lipo create libWeChatSDK-armv7.a libWeChatSDK-arm64.a -output libWeChatSDK-device.a
    ls -ll
    -rw-r--r--  1 Vic  staff   5957080 Jan  6 14:40 libWeChatSDK-device.a
    -rw-r--r--  1 Vic  staff  14410376 Nov 25 11:53 libWeChatSDK.a
    
eg.png image.png image.png

ipa优化了5M左右。大部分是图片资源,和无用的文件。
参考文章

iOS可执行文件瘦身
iOS APP瘦身实践,资源优化、编译器配置优化、可执行文件优化
滴滴出行iOS端瘦身实践, 提供了查找无用图片的工具、WebP图片压缩、基于clang plugin实现查找无用代码查找类似代码
基于clang插件的一种iOS包大小瘦身方案
检测出objc项目中无用方法,然后一键全部清理
lipo command(Mac)
iOS APP分析无用代码

相关文章

  • iOS代码瘦身实践

    iOS代码瘦身实践 iOS代码瘦身实践

  • ios代码瘦身

    对iOS安装包瘦身是很多App都必须要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源。这些资源...

  • iOS App瘦身

    iOS App瘦身 关于app瘦身,你能想到什么? 删除无用类 删除无用方法 代码相似度分析 删除无用图片 无损压...

  • iOS代码瘦身实践

    原文iOS代码瘦身实践 1 分析当前ipa的组成 一般一个ipa会包含: 1) 资源文件 本地文件:数据、配置、数...

  • iOS代码瘦身实践

    iOS代码瘦身实践 1 分析当前ipa的组成 一般一个ipa会包含: 1. 资源文件 本地文件:数据、配置、数据库...

  • iOS代码瘦身实践

    1 分析当前ipa的组成 一般一个ipa会包含: 1. 资源文件 本地文件:数据、配置、数据库等等字体文件图片资源...

  • iOS开发 代码瘦身

    本文章借鉴:作者:斑驳的流年无法释怀链接:https://www.jianshu.com/p/991278b459...

  • 真题

    1、iOS瘦身:代码瘦身、资源优化。(安装包体积优化,图片资源优化的策略)(怎么删除无用的图片?怎么压缩图片?)2...

  • iOS瘦身各种方案

    iOS瘦身之删除无用的mach-O文件 iOS微信安装包瘦身 基于clang插件的一种iOS包大小瘦身方案 以往C...

  • IOS 瘦身

    对于ios来说,由于工程的体量达到一定级别,瘦身是必须的,大的方向分为资源瘦身和代码精简两大方向,当然还有个重要的...

网友评论

      本文标题:ios代码瘦身

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