漫谈 App 瘦身

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

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

在这里插入图片描述

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

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

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

  1. 陈旧冗余代码/文件的大量存在: 一方面,听说是由于项目的核心功能是从前几个实验app中迭代而来,简单的 copy 看似大大缩短了开发工期,但公司的项目自己一直并不是组件化开发,冗余庞杂在所不免。 在这里,组件化的优点就显现出来。
  2. 反复无常的需求变更,加之研发自己的惰性:需求的常常变动多少会摧残研发敏感的心灵,一个功能今天要明天不要后天放一放也是蛮常见。长此以往,一个熬夜写出来&本身又实在喜欢的功能板块在面临夭折时,研发可能就会先放着无论。这样的操做多了,时间一长,几经转手,这样的代码/文件就会沉睡在项目中。和同行的一些大牛交流,他们也广泛吐槽项目中存在不少这样的问题。最为离奇的是,一个作音视频 SDK 的大牛说,他接手的功能里有个控制器代码有 5000 行,这个文件有三四年几乎没怎么动过。一系列惨痛的教训告诉咱们:当删则删,良好的编程习惯很是重要!作好提交工做,写清楚提交内容便可!

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

  • App Slicing(应用切片):

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

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

(1) App Slicing

在这里插入图片描述

从图(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。所以,是否开启该属性也要灵活决定。

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

相关文章
相关标签/搜索