【发布时间】:2017-05-25 21:54:45
【问题描述】:
我喜欢Apple 和他们所做的事情,但是Swift... 天哪!
我的 `Swift` 编译时间有问题。
配置:
- MacBook Pro(视网膜显示屏,13 英寸,2014 年中)
- 2.6 GHz 英特尔酷睿 i5
- 8 GB 1600 MHz DDR3
- SSD 256(最高 800 MB/s)
- 1k 类
- 10 个豆荚
编译时间: 3 分钟。
看起来像“new best and Amazing swift, the dream”这个配置是不够的,它像Google Chrome - InfiniteLoop(find free memory - eat)一样工作
我尝试了各种方法来加快编译时间:
- 将
HEADERMAP_USES_VFS设置为YES(不变)
- 设置
Build Settings / Architectures / Build Active Architecture Only到YES(一些改进)
设置
defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4(8) (有时会变得更糟)将优化级别设置为
-Onone(无重大改进)
- 设置调试信息格式 -
DWARF而不是DWARF with dSYM File
- 从您的方案中禁用
Find implicit dependencies(无重大 改进)
创建了一个新项目并将所有文件移至新项目(耗时太长,时间改进很小)
将编译器从默认更改为其他可用(甚至更糟)
关于如何编写快速编译的 Swift 代码的严格规则(详情如下)
我猜每个人都在等待新的Xcode 8.2 beta 2 哪里:
Xcode 在很小的时候不会重建整个目标 发生了变化。 (28892475)
但这只是部分正确,我的编译时间仍然很长 - 从 6-12 分钟变为 3-8 分钟。对此的详细说明可以查看here和here
另外,我在编写代码时遵循了所有这些规则:
- 链式函数缩减
- 解开选项
- 对象的隐式类型(尤其是字典)
- 避免??接线员(这个非常饿!!)
- 避免 ?: 运算符
换句话说,不要使用任何“新酷功能”,因为你会等待很长时间。
再试一次 - 是here 描述的解决方法:
转到产品 -> 方案 -> 编辑方案。选择左侧构建 列并取消选中“查找隐式依赖项”但是这个标志应该 首次构建项目时保持选中状态。
但是,这种解决方法不是我想要的,这也可以作为临时解决方案。
Swift 很痛苦,不是因为它难以编写,而是因为它很难使用(至少在某些机器上是这样)。
为了比较:我在Objective-C 上有一个项目,有 2k 个类和 11 个 pod - 干净的编译时间约为 30 秒。
我还发现了很多关于 swift 性能的已打开错误:
我的问题是:
有没有人有任何改善 Swift 编译时间的解决方案?
【问题讨论】:
-
我认为这只是在具有许多特性的更高级语言中所固有的,obj-c 与 swift 相比非常基础,因此编译器需要做的工作要少得多才能将代码转换为二进制形式,我认为如果您也使用 obj-c 桥接,它将为您的 swift 项目增加大量编译时间
-
我认为它是一种年轻的语言,在编译器中存在许多错误。任何使用它的人都应该准备好面对这些错误。我想你可以等待新版本的编译器,也许那里的错误会被修复。
-
我注意到对类型的公共/开放部分的更改通常会触发重新编译的“连锁反应”。因此,保持公共部分尽可能稳定并仔细设置 private/fileprivate 是有意义的。甚至可能在实现和接口之间使用某种桥梁。
-
我们在编译时也有同样的问题。我们将项目分解为目标,并将文件移动到新目标。以这种方式重构项目需要花费大量时间,但值得。整个项目编译 10 分钟,应用目标编译发生任何变化后需要 1 分钟。
标签: ios swift xcode time compilation