前段时间部门开需求会,砍掉了应用中的部分需求。这简直就是给应用瘦身的良机!这个时候测试又提出来:安卓端的 App 在应用市场的包只有 26M,而 iOS 端的 App 在 App Store 上却有 88M。编程
会后,我就找来安卓的测试机,对比了百度、支付宝、微信、京东、新浪和抖音几个 App 在应用市场和 App Store 上的大小,数据以下: 服务器
显而易见,相同的应用,安卓端的应用安装包远小于 iOS 端。究其缘由,笔者虽也查阅了一些资料,鉴于对安卓系统的机制不了解不敢妄言。但由此肯定了一点,iOS 端的包体难以作到安卓端那么小。微信
回归到给应用瘦身的实际问题上来,先来一波常规操做:删除项目中冗余的图片资源!删除项目中要砍掉的功能,各类冗余的文件 /xib/storyboard!移除迭代掉的三方 SDK! 这一个版本简化下来,App Store 中的安装包大小由 88.1M 降为 61.7M, 安装包大小直线降低了百分之三十!架构
这个版本的简化成效是较为可观的,但也值得反思:app
说完这些表象,咱们具体来谈谈 App Thinning,有些人将 App Thinning 和 Bitcode 混为一谈。其实否则,Apple Guides and Sample Code 中介绍 App Thinning 的三个组成部分:App Slicing,Bitcode和On Demand Resources这三个部分:ide
切片是为不一样的目标设备建立和交付应用程序包变体的过程。从 iOS9.0 开始, 你跟往常同样往 iTunes 上提交.ipa文件。App Store 将根据您的应用支持的设备来建立和提供不一样的变体。图片资源根据其分辨率和设备系列进行切片。GPU 资源根据设备功能进行切片。组件化
用户在支持的设备上安装应用程序,应用商店会下载基于用户设备的应用程序变体。学习
从图(2)中咱们能够清楚看到:同一个应用的相同版本,在同使用 2x 图片的机型(iPhone5s/iPhone6)上的包体大小相同,却比使用 3x 图片的 iPhone6plus 略小。也就证实了以上观点。测试
按需资资源是一种资源,例如图像和声音,您可使用标记关键字和组内请求。商店托管 Apple 服务器上的资源并为您管理下载。按需资源可实现更快的下载速度和更小的应用程序大小,从而改善首次发布体验。例如,游戏应用能够将资源划分为游戏级别,而且仅当应用预期用户将移动到该级别时才请求下一级资源。一样,只有当用户购买相应的应用购买时,应用才能请求应用内购买资源。优化
当再也不须要资源而且磁盘空间不足时,操做系统会清除按需资源。若是您导出应用程序以在商店外进行测试或者分发,则必须本身托管按需资源。请注意,不支持可执行的按需资源。
对于用户而言,按需资源在后台透明地工做,在用户浏览应用程序功能时根据须要提供资源。
备注:要在应用程序中设置按需资源,请参阅 Apple Guides and Sample Code 中"On-Demand Resources Guide "。
Xcode默认启用按需应变资源
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,但笔者在一次集成三方 SDK 时,文档上要求关闭 Bitcode。所以,是否开启该属性也要灵活决定。
综上可见, 苹果官方对于应用瘦身的机制已然至关完善,开发者养成良好的编程习惯相当重呀。在探究应用瘦身的过程当中,笔者也看到有关于“无损压缩图片”“静态库瘦身”的这样一些观点,你们也可观摩学习。