Xcode 8每次重新编译完整的代码

对于代码的任何更改(虽然文件不在. pch 中) ,每次都会重新编译完整的项目。

23380 次浏览

进入产品-> 方案-> 编辑方案。 选择 Build in left side column 并取消选中“ 查找隐式依赖项

但是,当您第一次构建项目时,应该保留此标志。

如果您已经对 Swift 文件进行了更改,开始构建应用程序,请转到最后一个选项卡并单击构建日志,在“检查依赖项”阶段停止构建并再次运行它。在第二次运行时,它应该只生成您修改的文件。如果做得正确,我发现它每次都管用。不需要做任何项目设置更改。

这似乎是 Xcode 的一个窃听器。

enter image description here

如果你看到应用程序正在做一个完整的构建,然后停止构建,再试一次这个技巧。

如果您没有对代码进行任何更改,使用 CMD + CTRL + R 来运行,而不需要构建附加调试器的应用程序。不会建立应用程序,但可以帮助节省不必要的时间。

Madhuri Mane 在这一点上是完全正确的:

这只适用于隐式依赖于目标所依赖的库/框架的情况。

如果禁用“查找隐式依赖项”:

结果: 图书馆在建成之前不会建成 应用程序目标生成失败。

解决方案: 为了确保第二种情况不会发生,您必须添加 将必要的目标列入目标列表并正确排序。

资料来源和关于这一主题的进一步阅读: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

现在,如果您的整个项目都集中在一个目标中,并且需要4分钟的编译时间,那么除了将其分解成框架以利用上述优势或者找出编译滞后的地方之外,您对此无能为力。如果您正在使用 PaintCode 之类的代码,或者有大块的 UIKit 代码,请迅速将其更改为 Objective-c,它的编译速度要快得多

更新2017/1/2

这个问题在 Xcode 8.2.1(我的项目)还没有解决

如何生存?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

更新2016/12/17

这个问题在 Xcode 8.2中尚未解决。

更新2016/12/12

Atom 到代码和命令行来构建和调试是我现在的选择。 希望苹果能尽快修复这个合法漏洞。

2016/12/04年度最新情况

这个问题似乎 用 Xcode 8.2(beta 2)解决

但是对我来说,这个问题没有得到解决,即使我使用 Xcode 8.2,我也面临着这个问题。 您可以尝试一下(下载 Xcode8.2 beta2 给你)

当目标很小时,Xcode 不会重建整个目标 (28892475)


老答案: 这是一种解决办法:

enter image description here “构建设置”选项卡-> “ C 语言方言”-> 更改为“编译器默认值”。

供参考 :

“ C 语言方言”被设置为“ GNU99”而不是“编译器” 以前的标准是 GNU99,但现在不是了 Point Xcode 没有正确迁移库项目设置,并且 所以它被设置为 GNU99。一旦我把它改成 GNU99它就停止了 每次都重新编译我所有的代码!

我修改了一些关于前缀头部的代码,似乎已经解决了这个问题。我不知道哪一个真的起作用了,但我会把它们都分享出来,希望能帮到其他人。如果您没有一个前缀头集,那么我想这不是问题所在(或者问题是多方面的)。

  1. 删除从构建产品目录的前缀头文件中导入的任何文件,这样你就可以将这个预编译头的构建设置(“从构建目录中使用文件”)更改为“否”。确保它不是通过其他导入间接导入的。
  2. 删除使用 Clang 模块的前缀头部的任何导入(在其 Header 目录中有 module.modulemap 文件的库或框架,因此您可以编写类似 @import MyModule的代码)。(对我来说,这和步骤1是一回事。)
  3. 将前缀头共享的生成设置设置为“ Yes”。(我不认为这是必要的,它不应该有任何影响,在我自己的项目。我这么说是因为我改了名字因为我愿意尝试任何事。:))
  4. 退出 Xcode 并删除您的衍生数据/模块缓存目录(如果我没记错的话,配置为 ~/Library/Developer)。

如果这仍然不起作用,您可以尝试从前缀头中删除更多的导入。可能有什么东西把它绊倒了。

转到目标的构建设置,并将 Defines Module设置为 Yes

为我工作了一些建设,现在说这是一个权威的解决方案还为时过早,但至少我们在努力。

看起来他们正在根据 https://forums.developer.apple.com/thread/62737积极地工作,但是一个变通方法是添加

HEADERMAP_USES_VFS = YES

在目标的生成设置下(项目-> 目标-> 生成设置-> 用户定义)。

这个解决方案在过去一个月没有其他解决方案持续工作之后,今天每次都对我有效。

编辑: 仍然有时重新编译所有内容,尽管在定义了这个设置之后,重新编译的频率似乎要低得多。

为了延长 xcode 的编译时间,可以利用 IRAMDISK (虚拟内存磁盘)。减少编译时间的非常有用和有效的方法。

也可以用来加速常用的应用程序。

请参阅以下连结下载及使用: Http://iramdisk.findmysoft.com/mac/

苹果昨天(11月14日)发布了 Xcode 的新 beta 版本

Xcode 8.2 beta 2

这个问题已经在发布说明中标记为已解决。

构建系统

•当目标很小时,Xcode 不会重新构建整个目标 (28892475)

对我来说很有效,构建速度恢复了正常。 每个面临这个问题的人,都应该试一试!

Https://developer.apple.com/download/

通过将取消检查应用到“查找隐式依赖项”解决方案,从我这边解决了问题。

但是请记住,如果您正在使用 cocoapods,也可以通过选择它来将此设置应用到您的 pod 项目

Product-> Scheme-> Pods-“ yourProjectName”

也适用于:

产品-> 方案-> 「 yourProjectName 」

这对我有帮助,所以我希望这个提示能帮到别人。

谢谢

在我的特殊案例 Xcode build 项目中,一直查看所有关于 @IBDesignable指令的代码,因为我在故事板上有一些视图,其中包含这个 @IBDesignable属性。 第二件事是,我也有我的故事板打开在单独的窗口(而不是选项卡) ,这是推动我的 Xcode 使构建所有的模拟器永远。

对我来说,解决方法就是关闭故事板,我用辅助编辑器打开了源文件,也打开了故事板文件(关闭故事板——因为我没有对它做任何修改) ,删除了所有不必要的编译

请到本项目的建设设置,并更改“ C 语言方言”。

当您更新 xcode 版本时,“ C 语言方言”被设置为“ GNU99”而不是“编译器默认值”。在某些情况下,Xcode 没有正确地迁移库项目设置,因此它被设置为 GNU99。 这会解决问题的

尝试: 1. 导航到项目 2. 单击“生成设置” 3. 检查 OptimizationLevel 是否设置为 Nothing 以进行调试。 4. 单击“添加用户定义的设置” 5. 将 SWIFT _ Whole _ MODULE _ OPTIMIZATION 设置为 YES。

enter image description here

更新

我能够做的最大的改进就是模块化我的项目。特别是模块化 ORM 层,这几乎在每个其他类中都使用。通过将该代码移动到项目中的一个单独目标中,并将其作为模块导入,我能够大大提高编译时间。当我进行构建时,Xcode 不再决定重新编译不必要的文件。

现在,我使用 单一文件编译方法进行快速增量调试构建。

此外,本网站亦提供一些不错的建议,包括代码重构 Https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

老了

对于我来说 Xcode 9仍然是个问题。像你们中的许多人一样,我正在从事一个大型 雨燕4/cocoapods项目,其中包含许多源文件,每次重新编译每个文件都令人恼火。

到目前为止,我得到了以下设置的最佳结果。我建议你试一试,看看效果如何。

  • Schema-> Build-> “查找隐式依赖项”= TRUE
  • 构建设置-> 链路时间优化 = 增量
  • 构建设置-> 优化级别(调试) = 无[-OO ]
  • 构建设置-> 优化级别(发布) = 最快,最小的[-Os ]
  • 构建设置-> 增加预编译头的共享 = YES
  • 构建设置-> 启用增量提取 = YES

添加了自定义用户定义的生成设置,

  • 构建设置-> HEADERMAP _ USERS _ VFS = YES

注意: 我没有用于整个模块优化的自定义设置。