我正在使用Xcode 6 Beta 6.
这是一段时间以来一直困扰着我的事情,但现在已经达到了几乎无法使用的程度.
我的项目开始有一个相当大的65个Swift文件和一些桥接的Objective-C文件(这实际上不是问题的原因).
似乎对任何Swift文件的任何轻微修改(比如在应用程序中几乎不使用的类中添加简单的空格)将导致重新编译指定目标的整个Swift文件.
经过深入调查后,我发现占用编译器时间的几乎100%是CompileSwift
Xcode在swiftc
目标的所有Swift文件上运行命令的阶段.
我做了一些进一步的调查,如果我只使用默认控制器保持app委托,编译速度非常快,但随着我添加越来越多的项目文件,编译时间开始变得非常慢.
现在只有65个源文件,每次编译大约需要8/10秒.根本不是很快.
我还没有看到任何帖子在谈论除了这个问题这一个,但它是一个旧版本的Xcode 6.所以我想知道如果我在这种情况下,唯一的一个.
UPDATE
我在GitHub上检查了一些像Alamofire,Euler和CryptoSwift的 Swift项目,但没有一个项目有足够的Swift文件来实际比较.我找到的唯一一个大小合适的项目是SwiftHN,即使它只有十几个源文件,我仍然可以验证相同的东西,一个简单的空间和整个项目需要重新编译,这开始采取一个很少的时间(2/3秒).
与Objective-C代码相比,分析器和编译都非常快,这真的感觉Swift永远无法处理大型项目,但请告诉我我错了.
使用Xcode 6 Beta 7进行更新
仍然没有任何进步.这开始变得荒谬了.由于缺乏#import
Swift,我真的不知道Apple将如何能够优化它.
更新使用Xcode 6.3和Swift 1.2
Apple已添加增量构建(以及许多其他编译器优化).您必须将代码迁移到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?
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你修改FileA
,编译器显然会标记 …
我已经安装了Xcode 8.0并将Swift 2.2转换为3.0(这个过程也花费了很多时间,我只是让我的Mac一整晚都在运行).我没有一个大项目(大约20个文件).我也在用Pods
.索引以前的Xcode版本(<8.0)工作得很快但现在,升级后,进度条卡在一个位置(我已经等了一个小时).
我试过的事情对我没有帮助:
DerivedData
文件夹并重新启动XcodePods
目录,<project>.xcworkspace
然后重新安装当开发人员花费数小时来解决这些荒谬的问题时,制作这样的软件版本真的不是很酷.这非常令人失望.任何想法如何解决这一问题?
我的项目包括~350个Swift文件和~40个可可pod依赖项.
整个项目迁移到之后Swift 3
,构建时间变得非常缓慢,需要花费3到3分钟才能完全编译.
我注意到如果我在不更改任何文件后重建,它会在合理的时间内构建.但是,如果我添加一个新功能,则需要3分钟以上.
Cocoapods似乎没有引起问题,因为它延迟了Compiling Swift source files
状态.
我跟着这个调查:
在我的目标的构建设置中添加了-Xfrontend -debug-time-function-bodies
标记Other Swift Flags
建立项目
将其复制到终端并运行 pbpaste | egrep '\.[0-9]ms' | sort -t "." -k 1 -n | tail -100
但是,我没有看到任何令人担忧的问题.编译时间最长的文件只有250毫秒.接下来最接近的是100毫秒,即使所有350个文件都需要250毫秒进行编译,这也只有73秒,这与我看到的3分钟以上的版本相差无几.
在更新到Xcode 8
和之前,它从未如此缓慢Swift 3
.
自从Swift 3和XCode8以来,我的项目编译速度非常慢.每次我添加一个空行到文件,重新编译需要一整分钟.当我检查输出时,没有特定的文件需要很长时间.(我也用这个工具测量它:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode)
它似乎总是一次编译4个文件."节奏"非常稳定.只是很慢......
另外:每当我打开或切换文件时,可能需要很长时间才能获得自动完成或错误/警告.
我可以检查什么?我几乎觉得我设置了一些标志,只是像疯了一样拖慢构建速度.
编辑: 这不是解决潜在问题的方法,但我花了一些时间将更多代码转移到框架上.这产生了不同(仅仅因为它每次都必须重新编译更少的文件).这不应该是必要的,但它无法忍受......我当然仍然非常期待一个正确的解决方案.
存档应用程序时的Xcode 7.1,挂起在'复制Swift标准库'.
知道为什么吗?
问题是,在XCode 8中构建Swift应用程序时,源文件会快速编译,但Copying Swift标准库会占用蛋糕 - 相位可以运行几分钟(通常整个构建大约需要4-5分钟,最坏的情况是慷慨地超过10分钟 - 曾经不到一分钟).
此外,存档导出的签名阶段非常缓慢,有时需要接近半小时(再次,过去非常快).
我已经在网上搜索了几天的答案,重新安装了XCode无数次,尝试了新的Swift工具链,尝试打开/关闭Sierra的iCloud Drive(衍生文件夹仍然需要隐藏起来),尝试了每个构建设置,任何人,和他们的母亲一起推荐,做了许多新的空白项目,并失去了所有希望......
所以我的问题是,我怎样才能使它正常?
编辑:我的Mac钥匙串中还有867个 Apple ID密钥(相同数量的pub-s和priv-s,以及附带的证书)- 这个问题是否有可能与它有关?需要大量时间来完成它们并找到正确的签名?
我使用单视图应用程序创建新项目并在设备上运行(iPhone 5s)
产品>清洁和产品>运行
使用Swift需要76秒
使用ObjC需要12秒
Swift或我的电脑出了什么问题?
ios ×5
xcode ×5
swift ×4
swift3 ×4
xcode8 ×3
archive ×1
build ×1
compilation ×1
deployment ×1
indexing ×1
performance ×1