漫谈iOS的应用瘦身

        前段时间部门开需求会,砍掉了应用中的部分需求. 这简直就是给应用瘦身的良机! 这个时候测试又提出来:安卓端的app在应用市场的包只有26M,而iOS端的app在App Store上却有88M. 

        会后,我就找来安卓的测试机,对比了百度. 支付宝. 微信. 京东. 新浪和抖音几个app在应用市场和App Store上的大小,数据如下:

AppStore和应用市场的对比图

        显而易见,相同的应用,安卓端的应用安装包远小于iOS端.究其原因,笔者虽也查阅了一些资料,鉴于对安卓系统的机制不了解不敢妄言.但由此确定了一点, iOS端的包体难以做到安卓端那么小. 

        回归到给应用瘦身的实际问题上来, 先来一波常规操作: 删除项目中冗余的图片资源! 删除项目中要砍掉的功能, 各种冗余的文件/xib/storyboard! 移除迭代掉的三方SDK! 这一个版本简化下来,App Store中的安装包大小由88.1M降为61.7M, 安装包大小直线下降了百分之三十! 

        这个版本的简化成效是较为可观的,但也值得反思:

        · 陈旧冗余代码/文件的大量存在: 一方面,据说是因为项目的核心功能是从前几个实验app中迭代而来,简单的copy看似大大缩短了开发工期,但公司的项目本身一直并非组件化开发,冗余庞杂在所难免. 在这里,组件化的优势就显现出来.

        · 反复无常的需求变动,加之研发本身的惰性: 需求的经常变更多少会摧残研发敏感的心灵, 一个功能今天要明天不要后天放一放也是蛮常见.久而久之,一个熬夜写出来&自己又实在喜欢的功能板块在面临夭折时,研发可能就会先放着不管.这样的操作多了,时间一长,几经转手,这样的代码/文件就会沉睡在项目中.和同行的一些大牛交流,他们也普遍吐槽项目中存在很多这样的问题.最为离奇的是,一个做音视频SDK的大牛说,他接手的功能里有个控制器代码有5000行, 这个文件有三四年几乎没怎么动过.一系列惨痛的教训告诉我们: 当删则删,良好的编程习惯非常重要! 做好提交工作,写清楚提交内容即可!

        说完这些表象,我们具体来谈谈App Thinning,有些人将App Thinning和Bitcode混为一谈.其实不然, Apple Guides and Sample Code  中介绍App Thinning的三个组成部分: App Slicing, Bitcode和On Demand Resources这三个部分:

· App Slicing(应用切片): 

        切片是为不同的目标设备创建和交付应用程序包变体的过程.从iOS9.0开始,  你跟往常一样往iTunes上提交.ipa文件. App Store将根据您的应用支持的设备来创建和提供不同的变体.图片资源根据其分辨率和设备系列进行切片.GPU资源根据设备功能进行切片.

        用户在支持的设备上安装应用程序, 应用商店会下载基于用户设备的应用程序变体.

(1) App Slicing 
(2) 三种机型App Store上安装包的大小

          从图(2)中我们可以清楚看到: 同一个应用的相同版本,在同使用2x图片的机型(iPhone5s/iPhone6)上的包体大小相同,却比使用3x图片的iPhone6plus略小 .也就证明了以上观点.

· On Demand Resources(随需应变资源): 

        按需资资源是一种资源,例如图像和声音,您可以使用标记关键字和组内请求.商店托管Apple服务器上的资源并为您管理下载.按需资源可实现更快的下载速度和更小的应用程序大小,从而改善首次发布体验.例如,游戏应用可以将资源划分为游戏级别,并且仅当应用预期用户将移动到该级别时才请求下一级资源.同样,只有当用户购买相应的应用购买时,应用才能请求应用内购买资源.

       当不再需要资源并且磁盘空间不足时,操作系统会清除按需资源.如果您导出应用程序以在商店外进行测试或者分发,则必须自己托管按需资源.请注意,不支持可执行的按需资源.

        对于用户而言,按需资源在后台透明地工作,在用户浏览应用程序功能时根据需要提供资源.

备注:要在应用程序中设置按需资源,请参阅Apple Guides and Sample Code 中"On-Demand Resources Guide ".

Xcode默认启用按需应变资源

· Bitcode(位码): 

        Bitcode通过消除针对不同架构的优化,以及只下载相关优化,从而使下载变得更小.

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.

Xcode hides symbols generated during build time by default, so they are not readable by Apple. Only if you choose to include symbols when uploading your app to iTunes Connect would the symbols be sent to Apple. You must include symbols to receive crash reports from Apple.

                                                           ----Apple Guides and Sample Code

       位码是编译程序的中间表示形式.你上传到iTunes Connect中包含位码的应用程序将被编译并链接到商店.包括位码将允许苹果在未来重新优化你的应用程序二进制而不需要提交一个新的应用程序版本到App Store.

        Xcode隐藏了默认情况下在构建期间生成的符号,因此苹果无法读取这些符号,只有当你的应用程序上传到iTunes Connect时包含符号,这些符号才会被发送到苹果.你必须包含一些符号来接收来自苹果的崩溃报告.

Xcode默认启用Bitcode

       Xcode默认启用Bitcode, 但笔者在一次集成三方SDK时,文档上要求关闭Bitcode. 因此,是否开启该属性也要灵活决定.

        综上可见, 苹果官方对于应用瘦身的机制已然相当完善, 开发者养成良好的编程习惯至关重呀. 在探究应用瘦身的过程中, 笔者也看到有关于“无损压缩图片”“静态库瘦身”的这样一些观点, 大家也可观摩学习.


参考资料:

1. Working with App Thinning in iOS 9

2. Apple Guides and Sample Code

3.从Xcode编译时自带的“图片压缩”说起

4.iOS APP安装包瘦身实践

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

推荐阅读更多精彩内容