本文译自:Guides and Sample Code 的App Thinning (iOS, tvOS, watchOS)

App 瘦身

App Store和操作系统通过将app定制到用户的特定设备中来优化安装, 这种瘦身优化,方便了我们更快地下载app,为我们的设备节省空间,提升了用户体验。

下面我们讲讲app 瘦身的三个部分:切片(Slicing)、bitcode、on-demand resources(按需资源)。

1. 切片 (iOS/tvOS)

为不同的设备产生相对应的app bundle变体(variant)的过程称为切片。变体(variant)只包含目标设备所需要的可执行结构和资源。我们开发并上传app到 iTunes Connect,App Store会基于你所选的应用支持设备来产生相应的变体(variant)。图片资源会根据设备分辨率和设备系列(iPad/ iPhone/iPod)进行切片,GPU资源也会根据设备功能进行分片。例如,对于tvOS应用,iOS和tvOS共享目录下的assets被切片,大的app icons被移除了。当用户安装app时,对应于用户设备的变体(variant)会被下载并安装到设备中。
Xcode在开发模式时可模拟切片,我们可以在本地创建并测试变体(variant)。当你在设备上运行app时,Xcode会自动将app切片。当我们打包时,Xcode会包含app的完整版,但允许我们从打的包中导出变体(variant)。

注意:切片app只支持ios 9.0及更高版本的设备,低版本的设备只能从App Store获取通用app(universal app)

在我们正常开发和发布app的过程中,切片的流程是这样进行的:

1、在Xcode中指定目标设备,在asset目录中提供多种分辨率的图片。要对资源切片,必须使用asset 目录。2、在模拟器或真机中编译并运行app。Xcode会针对当前运行设备编译app的变体(variant),减少了测试编译时间,并允许本地测试变体(variant)。3、打包app并为目标设备本地导出变体(variant)。在目标设备上测试所有变体(variant)以提早发现配置问题。4、上传app到iTunes Connect。App Store从上传的app中创建独立的变体(variant),至于有多少变体,取决于Xcode project中的结构和资源的配置。5、在iTunes Connect中发布app的预发布版用以测试。测试者使用TestFlight来安装预发布版的app,TestFlight会下载相应的变体(variant)到测试者的设备中。6、在iTunes Connect中发布app。用户在app支持的设备上安装app,App Store会将相应的变体(variant)下载到用户设备。

2. Bitcode

Bitcode是编译程序的中间表示形式。我们上传到iTunes Connect的包含bitcode的app将在App Store中进行编译和链接。包含Bitcode将允许Apple在将来重新优化您的app二进制文件,而无需将新版本的app提交到App Store。

默认情况下,Xcode会隐藏在构建时生成的符号(symbols),因此Apple不能读取这些符号。 只有当您将应用程序上传到iTunes Connect时选择包含符号,才能将这些符号发送给Apple。 我们必须包含这些符号,用于收集Apple崩溃报告。

注意:对于iOS app,bitcode是默认的,但也是可选项。对于watchOS和tvOS ,bitcode是必选项。如果你提供bitcode,那么app bundle (project里所有target)  中所有的framework也要包含bitcode。在iTunes Connect发布app后,我们可以下载构建的dSYMs文件。

3. On-Demand Resources (iOS, tvOS)

On-Demand Resources(按需资源)是诸如图像和声音的资源,您可以通过关键字对其进行标记,并按组请求。 App Store将资源托管在Apple服务器上,并为我们管理着资源的下载。 按需资源可以实现更快的下载和更小的应用程序大小,从而提高首次启动体验。 例如,游戏应用程序可以将资源划分为游戏级别,仅在应用程序预期用户将移动到该级别时才请求该级别的资源。 同样,只有当用户购买了相应的内购资源时,才能请求这些资源。

操作系统在不再需要或磁盘空间不足时会清除按需资源。 如果我们导出测试版的app,则必须自己托管按需资源。 请注意,不支持可执行的按需资源。 App Store还会对按需资源进行切片,如上面提到的Slicing(iOS,tvOS)中所述,进一步改善了用户体验。

on-demand resources在用户探索应用程序的功能时会根据需要为其提供资源,这种后台工作机制是透明化的。

如何在app设置按需资源,请参考 On-Demand Resources Guide 和 NSBundleResourceRequest Class Reference 这两篇官方文档,我会在之后的博客中翻译它们。

iOS app 瘦身相关推荐

  1. iOS App 瘦身实践总结

    文章最后有我的 12 条小总结. 原文始发地址:我的 GitHub 写在前面 最近公司需求不多,正好研究一下 App 瘦身的办法,写了点小总结. 如果你不知道下面几个问题,不妨可以看看文章. 使用 . ...

  2. iOS app瘦身优化之路

    缩减iOS安装包大小是很多中大型APP都要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源.这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大 ...

  3. iOS APP 瘦身实战

    前言 app为什么要瘦身,无非是下面几个情况, 第一,产品或者运营觉得包体积过大了! 第二,对技术的追求,也给自己涨点绩效! 第三,面试被问到了..... 哈哈 不管哪种情况吧,要瘦身就好好玩下吧. ...

  4. iOS App瘦身---清理iOS工程里无用的图片

    LSUnusedResources 推荐一个清理图片的应用 https://github.com/tinymind/LSUnusedResources 我们的工程在经过多人后,往往会出现较多的垃圾,导 ...

  5. iOS 优化 - 瘦身

    前言 iOS 优化将是一个专题,其中会包括包体积优化(瘦身).启动时间优化.UI 优化等等.那么这个专题的开篇就从瘦身开始吧. APP 的大小是分为 APP 下载大小和安装大小两个概念的. 下载大小是 ...

  6. ios开发app瘦身

    缩减iOS安装包大小是很多中大型APP都要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源.这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大 ...

  7. App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)

    本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. 本文的示例代码主要是基于作者的经验来编写的,若你有其他 ...

  8. App 瘦身最佳实践

    原文链接:www.jianshu.com Android本文会不定期更新,推荐watch下项目.如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...

  9. OS - Bitcode App 瘦身中间码

    1.Bitcode 随着 Xcode7 的发布,Apple 提供了一项新的技术来支持 App 瘦身功能,那就是 Bitcode. 1.BitCode 是什么 Bitcode is an interme ...

最新文章

  1. 解释器模式(interpreter)解析例子
  2. python比前端好学吗_前端学习到底难不难?
  3. lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
  4. Mavan的配置,以及与IDEA版本不一致,解决办法
  5. HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
  6. centos上实现动态路由和NAT功能
  7. 区分元素特性attribute和对象属性property
  8. 求职必看!大厂面试中遇到了发散性问题..... ,怎么办?
  9. 在Vue中使用Echarts可视化库的完整步骤记录
  10. LeetCode - 709. To Lower Case
  11. 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装
  12. the content must be served over HTTPS
  13. java 全双工串口,Java实现全双工串口通信
  14. WebDriver Sierra 10.12.3 N卡驱动
  15. android 蓝牙耳机 sco,java – Android:通过Sco蓝牙耳机播放声音
  16. 超级好用的编辑器UltraEdit
  17. Boost电路连续、断续、空载状态分析与计算
  18. 趣店季报图解:营收3.8亿同比降47% 股价重回1美元以上
  19. Android Studio 实验三:水果店
  20. c语言编写s11次方,c语言编程练习题.docx

热门文章

  1. 12.调整数组顺序,使得奇数在前,偶数在后
  2. 6.4 操作契约 Operation Contracts
  3. 【文心一言 vs. 通义千文】一言对千问:自百度之后,阿里终于还是出手了——通义千问
  4. java中数组的特点归纳
  5. stm32移植到国产MCU雅特力AT32
  6. java合并单元格的快捷键_浅谈java单元格合并的实现(转载)
  7. python打开手机网页_Python selenium 用chrome的Mobile emulation模拟手机浏览器测试手机网页...
  8. NLP进阶之(一)Seq2Seq模型之Chatbot
  9. es5和es6的区别
  10. 第十七届全国大学生智能车华北赛区成绩