iOS App Thinning 实践


App随着版本迭代、业务扩张、人员更迭、架构变更使项目变得越来越臃肿。废弃的业务代码、冗余无用的类方法和声明、无用的资源文件穿插在项目中使App的包越来越大。为了保持项目整洁,提升开发和用户体验App开启本次Apps瘦身之旅。


ipa文件构成



通过对包内容构成的分析,可以围绕资源文件、可执行文件、xcode编译过程三个方面去做优化。

优化点

资源优化

1、通过工具压缩图片清理无用图片

Imageoptim:图片压缩工具,跟xcode编译设置 compress png files 不能同时启用。详见Imageoptim官网说明。
LSUnusedResources、FengNiao 清理无用图片。

2、压缩音视频文件等可压缩大文件

3、手动清理无效未使用资源(json、text、plist 等文本资源)。

可执行文件优化

1、使用Appcode(code->inspect code) 代码检测分析功能删除无用类和无用方法、清理无效声明、#import/#include、清理未使用变量。

同时通过Appcode 还能分析出其他项目代码中存在的问题,也可以一并处理,可避免一些潜在crash,内存泄漏等问题。

2、第三方库

整合删除功能相似相近的第三方库,不要为了一个小功能而引入整个库。对第三方库的使用进行严格的准入评估,避免滥用。


xcode编译优化

Optimization Level

该选项表示编译器优化代码性能的不同方式。具体表现为项目大小或者编译时间。实现机制为不同程度的减少代码执行需要的loop unrolling(一种牺牲程序的尺寸来加快程序执行速度的优化方法)。优化程度从fast,faster,fastest依次增强。这些选项会给编译器权限去修改代码的结构以便节省编译时间。任何形式的代码优化都会以时间为代价

Release模式设置为Fastest, Smallest [-Os]可以显著的减小编译文件大小,该选项会自动尝试fastest和smallest两种极端优化方法,选择最合适的值。苹果建议只为Release模式设置该选项
Optimization Leveal各个选项的意义
Xcode Setting
Describtion

None
The compiler does not attempt to optimize code. Use this option during development when you are focused on solving logic errors and need a fast compile time. Do not use this option for shipping your executable.(编译器不进行任何代码优化)

Fast
The compiler performs simple optimizations to boost code performance while minimizing the impact to compile time. This option also uses more memory during compilation(编译器进行小幅度代码优化,同时消耗更多的内存)

Faster
The compiler performs nearly all supported optimizations that do not require a space-time tradeoff. The compiler does not perform loop unrolling or function inlining with this option. This option increases both compilation time and the performance of generated code.(该选项会进行所有可用的优化选项而不用花费额外的时间和内存。该选项不会执行循环展开或者内嵌函数。该选项会在提升代码性能的同时增加编译时间)

Fastest
The compiler performs all optimizations in an attempt to improve the speed of the generated code. This option can increase the size of generated code as the compiler performs aggressive inlining of functions.This option is generally not recommended.(该选项会作出尽可能多的尝试来提高编译性能。但同时会和内嵌函数机制存在冲突。一般不建议使用该选项)

Fastest,Smallest
The compiler performs all optimizations that do not typically increase code size. This is the preferred option for shipping code because it gives your executable a smaller memory footprint.(编译器会进行所有可用的优化而不显著的增加运行空间。该选项是打包代码的最优选项)

Enable bitcode
设置为YES(项目中所有的库都必须支持bitcode)
Bitcode为LLVM编译器的中间代码的一种编码,LLVM的编译原理是前端负责把项目代码翻译成Bitcode中间码,然后再根据不同目标机器芯片平台转换为相应的汇编指令以及翻译机器码。使用Bitcode的不便之处是无法还原崩溃现场找到原因。
Strip Symbol Information
1、Deployment Postprocessing2、Strip Linked Product3、Strip Debug Symbols During Copy4、Symbols hidden by default
设置为YES可以去掉不必要的符号信息,可以减少可执行文件大小。
Release 设置为YES Debug 设置为NO,

Dead Code Stripping
删除静态链接的可执行文件中未引用的代码
Debug 设置为NO Release 设置为YES 可减少可执行文件大小

Assert Catalog Compiler
optimization 选项设置为 space 可以减少包大小
Generate Debug Symbols
Enables or disables generation of debug symbols. When debug symbols are enabled, the level of detail can be controlled by the build ‘Level of Debug Symbols’ setting.

调试符号是在编译时生成的。当Generate Debug Symbols选项设置为YES时,打包会生成symbols 文件。设置为NO则ipa中不会生成symbol文件,可以减少ipa 大小
xcode 默认选择为YES,不建议关闭该选项,可能会影响到app调试。

Reference

Xcode缩小ipa包大小及symbols设置等
App Thinning (iOS.tvOS,wtchOS)
Build Setting Reference
Tuning for Performance and Responsiveness

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

推荐阅读更多精彩内容