Xcode 8 进行完整的项目重建

Xcode 8 does full project rebuild

将 Swift + ObjC 项目更新为 Xcode 8 (Swift 2.3) 我发现 50% 或更多的时间 Xcode 会完全重建项目而不是增量构建。

所做的更改是添加简单的打印语句。似乎没有关于何时执行完全重建的逻辑。

它出现在 "Check dependencies" 阶段它决定了这一点。在 Xcode 7 这似乎不是问题。

有没有其他人遇到过这种情况?

好的,这是为什么会发生这种情况的答案,但我不知道解决方案。如果您使用 "Other Swift Flag" -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 应用程序,否则你可能甚至不会注意到增量复杂功能不是很正常。如果我学到更多,我会更新。

我发现它一直有效,但是如果您修改桥接 header 中包含的 header,它会编译 swift 文件。如果你来回切换 git 个分支,它也会进行完全编译。

首先确保调试的优化级别设置为None(不是整个模块优化)

然后,根据https://forums.developer.apple.com/thread/62737 Apple Staff (ddunbar):

We believe that setting:

HEADERMAP_USES_VFS = YES

to true in your project (or for all your targets) may be an effective workaround > for many people. This is not guaranteed to work (which is the reason it isn't > already on by default), but it should work for most projects.

这应该通过 "Add user-defined setting" 在您的目标构建设置下添加。

.

在编辑方案 > "Scheme" > 构建选项卡中取消选中 "Find Implicit Dependencies" 为我修复了项目文件。 "Copy swift standard libraries" 仍然需要永远..

Apple 昨天(11 月 14 日)Xcode 发布了新的测试版

Xcode 8.2 beta 2

并且此问题已在发行说明中标记为已解决。

Build System

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

它对我有用。构建速度恢复如常。 遇到这个问题的小伙伴们一定要试一试!

https://developer.apple.com/download/