首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/biZu8MjxQocdIr6jgRig
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券