包体积瘦身

包体积是什么

包体积优化前,先要明白包体积是什么,在app store上看到的体积又是什么。
在app store里装的是ipa类型的安装包,他存储了iOS应用程序的归档文件,包含被签名过后的二进制文件app、资源信息、配置信息。
在iTunes Connect可以看到我们的app代销分download size和install size



install size 是指安装在设备后占用磁盘空间
download size 是指下载的安装包ipa大小
需要注意app store提示的大小也是针对download size,也就是ipa大小


包大小包含哪几部分

正如上文提到,app store里的ipa包是包含二进制、资源文件、配置文件等。所以优化包体积可以关注在这三部分的优化上。

苹果的包体积优化方案

在iOS9之后苹果推出了三项优化App Slicing、Bitcode、On-Demand Resources

App Slicing

App Slicing帮助开发者把二进制文件中不需要的架构代码去除,并且把assets中不需要的屏幕适配图片清除。所以本地的包和App Store上最终显示的大小是不一样的,而且各个设备间也有差别。


WWDC App Thinning in Xcode

Bitcode

Bitcode是为了统一编译中间产物的格式语法的中间码,和架构有关,也就是也就是说armv7s、arm64会生成两份.bc文件,他们的作用是经过archive的app包在apple后台进行二次编译链接,并且会把不需要的架构移除,移除armv7的.bc保留arm64的.bv.这样的好处是如果以后apple推出了新的CPU架构或是优化了LLVM,就不用重新发包,因为apple会在后台自动为我们优化。

On-Demand Resource#

资源托管在苹果,独立于app store安装包,应用程序按需请求由操作系统管理下载和存储。资源包括下面类别。


On-demand resource types

二进制大小检测

包体积可以通过linkedmap检测,每个静态库的代码端和数据段都可以获取



linkmap主要包括三大部分:

  • Object Files 生成二进制用到的link单元的路径和文件编号
  • Sections 记录Mach-O每个Segment/section的起始地址和大小
  • Symbols 按顺序记录每个符号的起始地址和大小

推荐一个GUI工具快速查看#

每个静态库大小

总大小

或者使用CLI,自己开发的CLI工具用来分析linkmap以及资源大小
壳工程二进制大小

系统链接库二进制大小

静态库target二进制大小

推荐一个三方的工具,不过简单使用发现有链接问题😅#
每个静态库都是由独立团队维护,所以我们需要为他们分配大小合理的上限,如果需要超过配额是可以通过降低对应的大小换取,这个过程可以通过CICD过程作自动检测,如果超过大小上限熔断合并即可。

CICD hook

体积优化手段

我们开发了工程化的性能分析优化工具,包括包大小计算和压缩,代码质量扫描、启动性能分析和监控开发提效工具,下面列举包大小相关的特性

  1. 无用类无用方法扫描:静态检测工程里包含的所有类和方法,未被其他类引用或使用,不包括动态调用方式,按业务线各个库分别输出无用类和方法。
  2. 重复代码扫描:扫描工程中代码拷贝,代码重复按行数判断,最小重复是100行。主要检查单个工程中代码拷贝情况。
  3. 线上无用页面、功能等监控:统计创建的页面、网络请求等线上使用情况,没有使用或是低频页面可以建议删除。
  4. 按日期、版本对比模块包体积变化情况:根据日期和版本对比业务线下各个二进制和资源大小变化情况。
  5. 竞品IPA包自动下载:自动下载竞品最新版本IPA包,分析包大小以及历史功能溯源。
  6. 包大小计算:每天定时更新代码并编译然后计算app整体包大小,输出各个模块二进制大小、资源大小以及单个代码文件二进制大小和单个资源文件大小。
  7. 图片/json文件压缩:将单个图片或者zip包压缩,压缩后大小平均会减少50%以上,色彩较为单一的图片可以压缩70%以上。
  8. 无用图片、重复图片扫描:支持检测app内imageasset、jpg、png、gif、png、webp、json等资源文件使用情况
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容