Xcode 弃用 Bitcode,导致应用体积大幅增加
Emerge 是一个监测和减少应用程序大小的平台,可以持续监测并分析应用程序二进制大小,帮助开发者编写更小、更好的代码。近日 Emerge 发布了一份报告,显示最新版本的 Xcode 存在会无意中增加应用程序体积的问题。
Xcode 14 于今年 9 月份正式发布,新版本添加了对 Swift 5.7 的支持,并针对 macOS Ventura、iOS/iPadOS 16 等最新系统添加了 SDK,除此之外,新版本 Xcode 的速度更快、体积缩小了 30%、增加的并行性使得构建项目的速度提高了 25%,以及长时间运行测试的速度提高了 30%。
但在 Xcode 14 发布后不久,Emerge 发现一些 iOS 应用程序的体积则是出现了明显增加,其中从 9 月中旬到 10 月初之间,观测到:
- 耐克 iOS 应用程序的安装大小一开始仅为 182.2MB,之后变成了 322.1MB,空间占用增加了 76%
- American Airlines(美国航空)从 182.2MB 增加到 389.1MB,增加了 113%
- Chime 从 162.8MB 增加到 212.8MB,增加了 31%
在上述这些例子中,应用空间占用突然增大都是由于这些应用程序首次使用了 Xcode 14 构建,而归根结底,导致这个问题发生的原因就是 Xcode 14 默认禁用了 Bitcode。
Xcode 14 更新文档中写道:
Xcode 不再默认构建 Bitcode,在未来的 Xcode 版本中,使用 Bitcode 构建的功能将被移除。含有 Bitcode 的 IPA 将在提交给 App Store 之前被剥离 Bitcode。
什么是 Bitcode
Bitcode 是打包应用程序的一种方式,它可以在开发者把应用提交到 App Store 后,将部分构建过程留给苹果公司完成,苹果所做的事情之一是剥离二进制符号。
什么是二进制符号剥离
二进制符号剥离(Binary symbol stripping)是指从二进制文件中删除某些类型的元数据,这些元数据对于在生产中运行应用程序是非必要的。这些元数据在生产前可能是有帮助的,但之后只会让用户的手机变得更加臃肿。
简单的解释是,Bitcode 通过剥离二进制符号优化了生产构建。如果不打开 Bitcode,开发者就需要修改 Xcode 的构建设置,从而以其他方式剥离二进制符号。
也就是说,当开发者更新至 Xcode 14 之后,任何依赖 Bitcode 的应用程序都不再会从其生产的应用程序中剥离二进制符号了,这意味着一个应用程序可以在不增加任何功能的情况下出现体积大幅增加的情况。
Emerge 深度分析了耐克的 iOS 端应用程序,在 22.35.0 版本中,框架在 191.7MB 的安装大小中占了 163.7MB。而到了 22.36.1 版本,框架在 322.1MB 的总容量中激增到 293.8MB。注意在每个框架中发现的深蓝色的 "String Table" 的增加。
通过比较这两个版本,可以发现几乎所增加的 130MB 的体积都来自于 DYLD.String Tables。这些字符串表本身是非必要的元数据,而它们现在已经进入了生产构建中。
两个版本应用程序的二进制符号也从 213.9KB (占应用程序总大小的 0.11%)增长到了 127.5 MB(占应用程序总大小的 40%)。也就是说耐克 iOS 应用程序在没有任何重大功能变化的同时,增加了 130MB。 (上图:Xcode 14 之前的二进制符号大小;下图:Xcode 14 之后中的二进制符号大小)
除了上述提到的这些应用,此次体积大幅增加的还包括了 Chrome、Amazon、Twitter、Twitch、ESPN 等常用的软件。
应用程序的大小是影响你的应用程序的安装和卸载指标的最大因素之一,过于臃肿会降低应用安装率和提升卸载率,尤其是对于手机空间比较有限的用户来说更加如此,最终会导致用户数量下滑,反过来也影响应用活跃度,甚至是收入。对开发者来说,定期监测并了解如何减少应用程序的下载和安装大小是一项重要的任务。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
借鉴 Material You 设计,Chrome 将支持动态主题
Chrome 浏览器近一两年的更新内容主要都专注于新的功能和漏洞修复,Google 已经有很长一段时间没有为 Chrome 注入新的外观/主题样式了,将 Chrome 当作主要浏览器来使用的用户是否已经有点审美疲劳了呢? 不过在最新版本的 Chrome Canary 中,Google 久违地带来了一项与外观相关的功能。这个功能会根据你打开新标签时显示的壁纸自动选择浏览器的配色方案。听起来,这是一个类似于 Android 手机上 Material You 的功能,它可以根据主屏幕壁纸中所使用的颜色动态地将操作系统也调整成类似的色彩方案。 这个功能首先是由 Reddit 上的 u/Leopeva64-2 所发现的,展示了只需改变新标签页的壁纸就能自动调整浏览器界面的颜色方案,查看上下这两张 GIF 图片就能直观地感受到这个功能是如何运作的。 该功能的描述则是写到: 在新标签页中改变背景图像时,能够根据背景图像的颜色设置主题颜色 这个功能在 Mac、Windows 和 Linux,以及 Google 自己的 chromeOS 和 Fuchsia 操作系统上都可以使用。 目前这个功能仅出现在最...
- 下一篇
马斯克不懂 GraphQL,员工指出错误后当场被“开除”
马斯克昨天锐评 Twitter App 滥用 RPC 后,被 Twitter 的技术主管直接怼了回去——直言马斯克不懂技术,只是喜欢发表一些粗鲁无礼的评价。 除了这名技术主管,一位负责 Twitter Android 客户端开发的工程师Eric Frohnhoefer 也丝毫不给老板面子,他表示自己参与 Twitter 的 Android 开发已经有 6 年多了,而马斯克所指出的 Twitter App 运行慢的原因完全错误。 一名自称有 20 多年工作经验的开发者在评论中建议 Eric 应该私下和马斯克沟通,而不是直接在公开场合指出老板的错误。Eric 认为明明是老板先在公开场合提这事的……然后马斯克直接来了句"He’s fired"。 Eric 今天发布了自己的开发机器被锁定了的照片,确认已被开除。 就在刚刚,昨天回击马斯克的 Twitter 主管也发表推文称,自己因为昨天发布的推文也已经被解雇。 事实上,Eric 除了公开指出马斯克的错误,还认真解释了 Twitter Android 客户端运行慢的原因,并表示团队已经做了许多工作来提升性能——且同时要满足日渐增长的广告投放和用户...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境