ios - 极长的 Swift 编译时间

标签 ios swift xcode time compilation

我喜欢 Apple 和他们所做的事情,但是 Swift...OH GOD!

我遇到了 `Swift` 编译时间的问题。

配置:

  • MacBook Pro(视网膜显示屏,13 英寸,2014 年中)
  • 2.6 GHz 英特尔酷睿 i5
  • 8 GB 1600 MHz DDR3
  • SSD 256(高达 800 MB/秒)
  • 1k 类
  • 10 个 pod

编译时间: 3 分钟

看起来像“new best and amazing swift, the dream” 这个配置是不够的,它像 Google Chrome - InfiniteLoop(find free memory - 吃)


我尝试了各种方法来加快编译时间:

  • HEADERMAP_USES_VFS 设置为 YES(无变化)

enter image description here

  • 设置 Build Settings/Architectures/Build Active Architecture Only YES(一些改进)

enter image description here

  • 设置 默认写入 com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 (8) (有时会变得更糟)

  • 将优化级别设置为-Onone(无重大改进)

enter image description here

  • 设置调试信息格式 - DWARF 而不是 DWARF with dSYM File

enter image description here

  • 从你的方案中禁用Find implicit dependencies(没有主要 改进)

enter image description here

  • 创建了一个新项目并将所有文件移动到新项目中(花费的时间太长,改进的时间很少)

  • 编译器从默认更改为其他可用的(甚至更糟)

  • 关于如何编写快速编译的 Swift 代码的严格规则(更多细节见下文)

我发现一些帖子中人们描述了相同的问题:herehere

我想每个人都在等待新的 Xcode 8.2 beta 2 其中:

Xcode will not rebuild an entire target when only small changes have occurred. (28892475)

但这只是部分正确,我的编译时间仍然很长——从 6-12 分钟变成了 3-8 分钟。这个的详细说明可以看herehere

此外,我在编写代码时遵循了所有这些规则:

  • 链式函数缩减
  • 解包可选值
  • 对象的隐式类型化(尤其是字典)
  • 避免 ??运算符(operator)(这个非常饿!!)
  • 避免 ?: 运算符

换句话说,不要使用任何“很酷的新功能”,因为你会等很久。

再试一次 - here 中描述了一种解决方法:

Go to Product -> Scheme -> Edit Scheme. Select Build in left side column and uncheck "Find implicit dependencies" But this flag should remain checked when you are building the project for the first time.

但是,这个解决方法不是我要找的,这也可以作为一个临时解决方案。

Swift 很痛苦,不是因为它很难写,而是因为它很难用(至少在某些机器上是这样)。

为了比较:我有一个关于 Objective-C 的项目,它有 2k 个类和 11 个 pod - 干净的编译时间约为 30 秒。

我还发现了很多关于 swift 性能的公开错误:

我的问题是:

有没有人有改善 Swift 编译时间的解决方案?

最佳答案

这个问题也让我非常沮丧。我们已经尝试了您提到的几种解决方案,但都没有奏效。

在编译时间上做出显着改进的一件事是: 在 Other Swift Flags 中添加 -Onone 的同时开启 Whole Module Optimization
看到这个 - Speed Up Swift Compilation

我正在使用 Swift 3Xcode 8.3

关于ios - 极长的 Swift 编译时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41585270/

相关文章:

ios - 如何从特定的 future 日期起每两周触发一次本地通知

ios - 如何使用 google Api 查找我周围的地方

java - Android如何像在iOS中一样将异步任务分组在一起

重新连接时 iPhone 无法发现蓝牙 LE 标签上的服务

xcode - 是否可以使用 Facebook iOS sdk 来开发 Mac OSX 应用程序?

javascript - Cordova/Phonegap iOS Safari 和语音合成无法工作

ios - HTTP Post 中的大尺寸图像问题

objective-c - Swift 类不符合 Objective C 协议(protocol)

ios - 将数据传递到tableViewController时出错

iphone - Xcode + GitHub。什么是正确的设置