将 Swift + ObjC 项目更新到 Xcode 8 (Swift 2.3) 后,我发现 50% 或更多的时间 Xcode 会完全重建项目而不是增量构建。
所做的更改是添加简单的打印语句。关于何时执行完全重建似乎没有逻辑。
它出现在它决定这一点的“检查依赖关系”阶段。在 Xcode 7 上,这似乎不是问题。
有人遇到过这种情况么?
将 Swift + ObjC 项目更新到 Xcode 8 (Swift 2.3) 后,我发现 50% 或更多的时间 Xcode 会完全重建项目而不是增量构建。
所做的更改是添加简单的打印语句。关于何时执行完全重建似乎没有逻辑。
它出现在它决定这一点的“检查依赖关系”阶段。在 Xcode 7 上,这似乎不是问题。
有人遇到过这种情况么?
我发现这始终有效,但是如果您修改桥接头中包含的标头,它将编译 swift 文件。如果你来回切换 git 分支,它也会进行完整编译。
然后,根据https://forums.developer.apple.com/thread/62737 Apple Staff (ddunbar):
我们认为设置:
HEADERMAP_USES_VFS = YES
在您的项目(或所有目标)中为 true 可能是一种有效的解决方法 > 对于许多人来说。这不能保证有效(这是默认情况下它不是 > 的原因),但它应该适用于大多数项目。
这应该通过目标构建设置下的“添加用户定义的设置”来添加。
.
好的,这是为什么会发生的答案,但我不知道解决方案。如果您使用“其他 Swift 标志”-driver-show-incremental Xcode 将输出它根据依赖项决定需要编译的内容。您会看到如下内容:
Queuing EditProfileViewController.swift because of dependencies discovered later
Queuing ChangePasswordViewController.swift because of dependencies discovered later
Queuing JoinViewController.swift because of dependencies discovered later
Queuing JoinProfileViewController.swift because of dependencies discovered later
Queuing FormViewBuildable.swift because of dependencies discovered later
Queuing RadioTextFormView.swift because of dependencies discovered later
Queuing TextFieldFormView.swift because of dependencies discovered later
Queuing AccountProfileViewController.swift because of dependencies discovered later
我想知道这是否是一个 swift 3 问题,因为在转换之前我没有遇到这个问题。我做了一个小例子项目
FileA 包含来自 FileB 的事物 包含来自 FileC 的事物
甚至向 FileC 添加一个未在任何地方使用的文件私有更改都会导致 FileA、FileB 和 FileC 由于依赖关系而排队等待编译。我将在今天晚些时候在 Xcode 7 中测试这个示例,看看会发生什么。
所以看起来 swift 3 的依赖解析不是很好。我已经在工作中的另外 2 个 swift 3 项目中对此进行了测试,同样如此。对任何文件进行任何更改,每个文件都会被编译。直到您开始使用大约 15,000 行代码左右的项目时,它才会感觉很慢,这可能就是为什么没有人谈论这个的原因。除非您有一个中等大小的 swift 3 应用程序,否则您可能甚至不会注意到增量复杂性无法正常工作。如果我学到更多东西,我会更新。
苹果昨天(11 月 14 日)发布了新的 Xcode 测试版
Xcode 8.2 beta 2
此问题已在发行说明中标记为已解决。
构建系统
• Xcode 不会在仅发生小的更改时重建整个目标。(28892475)
它对我有用。构建速度像往常一样恢复。每个遇到这个问题的人都应该尝试一下!
在 Edit Scheme > “Scheme” > Build 选项卡中取消选中“Find Implicit Dependencies”,为我修复了项目文件。“复制 swift 标准库”仍然需要很长时间。