App包瘦身技术优化

本文主要介绍了App包瘦身的优化步骤,资源部分处理的较多,但像三方库、可执行文件瘦身,涉及较少。

一、成果(ipa包降63M,AppStore降30M~40M,不同机型苹果会做包的切割)

优化前:
iPhone 8 Plus    5.7.6    AppStore:198M    ipa:180.23M
iPhone 11 Pro    5.7.6    AppStore:183M    ipa:180.23M

优化后:
iPhone 8 Plus    5.7.7    AppStore:159M    ipa:117.25M
iPhone 11 Pro    5.7.7    AppStore:152M    ipa:117.25M

二、快速瘦身,主要步骤

1、 删除2x图,我们的项目里面全部用3x图

2、 查找无用的文件,使用三方库:fui(https://github.com/dblock/fui),我们项目只查找了业务文件夹,查询时间1~2小时,将查完后的文件和项目比对,一一手动删除,使用步骤如下:(这一步可以重复做2-3次以上,有些文件删完或许会有新的文件可删)

3、删除无用资源图,使用三方库:LSUnusedResources(https://github.com/tinymind/LSUnusedResources),查完后的图片和项目比对,一一手动删除,使用步骤如下:

image.png

4、无损图片压缩,工具:Optimage(https://xclient.info/s/db75908c-c3cf-1a96-711e-f6fa2eb38bdd.html#versions),3.3.1及以下版本可用,高版本每天只能压缩30张图片。使用如下:
① 检测设置是否正确:默认是无损,且在原路径上直接覆盖替换

Frame Rale Auematio.png

② 直接拖images里面的文件夹进来即可(建议分批压缩,一次太多可能压缩不了)
JaTouch.png

Dptimage.png

5、针对一些大图片,150K以上可再次压缩:https://tinypng.com,优点:还能在压缩50%左右,可多次压缩,缺点:只能一张一张处理。可以从储存空间直接看到资源大小,找到项目的images文件,针对大图单独处理。

储存堂價 支特 服务.png

image.png

6、较大gif压缩:https://gifcompressor.com

7、排查项目内引入的三方库是否可以删除、video资源是否可以被压缩(需要压缩找UED)

8、排查可执行文件,LinkMap(https://github.com/huanxsd/LinkMap),定位较大的文件,看是否可以删除,这一步结合mach-o还能删掉不少重复代码,由于时间问题没细细的排查

image.png
image.png

三、我们App具体实操及结果

1、删除2x图后:
    5.7.7    #7    ipa包178.33M
2、删除290个无用文件后:(因为中间加入OCR识别的SDK增大了2.5M,这一步相当于减少了0.8M,虽然效果甚微,但可以删除更多的图片资源)
    5.7.7    #18    ipa包180.01M
3、删除近600张图片资源后:
    5.7.7    #29    ipa包164.41M
4、无损压缩近2000张图片资源后:
    5.7.7    #40    ipa包150.81M
5、有些gif替换成svga图、gif图压缩、video压缩后
    5.7.7    #61    ipa包140.95M
6、使用tinypng压缩150k以上大图后:
    5.7.7    #66    ipa包123.22M
7、启动图使用LaunchScreen.storyboard,我们项目已经是这种方案,画的UI,也没有启动大图
8、排查项目内引入的三方库,发现都在使用,不能删除
9、检查可执行文件,占用的大小,LinkMap(https://github.com/huanxsd/LinkMap),快速定位占用较大的可执行文件,看了下大文件都是三方库占用较大,也都在使用,没法删除。至于无用代码,这部分牵扯的太多,有些还可能是运行时使用的,就算能删一部分,也效果甚微,未来可以考虑整理项目接口、排查无用业务来处理。
10、配置项排查
① 去除编译指令集:https://www.jianshu.com/p/35c73cfbd153,查了下我们项目Architectures是:armv7、arm64,VALID_ARCHS是:armv7s、arm64,两个取交集,最终编译的ipa包的可执行文件只支持arm64,无需在优化;
② Build Settings->Optimization Level有几个编译优化选项,release版应该选择Fastest, Smalllest,这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小。我们项目已经是如此设置,无需优化;
③ Build Settings->Deployment Postprocessing、Strip Linked Product、Strip Debug Symbols During Copy、Symbols hidden by default四者设置为YES后可以去掉不必要的符号信息,减少可执行文件大小,去除了符号信息之后我们就只能使用dSYM来进行符号化了,所以需要将 Debug Information Format 修改为DWARF with dSYM file。没有效果,但这次也给设置上了;
④ Build Settings->Dead Code Stripping(仅对静态语言有效):删除静态链接的可执行文件中未引用的代码。Debug设置为NO, Release设置为YES可减少可执行文件大小。Xcode默认会开启此选项,C/C++/Swift等静态语言编译器会在 link的时候移除未使用的代码,但是对于Objective-C等动态语言是无效的。因为Objective-C是建立在运行时上面的,底层暴露给编译器的都是Runtime源码编译结果,所有的部分应该都是会被判别为有效代码。我们项目已经是如此设置,无需优化;
⑤ 开启 Pod 库和主工程 Xcode Build Settings 中的 ASSETCATALOG_COMPILER_OPTIMIZATION space 选项。没有效果,但这次也给设置上了;
11、视频业务下线,删除Agora后:
    5.7.7    #81    ipa包119.14M
12、最后找安卓核对业务,发现5.7.7之前有些业务线已经废弃,再次删除一部分资源后:
    5.7.7    #84    ipa包117.25M

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容