【iOS 开发】从 xcarchive 到分发的 ipa

写这篇文章的起因是要更新 app ,然而上传 ipa 文件到 iTunes Connect 时发现体积巨大,是 App Store 显示的体积的好几倍,于是仔细研究了一下,各种体积的文件都是些什么。

各格式简要说明

.xcarchive
- Xcode Archive
- 由 Xcode 进行 Archive 操作产生的结果,出现在 Xcode Organizer 中
- 主要包含 .dSYM .app .dylib(针对 Swift)
- 用于生成 .ipa 文件


.ipa(Xcode 产出)
- iPhone Application Archive
- 主要包含 .app .dylib(针对 Swift)
- 最终从本地 upload 到 iTunes Connect 的文件

.ipa(iTunes 下载)
- iPhone Application Archive
- 主要包含 .app iTunesMetadata iTunesArtwork
- iTunes 用于管理应用软件安装包的形式

.app
- Applicaiton
- 主要包含图片、语言文件等资源,以及动态库和 Unix 可执行文件
- 安装到 iOS 设备的文件的格式

从 xcarchive 到 ipa

在进行 Archive 操作之前,我们就可以在 Xcode 导航栏的 Products 目录中看到 .app 文件,extension target 对应的是 .appex 文件,所以归档出 .xcarchive 并不是一个非常复杂的操作,只需要编译、链接、简单的签名,如果是 Swift 项目的话还需要拷贝一下标准库。

我们查看 .xcarchive 里面的内容是通过“显示包内容”看见的,而 .ipa 则需要像 .zip 文件一样解压,那么也可以理解为什么打包出 ipa 文件相对耗时了,尤其是 Swift 项目,不光要进行压缩操作,要 processing,一堆原生动态库加上第三方 framework 还要轮着等着签名。



这些保证了 ipa 文件不能被模拟器装上(没有 x86 架构),只能被 iOS 设备安装,你买的应用程序发给别人,别人并不能直接装上。从兔兔助手等平台安装的盗版软件一定是被重新签名过的。
(由于 ipa 文件上传到 iTunes Connect 之后,还会被重新处理,所以个人尚且不知道后续的处理过程还进行过怎样的签名工作)

所以 ipa 文件才可以作为加密文件放在软件商店,xcarchive 不可以。

从 Xcode 产出的 ipa 到用户下载的 ipa


如图是我开发的一款软件打包过程的各个状态,可以看到压缩状态的 ipa 文件是体积最小的。如果将 ipa 文件解压成文件夹,它的体积会和 xcarchive 文件很接近,因为它内部包含了比它本身还要大的整个 .app 包。



然后我分别通过 AppStore 和 TestFlight 安装了我上传的软件,结果都只占用了大约 15M 的空间。
前面提到,下载到设备的是 ipa,安装到设备的是 app。但看图,会发现 TestFlight 页面展示的体积和另外三张图相去甚远,30M+。仔细分析下:

  1. iPhone 5S 推出之后,iOS 设备指令集从 armv6、armv7、armv7s 一路干到了 arm64,这么些个不同的设备安装到本地的文件肯定不一样吧
  2. 同一设备不同系统,安装的文件也不一样吧
  3. Xcode 一次只产出一个 ipa,但是考虑到这款软件支持的系统版本数量和设备种类数量,可能最终几十种不同的 iOS 环境(自造词,系统版本或设备型号不同都算环境不同),从同一个 AppStore 页面,下载了几十个不同的 ipa 文件
  4. 尝试发布过 app 的开发者都知道,上传 ipa 文件完成之后,还要等待一段时间,才能在 iTunes Connect 页面看见一个“构建版本”。虽然不知道这个“构建版本”在 Apple 的服务器里面具体都有哪些东西,但至少应该包含一大堆的 ipa 文件,分别指定了对应什么系统版本、什么设备型号
  5. 在这个过程中 ipa 文件的体积发生了很大变化,App Thining 也发生在这个过程中。

至此可以看出,AppStore 页面显示的体积应该是预估的应用安装到设备的体积,而不是你下载这款软件所耗费的流量。这也解释了我之前尝试用剩 1G 存储的 iPad 去装一个 AppStore 显示 大小不到 1G 的游戏,为什么会装不上,因为下载到 iPad 的文件实际可能大于 1G。

TestFlight 里面显示的 30M+,肯定是经过 iTunes Connect 处理过的 ipa,但考虑到 .ipa 文件并不会比安装到设备的 .app 包体积更小,个人认为这是解压过后的 ipa 文件的体积。

我的 app 是如何一步一步变小的

未处理的 .app - 85.6 M
(加入动态库、.dSYM 等)
xcarchive - 167.7 M
未处理的 ipa 文件夹 - 172 M
(经过类似 zip 压缩)
未处理的 .ipa - 70.8 M(开发者感受到的体积)
(个人推测)处理后的 ipa 文件夹- 约 30M(用户下载需要耗费的流量)
处理后的 .app - 约 15M(最终占用用户设备体积)

备注

App Thining 包含 Slicing、Bitcode 和 On-Demand Resources,其中 Slicing 是默认启用、无法关闭的,但只在 iOS 9.0.2 之后有效,后面两个选项在 Xcode 中默认开启,可以手动关闭。

这是 Xcode 产物体积与用户下载到设备中的软件体积差距较大的主要原因。

推荐阅读:初探 iOS 9 的 App 瘦身功能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容