使用Carthage更快地在Xcode中构建。

让我马上告诉你! 迦太基+罗马为我们提供了将近2.5倍的构建速度。 好吧,如果您要处理大型项目,那将是巨大的性能提升。

Cocoapods是自然的首选

在Pulse,我们使用可可豆荚安装了第三方库,这是我们开始编写iOS应用程序时的自然选择。 最终,该项目的规模随着对Firebase,AsyncDisplayKit,Realm,RxSwift和其他24个对象的依赖而变得越来越大。 项目编译时间开始变得越来越糟,并阻碍了开发人员的工作效率。 一些使用2015年款MacBook Pro的开发人员开始提到,该项目大约需要40分钟才能完成构建。
由于Xcode无法保持代码建议的正确性,因此开发人员通常会在构建项目时检查代码的插入和编译错误,因此这已成为一个巨大的问题。

第一次与迦太基相遇

起初,我花了一些时间来设置迦太基和可可足。 我遇到了这样的问题:Cocoapods和Carthage都无法解决其他库中常见的父项依赖关系。 这会引起问题,尤其是当您在多个库中使用同一父依赖项的两个版本时。

经过进一步的研究,我意识到自己做错了。 我不必每次都运行“迦太基更新”,而只需在新机器上安装时运行“迦太基引导程序”。

这个备忘单在整个过程中对我有很大帮助。
迦太基备忘单

我开始将所有RxSwift及其相关的依赖项移至迦太基。 我立即看到干净的构建时间减少了很多,然后继续将其他所有内容移到我的`Cartfile`中。

结果是惊人的,团队非常高兴,它最终帮助提高了开发人员的生产力。

CI变得比蜗牛还慢

我们将Bitrise用于CI / CD。 由于某些原因,迦太基的构建时间变得更慢。 每次触发新的CI构建时,我们都在运行`carthage bootstrap`。 此步骤本身耗时40分钟。 我认为,如果可以缓存所有框架构建并在以后的构建中重用它们,则可以节省大量时间。

我开始寻找解决方案,并发现了一个名为Rome的强大工具。 Rome非常容易设置,而我最喜欢此工具的地方是版本解析。 罗马使用Amazon S3存储桶来存储已编译的框架和dSYM。 之后,您可以运行rome download来下载所有预编译的框架。

集成了罗马之后,迦太基的构建就无济于事了,因为我只需要编译一次框架即可。

结论

Bitrise在Carthage上的总构建时间约为65分钟,在完成此设置后减少到17分钟。 这不是令人难以置信吗?

如果您的大型项目有很多外部依赖项,那么您应该尝试一下。 我希望这可以帮助每个人解决iOS开发带来的非生产性问题。

我们也很想听听你们提出了什么其他解决方案来减少构建时间。

反馈

如有任何疑问,请随时发表评论。 不要退缩拍手🙂