在Xcode中使用Swift编译时间过长

8

我有三个iOS项目:

  • 第一个项目 - 35k行Swift代码,使用的是Swift 2.1(或2.0?),编译器是Xcode 7.2.3
  • 第二个项目 - 15k行Swift代码,使用的是Swift 2.3,编译器是Xcode 8.2.1
  • 第三个项目 - 15k行Swift代码,使用的是Swift 3.0,编译器是Xcode 8.2.1

所有这些项目的编译时间都非常长(10分钟以上的全新构建),而且每个项目的开发速度都变得非常缓慢。

我已经尝试过:

  • 使用 Whole Module Optimization
  • C Dialect 更改为编译器默认设置
  • 分析项目的构建时间并优化瓶颈(一些使用数组拼接、空值合并操作符等需要6-10秒才能编译的方法),可以节省大约15秒——完全无法察觉到任何差别
  • HEADERMAP_USES_VFS = YES
  • 其他一些我现在不记得了

我正在使用一台Mac mini Late 2014配备SSD、8GB RAM和2.6ghz i5。

有人知道造成这种情况的原因是什么、该怎么办或者是否有任何现有的解决方法吗?从我在Stack Overflow和其他地方阅读到的信息来看,似乎这是一个未解决的编译器问题。

编辑:是的,我在使用Cocoapods进行依赖管理。我将尝试迁移到Carthage并查看发生了什么。


1
你看过这个吗:https://thatthinginswift.com/debug-long-compile-times-swift/? - vikingosegundo
是的,我正在使用 Cocoapods,并且我已经看过那篇文章。它与类型推断问题无关。我已经解决了代码瓶颈。 - bartlomiej.n
@user7779221 那篇文章不是关于类型推断问题的。它是关于找出哪个方法体需要太长时间来编译的。 - Sulthan
你尝试在另一台 Mac 上运行它了吗?在编译这些代码的同一台 Mac 上,其他项目是否正常工作?例如:如果你尝试从 GitHub 编译 FlappySwift,那么构建时间如何? - J. Doe
是的,我们尝试在另一台Mac Mini和一台2015年的8GB RAM和SSD MBP上运行它。两者都有同样的问题。我以为8GB可能不够用,但似乎这是一个完全不同的问题。 - bartlomiej.n
显示剩余2条评论
2个回答

6
尝试在构建设置中进行以下设置作为解决方法。我假设你只有一个目标。
  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”。

我尝试了上面的步骤,但我还没有尝试过转移到Carthage,这可能会有帮助。谢谢! - bartlomiej.n
1
这些步骤没有帮助提高编译时间吗?根据我的经验,这是Swift编译时间中最大的提升。重要的是不要使用你提到的“整个模块优化”,而是按照我描述的方式进行。 - totiDev
我还没有尝试从用户定义的设置中设置SWIFT_WHOLE_MODULE_OPTIMIZATION,只是作为代码优化设置。我也会尝试一下这个设置。 - bartlomiej.n
1
重要的是按照步骤将代码优化设置为“无”,然后添加用户定义版本。您可以为项目中的所有模块重复这3个步骤。 - totiDev
哇!这似乎解决了问题。没有使用Carthage,时间缩短到了约2.5分钟。非常感谢!你甚至不知道我有多么感激! - bartlomiej.n
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接