写点什么

使用 Carthage 和依赖项缓存减少 50% Xcode 构建时间

2019 年 11 月 14 日

使用Carthage和依赖项缓存减少50% Xcode构建时间

在最近的一篇文章中,Spotify 工程师 Patrick Balestra 解释了他们如何使用依赖关系管理器 Carthage 来避免反复重建依赖项,从而将 Xcode 的构建时间减少了 50%。


使用 Xcode 时,开发人员可以使用不同的方式来处理外部依赖项。你可以手动进行,也可以使用CocoaPodsCarthageSwift包管理器。除了 Carthage, 其他的 Xcode 依赖项管理器通常都会从源代码构建所有外部依赖项,而 Carthage 支持从 GitHub 上下载已经构建好的二进制文件,或者从已知的本地位置获取。


Balestra 说,从源代码构建依赖项对效率有巨大的影响,因为所有的开发人员都必须在他们的机器上构建外部依赖项,每次清理项目工件时也需要重新构建,例如,在进行一个新的持续集成构建时。通过分析构建日志,Spotify 的工程师得出了一个惊人的结论。


在我们的持续集成环境中,我们对 Spotify Artists App 的 Swift 源代码编译时间和它的依赖项的编译时间进行了对比,我们很快就发现,在开始编译 App 的代码之前,大约有 60-70%的时间被用在反复编译相同的依赖项上。


在 Swift 可以支持二进制稳定性之后,并且 Swift 包管理器可能在某个时候也引入对二进制发行版的支持,那么这种情况就可能会有所改变。但目前在 Xcode 中管理二进制依赖项的惟一可用选项是手动管理或借助 Carthage。


如果团队和 CI 管道共享了预构建的二进制模块,那么链接这些模块的好处就会更大,但需要使用某种分布式存储。在这种情况下,团队成员和 CI 管道可以直接链接共享的二进制模块。由于 Carthage 只支持二进制模块的本地存储,所以开发人员通常使用第三方工具(如Rome)将 Carthage 工件缓存在 S3 中,让整个团队都可以使用。


Rome 通过避免重新构建相同的依赖项来加快后续的构建速度。它将 Carthage/Build 目录的内容缓存到外部文件夹(例如~/Library/Chaches)或远程服务器(例如 Amazon S3)。


由于 Spotify 工程师不使用 S3,他们使用的是 Artifactory,所以不得不对 Rome 进行扩展,以便支持更多的远程存储系统。借助他们的工作成果,你现在可以使用自己喜欢的脚本语言编写脚本让 Rome 能够在任意位置远程存储工件。


在加入了对 Rome 的支持之后,很快就发现情况得到了改善。我们发现,在我们的 CI 配置中,Artists App 的构建时间立即减少了约 50%:从大约 20 分钟减少到不到 10 分钟!


Spotify 工程师发现的一个主要问题是 LLDB 无法调试二进制模块,因为编译器在二进制文件中保存的是符号的绝对路径。这在支持 Swift 5.1 和二进制模块分发的最新 Xcode 版本中应该已经发生变化了,但 InfoQ 无法与 Spotify 确认他们使用的是哪个版本的 Xcode。


原文链接


Reduce Xcode Build Times Using Carthage and Caching Binary Dependencies


2019 年 11 月 14 日 08:001426

评论 1 条评论

发布
用户头像
心比天高,命比纸薄。
2019 年 11 月 14 日 08:53
回复
没有更多了
发现更多内容

Architecture Phase1 Week2:HomeWork

phylony-lu

极客大学架构师训练营

架构师训练营第一期 - 第二周课后作业

卖猪肉的大叔

第二周作业

极客大学架构师训练营

架构师训练营第 1 期 -Week2 - 课后练习

鲁小鲁

极客大学架构师训练营 依赖倒置原则 接口隔离原则 框架设计 软件设计原则

第二周作业 (作业二)

Geek_83908e

极客大学架构师训练营

week2

Geek_deb968

架构师训练营第二周作业

郎哲158

极客大学架构师训练营

第二周-学习总结

Yangjing

极客大学架构师训练营

用十六年时间,造一座声音“博物馆”:OPPO的影音进击之路

脑极体

架构一期二班-吴水金-第二课作业

吴水金

第二周 框架设计 学习笔记

应鹏

学习 极客大学架构师训练营

第二周作业 (作业一)

Geek_83908e

极客大学架构师训练营

架构训练营第二周练习

灰羽零

VS Code 搭建 C++ 开发环境(Mac 环境)

hungxy

c++ vscode

架构师训练营第 2 周课后练习

叶纪想

极客大学架构师训练营

架构师训练营作业:第二周

m

第二周作业1

sean

甲方日常 23

句子

生活 随笔杂谈 减肥

架构师训练营第二周笔记-带你认识框架设计原则和设计模式

郎哲158

学习 极客大学架构师训练营 框架设计

架构师训练营 - 学习笔记 - 第二周

徐时良

架构师训练营 -week02- 作业

大刘

极客大学架构师训练营

第二周 框架设计 作业一

应鹏

极客大学架构师训练营

Week 2 作业 02

Croesus

作业一:

静海

架构师训练营第一期第2周作业及总结

木头发芽

Architecture Phase1 Week2:Framework Design

phylony-lu

极客大学架构师训练营

设计模式

knight

第二周作业2

sean

罗辑思维(得到APP)要上市了,你不知道的27件事

赵新龙

罗辑思维 IPO

架构师训练营第 1 期 - 第2周 - 学习总结

wgl

【架构师训练营第 1 期 02 周】 学习总结

Bear

极客大学架构师训练营

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

使用Carthage和依赖项缓存减少50% Xcode构建时间-InfoQ