【问题标题】:Extremely long compilation times with Swift in Xcode在 Xcode 中使用 Swift 编译时间极长
【发布时间】:2017-03-28 10:23:07
【问题描述】:

我有三个 iOS 项目:

  • 第一个 - 35k Swift LOC,Swift 2.1(或 2.0?),使用 Xcode 7.2.3 编译
  • 第二个 - 15k Swift LOC,Swift 2.3,使用 Xcode 8.2.1 编译
  • 第三个 - 15k Swift LOC,Swift 3.0,使用 Xcode 8.2.1 编译

所有这些的编译时间都非常糟糕(一个干净的构建需要 10 多分钟),并且每个这些的开发都在缓慢地爬行。

我已经试过了:

  • 使用Whole Module Optimization
  • C Dialect 更改为编译器默认值
  • 分析项目的构建时间并优化瓶颈(一些方法需要 6 到 10 秒才能通过数组连接、nil 合并运算符等进行编译),缩短了大约 15 秒 - 完全不明显的差异
  • HEADERMAP_USES_VFS = YES
  • 其他一些我现在不记得了

如果这很重要的话,我正在开发一台配备 SSD、8GB RAM 和 2.6ghz i5 的 Mac mini。

任何人都知道可能导致这种情况的原因,如何处理它,甚至现在有任何解决方法吗?从我在 SO 和其他地方读到的内容来看,这似乎是一个未解决的编译器问题。

编辑:是的,我将 Cocoapods 用于依赖项。我会试着搬到迦太基看看会发生什么。

【问题讨论】:

  • 你在用 cocoapods 吗?
  • 是的,我正在使用 cocoapods,是的,我看过那篇文章。它与类型推断问题无关。我已经解决了代码瓶颈。
  • @user7779221 那篇文章不是关于类型推断问题的。这是关于找出哪个方法体编译时间过长。
  • 你试过在不同的mac上运行它吗?其他项目是否在您正在编译这些代码的同一台 Mac 上运行良好?例如:如果您尝试从 GitHub 编译 FlappySwift,构建时间如何?

标签: ios swift xcode


【解决方案1】:

尝试在构建设置中设置以下作为解决方法。我假设你只有一个目标。

  1. 将“仅构建活动架构”设置为“是”。
  2. 将优化级别设置为无 [-Onone]
  3. 添加名为“SWIFT_WHOLE_MODULE_OPTIMIZATION”的用户定义设置,值为“YES”
  4. 清空派生数据并构建。

您还可以使用此工具分析任何编译速度慢的 Swift 文件:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode

我遇到了需要 6-7 分钟的构建时间。我离开了 Cocoapods,开始使用 Carthage,它有助于清洁构建。即便如此,构建仍然需要 3 分钟。最大的改进来自我上面提到的步骤。

更新

在您的调试版本中,将优化级别设置为“快速、整体模块优化”,而不是添加用户定义的设置。然后在调试构建的其他 Swift 标志中添加“-Onone”。

【讨论】:

  • 我尝试了上述步骤,但我还没有尝试搬到迦太基,这可能会有所帮助。谢谢!
  • 这些步骤对缩短编译时间没有帮助吗?根据我的经验,这极大地促进了 Swift 编译时间。重要的是不要使用您提到的“整个模块优化”,而是按照我描述的方式进行。
  • 我没有尝试从用户定义的设置中设置SWIFT_WHOLE_MODULE_OPTIMIZATION,就像代码优化设置一样。我也试试看。
  • 如步骤中所述将代码优化设置设置为无,然后添加用户定义的版本,这一点很重要。您可以对项目中的所有模块重复这 3 个步骤。
  • 哇!这似乎奏效了。它下降到大约 2.5 分钟,没有使用 Carthage。非常感谢!你甚至不知道我有多感激!
【解决方案2】:

这是 swift 网站上的一个未解决问题:https://bugs.swift.org/browse/SR-6037 希望他们能尽快修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多