Xcode用于快速Swift构建的新构建系统

注意:这篇文章最初是在XCBlog上发布的,请阅读原始文章以获得更好的图形,并且 这里 不会遗漏任何内容

Apple通过Xcode 9在WWDC 2017上宣布了新的构建系统。新的Xcode构建系统是完全从头开始编写的,完全是用Swift编写的。 但是,由于某些原因,默认情况下未启用它,并且可以将其用作预览。 苹果表示,他们将使其在更高版本的Xcode中成为默认设置。 这意味着我们将来必须毫无疑问地接受此构建系统。 在这篇简短的文章中,我们将看到如何使用Xcode New构建系统来加快iOS应用的Swift构建时间。

是。 他们称之为“ Xcode新构建系统”,他们想不出该构建系统的正确名称。 为了了解有关Xcode新构建系统的更多信息,请不要观看WWDC 2017会议“ Swift的新功能”,新发布的版本将在该会议上宣布。 这个人实际上只花了40秒钟来谈论新的构建系统,所以在那里没有什么可学的,相反,谷歌搜索它或继续阅读这篇文章。 Xcode 9+中提供了新的Xcode构建系统。 作为iOS工程师,您可能白天要按CMD + B或CMD + R数百次,并且长时间观看Xcode编译这些内容。 当前,Xcode默认使用“标准构建系统”,这在编译Swift项目时有点慢。 为了改善Swift项目的编译和构建时间,苹果推出了这种全新的“新构建系统”,有望在性能和依赖管理等领域取得进步。 根据Apple关于Xcode 9新增功能的文档,新的构建系统应该能够

  • 提供更高的可靠性
  • 捕获项目配置错误
  • 提高整体构建性能

我们可以通过多种方式为iOS项目启用新的构建系统。

从Xcode本身启用新的构建系统是一个好主意,以便我们在开发应用程序时可以使用所有功能。 使用Xcode 9,启用新的构建设置非常容易。 您可能有Xcode项目或项目的Xcode工作区,在Xcode中, 选择File-> Project / Workspace Setting。 您将看到一个“构建系统”选项以选择新的构建系统,如下所示

启用此功能后,您应该会看到蓝色的锤子。

如果要使用xcodebuild从命令行构建iOS项目,那么我们必须传递附加参数-UseNewBuildSystem = YES还将强制使用新的构建系统。 如果您正在使用Fastlane Gym构建项目,那么我不确定该附加标记是否已在Gym中实现。

按照这种令人困惑的推文,苹果公司的工程经理负责管理新的构建系统项目。 我们还可以使用Xcode 9.2+中的标志启用新的构建系统

  $默认写入com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool否 

启用“新构建系统”后,在工作区或项目设置中看到的唯一更改是

   
BuildSystemType
最新

它只是将一个键添加到项目设置中,仅此而已。 新系统不会对构建设置进行任何更改,也不会建议您进行任何更改。 这意味着无需学习新的构建设置,就可以轻松地迁移到新的构建系统。 我们获得了据说更快,全新且现代化的构建系统的好处,而无需更改构建设置。

正如我们所看到的,Xcode构建设置中没有任何更改,您可能想知道这种更快的Swift构建魔术在哪里发生。 基本上,新的构建系统是在swift-lldb项目的顶部编写的。 苹果似乎已经构建了Xcode附带的整个框架,并且该框架使这一切更快地成为Swift的构建魔术。

如果您查看Xcode App并导航到该目录

  $ cd /Applications/Xcode.app/Contents/SharedFrameworks 

您将看到Xcode附带的所有框架。 如果您对命令行不满意,则也可以使用Finder到达那里。 在Finder中,转到->转到文件夹,然后输入以上路径。 这结束了新构建系统真实名称的惊奇。 您可以找到名为XCBuild.frameworks的框架,希望这是New Build System的真实名称。 好极了。 我们发现它是XCBuild

很容易记住,您阅读XCBlog就是这样,构建系统就是XCBuild。 但是,它与Facebook用相同名称构建的构建工具不同。 Facebook的xcbuild的GitHub回购在这里

Apple的xcbuild二进制文件位于以下奇怪的路径中:

  /Applications/Xcode.app/Contents/SharedFrameworks/XCBuild.framework/Versions/A/Support/xcbuild 

该二进制文件的作用超出了本文的范围,但是您可以将其添加到$ PATH中并探索选项。

我们信任Apple,但是为了验证新的构建系统是否真的非常快或只是偶然,您可以在自己的项目中启用它,并自己查看构建时间。 它被设计为在Swift项目上最好地工作,因此在Swift项目上尝试一下,您会惊讶于构建时间的缩短。

在开始测试之前,您应该进行此设置,以在完成构建后立即在Xcode中显示构建时间。 您可以通过运行在Xcode中启用构建时间

  $默认写入com.apple.dt.Xcode ShowBuildOperationDuration -bool是 

现在,我们将在Xcode中看到构建时间。

  1. 在Xcode中打开您的Swift项目或工作区。 暂不启用新的构建系统
  2. 清理所有派生数据+清理项目,然后按CMD + B
  3. 让项目进行构建并记录构建时间。
  4. 再次运行构建并记下增量构建的时间
  5. 现在,从“项目/工作区”设置中启用新的构建系统。
  6. 重复步骤2直到4
  7. 观察构建时间的神奇改进。

我已经完成了对某些项目的测试,发现该版本有重大改进。 新的构建系统在干净构建上平均快30%,在增量构建上平均快75%。 不要相信任何人。 自己尝试一下。

为了演示这一点,我创建了一个名为“ NewBuildSystem-Demo”的空单视图iOS应用。 我如上所述进行了基准测试,并看到了惊人的构建时间改进。

在当前的标准构建系统中,构建和清理构建花费了12秒

但是,当我启用新的构建系统时,只用了5秒钟或完成了构建。

随后的增量构建仅需0.037s。

如您所见,新的构建系统运行迅速。 您应该尽快启用此构建系统,并查看您的项目在新构建系统上的性能。

您可能已经看到,堆栈溢出或其他一些通道中提到了一些问题,但是大多数问题与Objective-C或Cocoapods有关。 除非您进行了疯狂的设置,否则它不应影响Swift项目。 一些受欢迎的公开问题是

  • 新的构建系统报告Xcode中的依赖关系周期。 在Twitter上报道
  • 使用脚本版本时,新版本系统会重置版本号。 在Twitter上报道
  • 一堆问题在Cocoapods Github存储库中打开。

随着Apple在加快新版本构建系统中Swift版本的构建方面取得了重大进步。 我们应该通过启用我们的项目来利用此功能。 新的构建速度更快,可以在不更改当前构建设置的情况下启用。 在不久的将来,新的构建系统将是默认的,因此迟早我们必须将项目迁移到新的构建系统。 因此,不要等待立即启用新的构建系统。 让我知道在下面的注释中启用新的构建系统时会发生什么。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..