优化Xcode构建以加快Fastlane

持续集成的最好部分是能够自动运行测试并构建可部署的应用程序。 但是,自动构建并不意味着智能或优化的构建。 这是我在加快交付过程中收集的一些技巧。

在进行改进之前先进行测量,然后进行全新清洁大约需要6分钟。 在持续集成方面,我在服务器上使用Fastlane,这大约需要30分钟。 这些通道包括清理,运行测试,然后构建并最终部署到Fabric。

让我们看看如何改善这些时间,一次解决一个问题。

代码优化

代码表达式越复杂,编译器花费在编译器上的时间就越长。 以下是应避免的示例:

return CGSize(width: size.width + (rightView?.bounds.width ?? 0) + (leftView?.bounds.width ?? 0) + 22, height: bounds.height) 

为了找出应用程序的哪一部分需要花费大量时间来编译,开发人员将构建时间分析器组合在一起。

借助此工具,您可以快速识别和改进代码,从而快速赢得构建时间。 您还可以在Xcode本身中创建特定的警告来标记需要花费太多时间编译的代码。

项目优化

首先,我首先删除了我没有注意到的不必要的代码。 我的意思是一段时间后,如果您使用Cocoapods管理库,那么您可能还会拥有不再需要或不再使用的代码。

为此,我使用了pod deintegrate && pod install 。 第一部分将完全从您的项目中删除Cocoapods依赖项,然后第二部分将重新安装它。

这样,我设法删除了数百个未使用的文件,这意味着编译时删除了数千行代码。

加快构建时间的另一种方法是使用快速模块优化。 我绝对建议您查看Apple文档Swift.org-Swift 3中的整体模块优化。

实际上,在项目的“ 构建设置”下的 Swift编译器”部分中,您可以自定义“ 优化级别” 。 但是,如果您想保持调试应用程序的能力,则不选择“整个模块优化”。

一种变通方法是仍然能够调试您的应用,将其标记保持为-Onone ,但您必须将SWIFT_WHOLE_MODULE_OPTIMIZATION添加为YES作为自定义用户设置。

通过这些更改以及清理项目后,我的构建时间从5’50”转移到3’15”,几乎是一半的时间。

现在让我们看一下持续集成方面。

快速通道优化

我使用Jenkins使用Git flow和Fastlane自动构建和准备新的iOS更新。 任何新的功能分支都将通过运行车道触发新的构建。

我在Fastlane中注意到的一点是, scan可以构建要测试的项目,而gym也可以进行存档和部署。 因此,我们在这里做了两倍的努力。

知道两者都依赖于xcodebuild命令,我尝试在我的xcodebuild命令中使用额外的参数以能够针对结果运行测试。 为此,我使用了xcargs: " build-for-testing"

另一方面,扫描具有无需构建即可测试的参数。 因此,在纸上,我们可以使用健身房测试中相同的派生数据文件夹来运行测试。 要启用此功能,请在扫描命令中添加test_without_building: true

最后,泳道过程应相同:

  • 干净🗑
  • 建立(仅一次)🛠
  • 运行测试♻️
  • 分发🚀

总之,这2天的经历和研究如何缩短构建时间可以帮助我每天节省一些时间。 我希望它也可以帮助您节省一些费用。

这里有一些额外的资源可以做得更好