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


131

进行任何代码更改(尽管文件不在.pch中),每次都会重新编译完整的项目。


31
为什么这样投票?这是一个合法的问题。每次花费4分钟进行编译,这使所有团队的工作效率大打折扣。
乔什

1
我也遇到这个问题。
2016年

3
您是否正在使用IBDesignable东西修改xib / storyboard?
拉姆(Larme)2016年

1
相关的苹果论坛线程:forums.developer.apple.com/thread/62737。仍然没有解决方法。
ldiqual

1
确保按照Apple论坛的建议打开错误报告。
Leo Natan

Answers:


34

更新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

我现在选择原子代码和命令行来构建和调试。希望苹果公司能尽快修复此合法错误。

更新2016/12/04

Xcode 8.2(beta 2)似乎解决了此问题。

但是对我来说,它还没有解决,即使使用Xcode 8.2,我也要面对这个问题。您可以尝试一下(在此处下载Xcode8.2 beta2 )

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


旧答案: 这是一种解决方法:

在此处输入图片说明 “构建设置”选项卡->“ C语言方言”->将其更改为“编译器默认值”。

供参考

将“ C语言方言”设置为“ GNU99”,而不是“编译器默认值”。以前的标准是GNU99,但现在不是。在某些时候,Xcode无法正确迁移库项目设置,因此将其设置为GNU99。一旦将其更改为GNU99,它每次都会停止重新编译我的所有代码!


1
到目前为止,一切都很好!!!给我一个小时,如果持续下去,赏金是您的。
亚当·怀特

7
哎呀,它又回到了重新编译一切的过程
亚当·怀特

1
我有相同的行为。如果我清除派生数据(或更改C语言方言),它将可以使用大约10个版本。之后,它会重新构建所有内容。
bluebamboo

1
Xcode 8.2(beta 2)适用于10个版本,然后从头开始重建所有内容,但仍然比以前的版本好。
马库斯

3
不幸的是,该问题在Xcode 8.3 beta 2中仍然存在(至少对我们而言)。在我们的项目中没有明显的改进可以衡量。
卡斯珀·芒克

20

转到产品->方案->编辑方案。选择“在左侧列中构建”,然后取消选中“ 查找隐式依赖项

但是,当您第一次构建项目时,应保持选中此标志。


@Josh,您是否正在项目中使用多个项目(例如,子项目或包含的项目)。通过查看构建输出,您确定它确实在重建所有内容吗?
Mobile Ben

3
它是带有cocoapods和主要项目的基本工作区。CocoaPods保持构建状态,但是主项目会重新构建每个文件。观看构建输出及其绝对所有的100多个文件的重建。
乔什(Josh)2016年

1
更新:此解决方案似乎在此之后适用于一些构建,但是清理整个项目并重新构建也是如此。但是,到2-8次重建时,它将重新开始重新编译所有内容。有任何想法吗?除了令人沮丧。
乔什(Josh)

这不起作用,至少对于CocoaPods工作空间不起作用。一切都在建造,每次都在建造。超级烦人,尤其是自从苹果已经解决该问题已有数年之久。
Womble

7

对我来说,修复只是关闭情节提要,我用辅助编辑器打开了源文件,并且还打开了情节提要文件(关闭了情节提要---因为我没有对其进行任何更改)删除了所有不必要的编译


1
哈,它是如此的容易:)
Manmal

5

更新

我能做的最大的改进就是模块化了我的项目。专门模块化了几乎在所有其他类中使用的ORM层。通过将代码移到项目中的单独目标中并将其作为模块导入,我可以大大缩短编译时间。当我进行构建时,Xcode不再决定重新编译不需要的文件。

现在,我使用“ 单个文件”编译方法进行快速增量调试。

此链接中还有一些其他好的建议,包括代码重构, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

对于Xcode 9来说,对于我来说仍然是一个长期存在的问题。像你们中的许多人一样,我正在开发一个大型的Swift 4 / cocoapods项目,其中包含许多源文件,并且每次令人不快地重新编译每个文件。

到目前为止,使用以下设置可获得最佳效果。我建议您尝试一下,看看它如何为您工作。

  • 架构->构建-> “查找隐式依赖关系” = TRUE
  • 构建设置-> 链接时优化=增量
  • 构建设置-> 优化级别(调试)=无[-OO]
  • 构建设置-> 优化级别(发布)=最快,最小[-Os]
  • 构建设置-> 增加预编译标题的共享=是
  • 构建设置-> 启用增量蒸馏=是

添加了自定义的用户定义的构建设置,

  • 构建设置-> HEADERMAP_USERS_VFS = YES

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


3

我更改了有关前缀标头的代码,似乎已解决了该问题。我不知道哪个人真正成功了,但我将与大家分享,希望它可以帮助其他人。如果您没有设置前缀标头,那么我想这不是问题(或者问题是多方面的)。

  1. 从前缀标头中删除所有来自已构建产品目录中文件的导入,因此可以将其构建设置(“预编译标头使用来自构建目录的文件”)更改为“否”。确保它也不是通过其他进口间接进口的。
  2. 从使用Clang模块的前缀标头中删除所有导入(在标头目录中具有module.modulemap文件的库或框架,因此您可以编写类似的代码@import MyModule)。(对我来说,这和步骤1是相同的。)
  3. 将前缀头共享的构建设置设置为“是”。(我认为这不是必需的,并且它对我自己的项目不会有任何影响。我之所以这么说是因为我更改了它,因为我愿意尝试任何事情。:))
  4. 退出Xcode并删除您的DerivedData / ModuleCache目录(如果我没有记错的话,请配置为〜/ Library / Developer)。

如果仍然无法解决问题,您可以尝试从前缀标头中删除更多导入。可能有东西绊倒了...


3

看起来他们正在根据https://forums.developer.apple.com/thread/62737积极从事这项工作,但有一种解决方法是添加

HEADERMAP_USES_VFS = YES

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

在过去一个月没有其他解决方案持续工作之后,该解决方案今天对我而言一直有效。

编辑:有时仍会重新编译所有内容,尽管使用此设置定义它似乎不那么频繁。


我还添加了此值,构建时间更快,但是并不能解决增量构建问题。我已将Swift编译器-代码生成/调试更改为快速的整个模块优化...是迄今为止最好的结果
Antonio Junior

我什至找不到用户定义的内容)
David Seek

2
@DavidSeek位于“构建设置”的最底部
Laser Hawk

1
如果您没有看到它,那么请阅读Meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk,

3

@IBDesignable在我的特殊情况下,经常检查Xcode构建项目中有关指令的所有代码, 因为我的情节提要板上有一些视图,其中包含此@IBDesignable属性。第二件事是,我也在单独的窗口(而不是选项卡)中打开了情节提要,这将永远推动我的Xcode make构建所有模拟器。


我们使用了很多@IBDesignable指令……特别要寻找什么吗?
Stan

我认为可以通过一个一个地排除它们并检查结果来找到它们,我的情况是整个项目中@IBDesignable指令中只有两个。
ua24

2

Madhuri Mane对此完全正确。为了更加清楚起见,需要注意一些要点:

仅当您对目标所依赖的库/框架有隐式依赖时,这才适用。

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

结果:在构建应用程序目标之前,不会构建该库。应用程序目标无法构建。

修复:为了确保第二种情况不会发生,您必须将必要的目标添加到目标列表中并正确排序。

来源和对该主题的进一步阅读:https : //pewpewthespells.com/blog/managing_xcode.html#scheme-action

现在,如果您的整个项目都位于一个目标中,并且需要4分钟的时间进行编译,则除了将其分解为框架以利用上述优势或找出编译滞后的地方外,您无能为力。如果您使用的是PaintCode之类的内容,或者迅速将大量的UIKit代码更改为Objective-c,则编译速度会更快


2

转到目标的构建设置并设置Defines ModuleYes

为我工作了两个版本,现在断言这是一个确定的解决方法还为时过早,但至少我们正在尝试。


2

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

Xcode 8.2 beta 2

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

建立系统

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

它为我工作。生成速度照常恢复。面对这个问题的每个人都应该尝试一下!

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


2

请转到项目的构建设置,然后更改“ C语言方言”。

更新xcode版本时,“ C语言方言”设置为“ GNU99”,而不是“编译器默认”。在某些时候,Xcode无法正确迁移库项目设置,因此将其设置为GNU99。这样可以解决问题


1

如果对Swift文件进行了更改,则开始构建应用程序,请转到最后一个选项卡,然后单击构建日志,在“检查依赖项”阶段,停止构建并再次运行。在第二次运行时,它应仅构建您修改的文件。如果正确完成,我发现它每次都可以工作。无需进行任何项目设置更改。

这似乎是Xcode中的错误。

在此处输入图片说明

如果您看到该应用正在执行完整构建,请停止构建,然后重试此技巧。

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


这确实有效,但是有时XCode会因代码1失败,因此您必须进行Clean Build。这是一场噩梦
Antonio Junior

在其他情况下,Xcode将始终执行完整构建。我发现如果您修改桥接头中包含的.h文件,它将重建所有Swift文件。可能还有其他与Xcode错误无关的情况。
弗拉德(Vlad)

在某些情况下,唯一的变化是函数重命名或将新属性添加到现有类/结构中,从而导致整个重建。
Antonio Junior

请参阅此问题/答案,该线程是对此的重复:具有更好的解决方案:stackoverflow.com/questions/39456223/…–
Vlad

1

通过将取消选中的“发现隐式依赖项”解决方案应用于我,可以解决此问题。

但是请记住,如果您使用的是cocoapods,请通过从

产品->方案-> Pod-“ yourProjectName”

也适用于:

产品->方案->“ yourProjectName”

它可以帮助我,所以我希望这个提示可以帮助其他人。

谢谢


1

尝试执行以下操作:1.导航到Project 2.单击“ Build Settings”。3.检查是否将OptimizationLevel设置为“ None”以进行调试。4.单击添加用户定义的设置。5.将SWIFT_WHOLE_MODULE_OPTIMIZATION设置为YES。

在此处输入图片说明


没有任何工作,当我写一个字母时它仍然可以编译。
Chandni '18

-2

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

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

请参阅以下链接下载和使用:http : //iramdisk.findmysoft.com/mac/


如果您已经有SSD磁盘,这将不会加快编译速度。
Jano
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.