IOS App Thining 简介

引言

IOS 平台去年新增了APP Thining 功能,鉴于现在项目的app体积越来越强大,我们准备看看在瘦身上能不能做一些优化,提高更新速度。下面就是我对App Thining 的初步调研。

官方简介:

The App Store and operating system optimize the installation of iOS and watchOS apps by tailoring app delivery to the capabilities of the user’ s particular device, with minimal footprint. This optimization, called app thinning, lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Faster downloads and more space for other apps and content provides a better user experience.

简介

开发者都知道,当前iOS App的编译打包方式是把适配兼容多个设备的执行文件及资源文件合并一个文件,上传和下载的文件则包含了所有的这些文件,导致占用较多的存储空间。

App Thinning 是一个关于节省 iOS 设备存储空间的功能,它可以让 iOS 设备在安装、更新及运行 App 等场景中仅下载所需的资源,减少 App 的占用空间,从而节省设备的存储空间。

根据 Apple 官方文档的介绍,App Thinning 主要有三个机制:Slicing、On-Demand Resources、Bitcode。

Slicing

开发者把 App 安装包上传到 AppStore 后,Apple 服务会自动对安装包切割为不同的应用变体 (App variant),当用户下载安装包时,系统会根据设备型号下载安装对应的单个应用变体。

On-Demand Resources

ORD (随需资源) 是指开发者对资源添加标签上传后,系统会根据 App 运行的情况,动态下载并加载所需资源,而在存储空间不足时,自动删除这类资源。

Bitcode

开启 Bitcode 编译后,可以使得开发者上传 App 时只需上传 Intermediate Representation (中间件),而非最终的可执行二进制文件。 在用户下载 App 之前,AppStore 会自动编译中间件,产生设备所需的执行文件供用户下载安装。
其中,Bitcode 的机制可以支持动态的进行 App Slicing,而对于 Apple 未来进行硬件升级的措施,此机制可以保证在开发者不重新发布版本的情况下而兼容新的设备。

额外说明

如果你的应用也准备启用 Bitcode 编译机制,就需要注意以下几点:

1.Xcode 7 默认开启 Bitcode.如果应用开启 Bitcode,那么其集成的其他第三方库也需要是 Bitcode 编译的包才能真正进行 Bitcode 编译
开启 Bitcode 编译后,编译产生的.app 体积会变大 (中间代码,不是用户下载的包),且.dSYM 文件不能用来崩溃日志的符号化 (用户下载的包是 Apple 服务重新编译产生的,有产生新的符号文件)
通过 Archive 方式上传 AppStore 的包,可以在 Xcode 的 Organizer 工具中下载对应安装包的新的符号文件
2.iOS 9 的 ATS 特性和 App Thinning 特性给开发者带来安全提升和体验上的优化,也是开发者在后续 App 的兼容适配方便会考虑的事项。

结论&思考

虽然,目前大多数非游戏类app开发,还并没有针对app安装包以及在各种设备的不同变体包的大小,投入很多的关注。但是从开发者的角度,培养这种意识也是有必要的。

  1. 一般来讲,app打出的包过大,主要是产品中使用的多媒体资源,尤其是不用或者废弃的序列帧图片,icon资源,这些资源由ImageAssets管理,打包的时候均回打入到包中,因此需要定期清理不用的多媒体资源。

  2. 清理不使用或者功能重复的FrameWork.

一般做的以上几点,都基本上能够保证包体积不会被冗余资源所撑大。剩下的进一步优化,就需要在编程层面,编译层面下文章,或者结合IOS App Thining的技术在app store 下发过程中优化了。