【问题标题】:Speed up Xcode Swift build times加快 Xcode Swift 构建时间
【发布时间】:2017-03-17 07:50:07
【问题描述】:

随着我的项目在过去一年的增长,它的构建时间也在增长。在过去的几个月里,它从 4 分钟缩短到了 7 分钟左右(时间包括 GitHub 拉取、单元测试等)。

我通过-Xfrontend -debug-time-function-bodies 进行了调查,以找到编译速度慢的行,并更改了该代码。

我认为现在是项目规模的问题; 182 个 Swift 文件,约 31K 行。 23 个故事板,52 个 XIB。这是一个带有少量 Cocoapods 依赖项的常规 UIKit 应用程序。

大部分构建时间都花在“编译 Swift 源文件”阶段。

与编辑-构建-调试周期相比,我更关心的构建机器时间也在变慢。

可以做些什么来缩短构建时间?

【问题讨论】:

  • 将一些代码分解到框架中。不必在每次更改某些内容时都编译它们。
  • 你试过不用xibs吗?我在 Swift 1.x 中构建了一个项目,没有 xib,编译时间也没有明显差异,但后来我加入了一家到处都有 xib 的公司,所以没有机会用一个大项目来测试它。
  • 物理硬件也起着重要作用,具有快速 SSD 和大量物理线程的 Mac 将处理 Swift 源文件。

标签: swift xcode compiler-optimization compile-time


【解决方案1】:

这是一篇关于基准测试/加快编译时间的文章 - swift-profiling

万一它死了,这里是 tldr:

xcodebuild -workspace App.xcworkspace -scheme App clean build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep .[0-9]ms | grep -v ^0.[0-9]ms | sort -nr > culprits.txt

您可以在构建设置中的 other-swift-flags 下运行它或将以下标志添加到您的构建中:

-Xfrontend -warn-long-function-bodies=100

这将向您显示哪些行正在减慢您的编译时间。

【讨论】:

  • @ricardopereira 我不明白为什么它不会。如果没有,请告诉我。
【解决方案2】:

Xcode 8.1/Swift 3.1 为包括一些 ObjC 在内的项目增加了一些缓解。预编译的头文件又回来了! https://swift.org/blog/bridging-pch/

如果您的项目包含桥接头,这将有所帮助。 (在 Xcode 8.1 beta 4 及更高版本中,这是默认设置;在之前的 beta 版本中,将 -enable-bridging-pch 添加到 Other Swift Flags)。

【讨论】:

    【解决方案3】:

    Other Swift Flags 中添加 -Onone 时打开 Whole Module Optimization 对我有用,它将编译时间减少到 3 分钟从 10.
    在这里阅读更多 - Speed Up Swift Compilation

    我在Xcode 8.3上使用Swift 3

    【讨论】:

    • 我很惊讶。我的构建从 68 秒变为 52 秒。 Xcode 错误?调试仍然可以正常工作。
    • 我打开Radar 31539545询问Apple是否有负面影响,如果没有,这是否会成为Xcode的默认设置。
    • 嗨,-Onone 标志有什么作用?谢谢。
    • -Onone 告诉编译器不要优化任何东西,让它处于更容易调试的状态。
    【解决方案4】:

    查看这篇精彩的帖子: https://github.com/fastred/Optimizing-Swift-Build-Times

    包含的部分内容:

    • 函数和表达式的类型检查
    • 慢慢编译文件
    • 仅构建活动架构
    • dSYM 生成
    • 整个模块优化
    • 第三方依赖项
    • 模块化
    • XIB
    • Xcode 方案
    • 使用新的 Xcode 构建系统
    • 启用并发 Swift 构建任务
    • 在 Xcode 中显示构建时间

    【讨论】:

      【解决方案5】:

      从 Xcode 9.3 开始,有一个名为 Single FileCompilation Mode。在 Xcode 发行说明中讨论编译时间时明确表示它可以改变游戏

      选择按文件或按模块编译 Swift 代码 优化级别设置为编译模式,这是一个新的 在 Build Settings 面板中设置 Swift 编译器 项目编辑。以前,此选择与其他选择结合在 优化级别设置。按文件编译只能构建 更改的文件,从而实现更快的构建。按模块编译 实现更好的优化。

      它确实是一个救生员。我的企业项目增量编译时间减少到几秒钟。你可以试试看。

      编辑:在 Xcode 12 中,同样可以称为增量

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 1970-01-01
        • 2010-10-20
        • 2018-02-28
        • 2015-01-22
        • 2017-12-15
        • 2016-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多