为什么Swift编译时间这么慢?


210

我正在使用Xcode 6 Beta 6。

这已经困扰了我一段时间,但是现在已经到了几乎无法使用的地步。

我的项目已经开始有一个体面的65个斯威夫特文件的大小和几个桥接Objective-C的文件(这是真的不是问题的原因)。

似乎对任何Swift文件进行任何微小的修改(例如在应用中几乎没有使用的类中添加简单的空白)都会导致重新编译指定目标的整个Swift文件。

经过更深入的调查,我发现CompileSwiftXcode在swiftc目标的所有Swift文件上运行命令的阶段占了编译器时间的几乎100%。

我进行了进一步的研究,如果仅使用默认控制器保留应用程序委托,则编译速度非常快,但是随着我添加越来越多的项目文件,编译时间开始变得很慢。

现在只有65个源文件,每次编译大约需要8/10秒。一点也不

我还没有看到任何帖子谈到这个问题,除了这一个,但所以我想知道如果我在这种情况下,只有一个,这是一个旧版本的Xcode 6。

更新

我已经在GitHub上检查了一些Swift项目,例如AlamofireEulerCryptoSwift,但是它们都没有足够的Swift文件可以进行实际比较。我发现唯一一个启动时大小合适的项目SwiftHN,即使它只有十几个源文件,我仍然能够验证同一件事,一个简单的空间,整个项目需要重新编译,这开始需要一个很少的时间(2/3秒)。

与分析器和编译速度都很快的Objective-C代码相比,这确实让Swift永远无法处理大型项目,但是请告诉我我错了。

Xcode 6 Beta 7更新

仍然没有任何改善。这开始变得荒谬。由于缺少#importSwift,我真的看不到苹果将如何进行优化。

使用Xcode 6.3和Swift 1.2进行更新

苹果增加了增量构建(以及许多其他编译器优化)。您必须将代码迁移到Swift 1.2才能看到这些好处,但是Apple在Xcode 6.3中添加了一个工具来帮助您做到这一点:

在此处输入图片说明

然而

不要像我那样高兴得太快。他们用来使构建增量的图形求解器尚未得到很好的优化。

的确,首先,它不关注函数签名的更改,因此,如果在一个方法的块中添加空格,则将重新编译所有依赖于该类的文件。

其次,它似乎基于重新编译的文件来创建树,即使更改不影响它们也是如此。例如,如果将这三个类移到不同的文件中

class FileA: NSObject {
    var foo:String?
}
class FileB: NSObject {
    var bar:FileA?
}
class FileC: NSObject {
    var baz:FileB?
}

现在,如果您进行修改FileA,则编译器显然会标记FileA为要重新编译。它还将重新编译FileB(根据对的更改,这将是可以的FileA),而且FileC因为FileB重新编译了,这很糟糕,因为在此FileC从未使用FileA过。

因此,我希望他们能够改进依赖关系树求解器...我已经用此示例代码打开了雷达

Xcode 7 beta 5和Swift 2.0更新

昨天,Apple发布了beta 5,在发布说明中我们可以看到:

Swift语言和编译器•增量构建:仅更改函数的主体将不再导致依赖文件的重建。(15352929)

我已经尝试过了,我必须说它现在确实(真的!)运行良好。他们迅速优化了增量构建。

我强烈建议您创建一个swift2.0分支,并使用XCode 7 beta 5使代码保持最新。您会对编译器的增强功能感到满意(但是我会说XCode 7的全局状态仍然很慢且有错误)。

Xcode 8.2更新

自从我最近一次更新此问题以来已经有一段时间了。

现在,我们的应用程序大约有2万行代码,几乎都是Swift代码,虽然不错,但并不出色。它经历了迅速的2迁移,而不是迅速的3迁移。在2014年中的Macbook pro(2.5 GHz Intel Core i7)上编译大约需要5 / 6m,这在干净的版本上还可以。

但是,尽管苹果声称:增量构建仍然是一个笑话:

仅发生很小的更改时,Xcode不会重建整个目标。(28892475)

显然,我认为我们很多人在检查了这个废话之后就笑了(向项目的任何文件添加一个私有(私有!)属性都会重新编译整个过程……)

我想指出你们在Apple开发者论坛上的这个线程该线程上有关于此问题的更多信息(以及不时赞赏的Apple开发人员就此问题的交流)

基本上,人们想出了一些方法来尝试改进增量构建:

  1. HEADER_MAP_USES_VFS项目设置添加到true
  2. 禁用Find implicit dependencies您的方案
  3. 创建一个新项目,然后将文件层次结构移至新项目。

我将尝试解决方案3,但解决方案1/2不适用于我们。

具有讽刺意味的是,在整个情况下,有趣的是,当我们遇到第一个编译缓慢问题时,尽管我们从Apple那里获得了实际的改进,但我看到Xcode 6使用的是Swift 1或Swift 1.1代码,而现在大约两年后,这种情况与Xcode 6一样糟糕。

其实,我真的很后悔选择了雨燕的OBJ / C为我们的项目,因为每天的挫折它涉及到的。(我什至改用AppCode,但这是另一个故事)

无论如何,在撰写本文时,我看到这篇SO帖子拥有32k +的视图和143个ups,所以我想我不是唯一的一个。尽管对这种情况感到悲观,但还是呆在那儿,隧道尽头可能有些亮光。

如果您有时间(并且有勇气!),我想苹果公司欢迎对此表示欢迎。

直到下一次!干杯

Xcode 9更新

今天偶然发现了这一点。Xcode悄悄地引入了一个新的构建系统,以改善当前的糟糕性能。您必须通过工作空间设置启用它。

在此处输入图片说明

请尝试一下,但完成后将对其进行更新。看起来很有希望。


1
有趣!我想知道这仅仅是缺少的优化还是因为没有接口文件而需要解析这么多文件。
zaph 2014年

2
遇到了类似的问题,最后我意识到这是由于实体类中使用自定义运算符从JSON反序列化。如果您使用的是任何工具,建议您一一转换为普通功能,看看是否有任何变化。
2014年

4
自XCode 6 beta 6起,我的项目中的编译工作变得非常缓慢。但是我的项目还不够大(〜40-50个Swift文件)。
BadmintonCat

2
随着我的项目的发展,编译变得越来越慢。我还依赖于几个豆荚,我肯定会激怒这个问题。这是使用最近的非beta版本。
安迪

2
增量构建仍在“保守的依赖关系分析中进行,因此您可能仍会看到重建文件的数量超出绝对必要的数量”。希望它会随着时间的推移而改善。
nmdias

Answers:


70

好吧,事实证明罗伯·纳皮尔是对的。这是导致编译器出现异常的一个文件(实际上是一种方法)。

现在不要误会我的意思。Swift每次都会重新编译所有文件,但是现在最棒的是,Apple在其编译的文件上添加了实时编译反馈,因此Xcode 6 GM现在可以实时显示正在编译的Swift文件和编译状态。如您在此屏幕截图中所见:

在此处输入图片说明

因此,这很容易知道哪些文件需要花费很长时间。就我而言,这是这段代码:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : self.title ?? ""
        ])

return dic.copy() as NSDictionary

因为该属性title是类型的var title:String?而不是NSString。将其添加到时,编译器会发疯NSMutableDictionary

更改为:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : NSString(string: self.title ?? "")
        ])

return dic.copy() as NSDictionary

使编译时间从10/15秒(甚至更长)缩短到一秒钟……令人惊叹。


3
感谢您跟进答案。这可能对其他在编译期间陷入困境的类型推断引擎非常有用。
罗布·纳皮尔2014年

1
您从哪里获得@apouche的视图?我没有看到它在Xcode
埃里克·

2
您需要打开调试助手(CMD + 8)并单击当前版本
apouche

1
是的,我确定Apple稍后会对此进行优化,否则,到处都注定要迅速进行现实世界的项目。
apouche 2014年

1
如何获得显示正在编译哪些文件的工具?
jgvb

42

我们已经尝试了很多方法来解决这个问题,因为我们大约有10万行Swift代码和30万行ObjC代码。

我们的第一步是根据函数编译时间输出优化所有函数(例如,如此处所述https://thatthinginswift.com/debug-long-compile-times-swift/

接下来,我们编写了一个脚本,将所有swift文件合并为一个文件,这破坏了访问级别,但使我们的编译时间从5-6分钟缩短至〜1分钟。

现在,此功能已失效,因为我们向Apple询问了这一点,他们建议我们应该执行以下操作:

  1. 在“快速编译器-代码生成”构建设置中启用“整个模块优化”。选择'Fast, Whole Module Optimization'

在此处输入图片说明

  1. 在“ Swift Compiler-Custom Flags”中,为您的开发构建添加 '-Onone'

在此处输入图片说明 在此处输入图片说明

设置这些标志后,编译器将一步编译所有Swift文件。我们发现通过我们的合并脚本,这比单独编译文件要快得多。但是,如果不使用' -Onone'覆盖,它还会优化整个模块,这会比较慢。当我们'-Onone'在其他Swift标志中设置该标志时,它会停止优化,但不会一步一步停止编译所有Swift文件。

有关整个模块优化的更多信息,请在此处查看Apple的博客文章-https: //swift.org/blog/whole-module-optimizations/

我们发现这些设置允许我们的Swift代码在30秒内进行编译:-)我没有证据表明它可以在其他项目上运行,但是如果您仍然需要Swift编译时间,我建议您尝试一下。

请注意,对于您的App store版本,建议不要进行'-Onone'标记,因为建议对生产版本进行优化。


4
非常感谢您的建议!我只是不明白为什么官方资料中没有这样的内容(至少很容易找到),例如,您提到的文章应该(必须!)带有关于的评论-Onone。我们现在不能使用整个模块优化,因为它会使编译器崩溃。但是您的建议几乎使我们的构建速度提高了10倍。在MacBook Air(每年2013年)上,它的构建时间约为8分钟,而现在,它只花了大约1分钟半的时间,就花费了在目标(我们有应用,扩展程序和少量内部框架)之间进行切换以及编写情节提要
Ilya Puchka

我还测试了此方法,仅提及的方法包括-Onone,它确实显着减少了构建时间。
弗拉德(Vlad)

也和我一起工作。使用-Onone帮助减少构建时间。非常感谢队友!
nahung89'9

34

这可能与您的项目规模无关。这可能是一些特定的代码,甚至可能只有一行。您可以通过尝试一次编译一个文件而不是整个项目来进行测试。或者尝试查看构建日志以查看哪个文件花费了很长时间。

作为可能导致麻烦的各种代码的示例,此38行要点需要超过一分钟的时间才能在beta7中进行编译。所有这些都是由这一块引起的:

let pipeResult =
seq |> filter~~ { $0 % 2 == 0 }
  |> sorted~~ { $1 < $0 }
  |> map~~ { $0.description }
  |> joinedWithCommas

仅需简化一两行,它几乎可以立即编译。麻烦在于这正在导致编译器中的指数增长(可能是阶乘增长)。显然,这并不理想,如果您可以隔离此类情况,则应该打开雷达以帮助清理这些问题。


我不确定您是否看到我对此CompileSwift阶段的评论。即使只修改了一个,它也将占用所有swift文件。因此,如果一个文件需要花费一些时间(我非常怀疑),那么编译器将永远不会告诉您它是哪个文件。
apouche 2014年

10
您可以使用swiftc查看单个文件的时间来编译它们。
罗布·纳皮尔2014年

很抱歉没有给您赏金,因为我一开始并不相信。我也试图一一编译文件,但是这样做很麻烦(必须正确地提供框架,并且每次都要视情况而定),所以我放弃了。请看看我最新的答案,这个帖子完全解释
apouche

我不认为这是基于项目规模的。我的项目只有4个swift文件,并且突然开始编译得异常缓慢。昨天天气很快。除了添加图标和启动图像之外,我无法专心于我对项目所做的任何事情。
特拉维斯M.

33

如果您试图确定特定的文件来减慢编译时间,则可以尝试通过xctool在命令行中对其进行编译,这将使您逐文件进行编译。

需要注意的是,默认情况下,每个CPU内核同时构建2个文件,不会给您“净”使用时间,而是绝对的“用户”时间。这样,所有时间在并行化文件之间变得均匀,并且看起来非常相似。

为了克服这个问题,请将-jobs标志设置为1,这样它就不会并行化文件构建。这将花费更长的时间,但是最后您将获得“净”编译时间,可以按文件进行比较。

这是应该可以解决问题的示例命令:

xctool -workspace <your_workspace> -scheme <your_scheme> -jobs 1 build

“编译Swift文件”阶段的输出类似于:

...Compile EntityObserver.swift (1623 ms)Compile Session.swift (1526 ms)Compile SearchComposer.swift (1556 ms)
...

通过此输出,您可以快速确定哪些文件比其他文件花费的时间更长。此外,您可以高精度确定重构(显式强制转换,类型提示等)是否正在降低特定文件的编译时间。

注意:从技术上讲,您也可以使用它,xcodebuild但是输出非常冗长且难以使用。


1
只要确保将项目的“整个模块优化”设置为false,否则就不会分离出各个swift文件。
sabes 2015年

1
Swift CompilerOptimization LevelFast, Whole Module Optimization [-O -whole-module-optimization]
马特·

26

就我而言,Xcode 7完全没有区别。我有多个功能,需要几秒钟才能编译。

// Build time: 5238.3ms
return CGSize(width: size.width + (rightView?.bounds.width ?? 0) + (leftView?.bounds.width ?? 0) + 22, height: bounds.height)

解开可选选项后,构建时间减少了99.4%

// Build time: 32.4ms
var padding: CGFloat = 22
if let rightView = rightView {
    padding += rightView.bounds.width
}

if let leftView = leftView {
    padding += leftView.bounds.width
}
return CGSizeMake(size.width + padding, bounds.height)

这篇文章这篇文章中查看更多示例。

Xcode的构建时间分析器

开发了一个Xcode插件,它对于遇到这些问题的任何人都可以派上用场。

图片

Swift 3中似乎有一些改进,因此希望我们能看到更快的Swift代码编译。


太好了,希望我能给您超过+1。你是对的,你的插件也很棒。我已经使用了它,而我的构建时间却减少了,这意味着超快速的开发,因为此可选选项有时会成为噩梦,并导致编译器变慢。
hardikdevios

太棒了!您的工具对我有很大帮助。谢谢
菲尔

很棒的插件-真的很有用!谢谢
365SplendidSuns '16

@Robert Gummesson,我们有用于Objective-C代码的工具吗?
Ashok

19

可能我们无法修复Swift编译器,但是我们可以解决的是代码!

Swift编译器中有一个隐藏选项,可打印出编译器编译每个函数所需的确切时间间隔:-Xfrontend -debug-time-function-bodies。它使我们能够找到代码中的瓶颈,并显着缩短编译时间。

在终端中简单运行以下命令并分析结果:

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

很棒的Brian Irace撰写了一篇精彩的文章,描述了你的Swift编译时间


2
对于那些先使用zsh的用户alias grep='noglob grep',否则grep将不起作用
Jaime Agudo

16

解决方案是铸造。

我有大量的词典,像这样:

["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
["title" : "someTitle", "textFile" : "someTextFile"],
.....

编译大约花了40分钟。直到我这样铸造字典:

["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
["title" : "someTitle", "textFile" : "someTextFile"] as [String : String],
....

这几乎解决了我遇到的关于我硬编码到应用程序中的数据类型的其他所有问题。


6
是的,这是您改善编译时间的优化措施的一部分,但仍然是当前swift编译器的主要问题,因为每次您进行最细微的修改后,它仍会重新编译所有单个swift文件。
2015年

4
如果不是那么难过,那将很有趣。
汤姆·安德森

15

需要注意的一件事是,使用嵌套类型时,Swift类型推断引擎可能会非常慢。通过查看花费很长时间的各个编译单元的构建日志,然后将完整的Xcode-spawned命令复制并粘贴到“终端”窗口中,然后按CTRL- \,您可以大致了解导致缓慢的原因。一些诊断。有关完整示例,请访问http://blog.impathic.com/post/99647568844/debugging-slow-swift-compile-times


对我来说,这是最好的答案(请参阅链接)。我可以轻松地找到问题所在的两条不同的线,并通过将我的线分解成较小的线来解决它。
Nico 2015年

这是一个非常有用的答案,因为它显示了如何查找编译器发疯的地方。在我的情况下,它是以下内容:'curScore [curPlayer%2] + curScore [2 + curPlayer%2] == 3 && maker%2 == curPlayer%2'一旦我将其从'if'移至'let ',这导致“表达式过于复杂,无法在合理的时间内解决;请考虑将表达式分解为不同的子表达式”
Dmitry

这绝对是解决此问题的最有用的方法。
理查德·韦纳布尔

9

还要确保在编译调试时(无论是Swift还是Objective-C),您都设置为Build Active Architecture Only:

在此处输入图片说明


6

由于所有这些东西都在Beta中,并且由于Swift编译器(至少到今天为止)还没有打开,所以我想您的问题没有真正的答案。

首先,将Objective-C与Swift编译器进行比较有点残酷。Swift仍处于Beta版,我确信Apple不仅在提供闪电般的速度(您不会通过购买家具开始盖房子)方面还在努力提供功能和修复错误。我猜苹果会适时优化编译器。

如果由于某种原因必须全部编译所有源文件,则可以选择创建单独的模块/库。但是该选项尚不可行,因为Swift必须等到语言稳定后才能允许库。

我的猜测是他们将优化编译器。出于同样的原因,我们无法创建预编译的模块,很可能是编译器需要从头开始编译所有内容。但是一旦语言达到稳定版本并且二进制文件的格式不再更改,我们就可以创建我们的库,并且也许(?)编译器也可以优化其工作。

不过,仅凭猜测就可以知道,苹果公司...


“出于同样的原因,我们无法创建预编译的模块,很可能是编译器需要从头开始编译所有内容。” 很好的观察,之前从未考虑过。
chakrit 2015年

1
2017年,它仍然很慢
Pedro Paulo Amorim

2017年使用Xcode 9和新的构建系统并且仍然很慢
pableiros

2018年使用Xcode 9,我有一个包含50个以上快速文件的项目,如果我进行干净的构建,现在已经过去了5分钟,而且我的编译还没有完成。
陈李咏

5

对于Xcode 8,转到项目设置,然后转到编辑器>添加构建设置>添加用户定义的设置,然后添加以下内容:

SWIFT_WHOLE_MODULE_OPTIMIZATION = YES

加上这个标志,对于一个40KLOC迅速的项目,奇迹般地将我们的干净编译时间从7分钟减少到65s。也可以确认2个朋友在企业项目上看到了类似的改进。

我只能假设这是Xcode 8.0中的某种错误

编辑:对于某些人,它似乎在Xcode 8.3中不再起作用。


2
请问“项目设置”在哪里?
拉尼斯(Raniys)

@Raniys单击Xco​​de左窗格中根目录级别的蓝色图标。
克里斯

我发现从Xcode 8.3(非beta版)开始,这种情况在我的情况下不再起作用:(
Chris

4

不幸的是,Swift编译器仍未针对快速和增量编译进行优化(自Xcode 6.3 beta起)。同时,您可以使用以下一些技术来缩短Swift编译时间:

  • 将应用程序拆分为框架,以减少重新编译的影响。但是请注意,您必须避免应用程序中的循环依赖关系。有关此主题的更多信息,请查看以下文章:http : //bits.citrusbyte.com/improving-swift-compile-time/

  • 对于项目中相当稳定且不经常更改的部分,请使用Swift。对于需要经常更改的其他区域或需要大量编译/运行迭代才能完成的区域(几乎所有与UI相关的东西),最好将Objective-C与混合匹配方法一起使用。

  • 尝试使用“ Injection for Xcode”注入运行时代码

  • 使用roopc方法:http://roopc.net/posts/2014/speeding-up-swift-builds/

  • 通过使用显式强制转换提供一些提示来减轻swift类型推断引擎的负担。


4

Swift数组和字典的构造似乎是一个很受欢迎的原因(特别是对于来自Ruby背景的人),也就是说,

var a = ["a": "b",
         "c": "d",
         "e": "f",
         "g": "h",
         "i": "j",
         "k": "l",
         "m": "n",
         "o": "p",
         "q": "r",
         "s": "t",
         "u": "v",
         "x": "z"]

可能是应该解决此问题的原因:

var a = NSMutableDictionary()
a["a"] = "b"
a["c"] = "d"
... and so on

4

为了进行调试和测试,请确保使用以下设置将编译时间从大约20分钟缩短到少于2分钟,

  1. 在项目构建设置中,搜索“优化”。将调试设置为“最快[-O3]”或更高版本。
  2. 为活动架构设置构建:是
  3. 调试信息格式:DWARF
  4. 整个模块优化:否

我浪费了无数的时间来等待项目的建立,只是意识到我不得不做一点小改动,又不得不等待整个30分钟来测试它。这些是对我有用的设置。(我仍在尝试设置)

但是,请确保至少将“带有dSYM的DWARF”(如果要监视您的应用程序)设置为“否”,然后将发布/存档的Active Active Build设置为“否”以推送到iTunes Connect(我记得这里也浪费了几个小时)。


4
我可能错了,但是设置提高的优化级别会不会真的增加构建时间?优化级别将提高运行时性能。
Michael瀑布

1
Set Build for Active Architecture: YES使我的编译时间减少了大约45%。太谢谢了。
Jean Le Moignan

4

编译器花费大量时间来推断和检查类型。因此,添加类型注释对编译器有很大帮助。

如果您有很多链接函数调用,例如

let sum = [1,2,3].map({String($0)}).flatMap({Float($0)}).reduce(0, combine: +)

然后,编译器需要一些时间来确定sum应为哪种类型。添加类型会有所帮助。将间歇性步骤拖入单独的变量中也很有帮助。

let numbers: [Int] = [1,2,3]
let strings: [String] = sum.map({String($0)})
let floats: [Float] = strings.flatMap({Float($0)})
let sum: Float = floats.reduce(0, combine: +)

特别是对于数字类型CGFloatInt它可以提供很多帮助。像这样的文字数字2可以表示许多不同的数字类型。因此,编译器需要从上下文中找出它是哪一个。

+应该避免花费大量时间查找的函数。使用多个+连接多个数组的速度较慢,因为编译器需要确定+应该为每个调用哪种实现+。因此var a: [Foo]append()如有可能,请使用with 代替。

您可以添加警告以检测哪些功能在Xcode中编译缓慢

在目标的“ 构建设置”中搜索“ 其他Swift标志”并添加

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

对所有花费100毫秒以上的时间进行编译的警告。


4

对于混合了Objective-C和Swift代码的项目,我们可以-enable-bridging-pch在中设置Other Swift Flags。这样,桥接头仅被解析一次,结果(一个临时的“预编译头”或“ PCH”文件)被缓存并在目标中的所有Swift文件中重复使用。苹果公司声称将构建时间减少了30%。参考链接:

注意:这仅适用于Swift 3.1及更高版本。


2

重新启动Mac确实解决了这个问题。仅通过重新启动,我就从15分钟的构建升级到了30秒的构建。


1

新的Xcode 6.3改进了 Swift编译时间

编译器改进

Swift 1.2编译器经过精心设计,可以更加稳定并以各种方式提高性能。在Xcode中使用Swift时,这些更改还提供了更好的体验。一些最明显的改进包括:

增量构建

默认情况下,未更改的源文件将不再重新编译,这将在大多数情况下大大缩短构建时间。对代码进行较大的结构更改可能仍需要重建多个文件。

更快的可执行文件

调试版本产生的二进制文件运行得更快,而新的优化则提供了更好的Release版本性能。

更好的编译器诊断

更清晰的错误和警告消息以及新的Fix-its,使编写正确的Swift 1.2代码更加容易。

稳定性提高

最常见的编译器崩溃已得到修复。您还应该在Xcode编辑器中看到更少的SourceKit警告。


0

这是另一种可能导致类型推断严重减速的情况。合并运算符

更改如下行:

abs(some_optional_variable ?? 0)

abs((some_optional_variable ?? 0) as VARIABLE_TYPE)

帮助我将编译时间从70s提升到13s


0

在Xcode 6.3.1中对我没有任何帮助-当我添加arround 100个Swift文件时,Xcode随机挂在构建和/或索引编制上。我尝试过模块化选项,但没有成功。

安装和使用Xcode 6.4 Beta实际上对我有用


0

这对我来说就像魔术一样- 加快Swift编译速度。它将编译时间从10分钟减少到3分钟。

它说,你应该打开Whole Module Optimization,同时增加-OnoneOther Swift Flags

Swift 3Xcode 8.3/上Xcode 8.2使用。


0

在一个表达式中混合使用整数文字和浮点文字也会导致较长的编译时间。

1.0 + (1.0 + (1  * (1.0 + 1.0))) // 3429ms

1.0 + (1.0 + (1.0  * (1.0 + 1.0))) // 5ms

在我放置一个.0整数字面量之后,许多1000 + ms的编译时表达式减少为10〜100ms。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.