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

时间:2016-09-20 07:31:55

标签: ios xcode

如果代码有任何变化(虽然文件不在.pch中),每次都会重新编译完整的项目。

15 个答案:

答案 0 :(得分:33)

更新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到代码和命令行来构建和调试是我现在的选择。 希望Apple能尽快修复这个合法的错误。

更新2016/12/04

此问题似乎resolved with Xcode 8.2 (beta 2)

但对我而言,即使我使用Xcode 8.2,我也无法解决这个问题。 你可以尝试一下(下载Xcode8.2 beta2 here

  

构建系统•只有很小的时候,Xcode不会重建整个目标   发生了变化。 (28892475)

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

enter image description here "构建设置"标签 - > " C语言方言" - >将其更改为"编译器默认"。

For reference

  

C语言方言"被设置为" GNU99"而不是"编译器   默认&#34 ;.以前标准是GNU99,但现在不是。在某些   点Xcode没有正确地迁移库项目设置   所以它被设置为GNU99。一旦我将其更改为GNU99,它就停止了   每次重新编译我的所有代码!

答案 1 :(得分:19)

转到产品 - >方案 - >编辑方案。 选择左侧列中的Build并取消选中“ Find implicit dependencies

但是,当您第一次构建项目时,此标志应保持检查状态。

答案 2 :(得分:6)

修复我只是关闭故事板,我用辅助编辑器打开源文件,同时打开故事板文件(关闭故事板 - 因为我没有对其进行任何更改)删除了所有不必要的编译

答案 3 :(得分:4)

<强>已更新

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

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

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

<强> OLD

对于我来说,使用Xcode 9仍然是一个不变的问题。像许多人一样,我正在开发一个包含许多源文件的大型 swift 4 / cocoapods 项目,并且每次重新编译每个文件真气。

到目前为止,我通过以下设置获得了最佳效果。我建议你试一试,看看它对你有用。

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

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

  • 构建设置 - &gt; HEADERMAP_USERS_VFS =是

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

答案 4 :(得分:3)

我用我的代码改变了一些关于前缀标题的东西,似乎解决了这个问题。我不知道哪一个确实做了这个伎俩,但是我会分享它们,希望它可以帮助其他人。如果您没有设置前缀标题,那么我想这不是问题(或问题是多方面的)。

  1. 从前缀标题中删除任何来自构建产品目录的文件的导入,以便您可以更改此构建设置(&#34;预编译标题使用构建目录中的文件&#34;)到&#34;否&# 34 ;.确保它不是通过其他导入间接导入的。
  2. 从使用Clang模块的前缀头中删除任何导入(在Headers目录中具有module.modulemap文件的库或框架,因此您可以编写类似@import MyModule的代码)。 (对我来说,这和第1步是同一个。)
  3. 将前缀标题共享的构建设置设置为&#34;是&#34;。 (我不认为这是必要的,它不应该对我自己的项目有任何影响。我只是说明这一点,因为我改变了它,因为我愿意尝试任何东西。:))
  4. 退出Xcode并删除DerivedData / ModuleCache目录(如果我没记错的话,配置为〜/ Library / Developer)。
  5. 如果仍然无效,您可以尝试从前缀标题中删除更多导入。可能有些事情绊倒......

答案 5 :(得分:3)

根据https://forums.developer.apple.com/thread/62737看起来他们正在积极开展工作,但解决方法是添加

HEADERMAP_USES_VFS = YES

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

在过去一个月没有其他解决方案始终如一地运作之后,这个解决方案今天每次都适用于我。

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

答案 6 :(得分:3)

在我的特定案例Xcode构建项目中查看@IBDesignable指令的所有代码,因为我的故事板上有一些包含此@IBDesignable属性的视图。 第二件事是我也在单独的窗口(不是制表符)中打开我的故事板,这是我的Xcode永远为所有模拟器构建的。

答案 7 :(得分:2)

Madhuri Mane对此非常正确。为了增加一点清晰度,需要注意一些要点:

如果您对目标所依赖的库/框架具有隐式依赖性,那么这仅适用。

如果&#34;找到隐含的依赖关系&#34;被禁用:

  

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

     

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

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

现在,如果你的整个项目都在一个目标内并且需要4分钟来编译,那么除了将其分解为框架以利用上述内容或找出编译的位置之外,你无法做很多事情。滞后。如果你正在使用像PaintCode这样的东西或者有大量的UIKit代码快速更改为Objective-c它会编译得更快

答案 8 :(得分:2)

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

为我做了几个版本的工作,很快就声称这是一个明确的解决方法,但至少我们正在尝试。

答案 9 :(得分:2)

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

Xcode 8.2 beta 2

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

  

构建系统

     

•只有很小的时候,Xcode不会重建整个目标   发生了变化。 (28892475)

这对我有用。构建速度像往常一样回归。 每个面对这个问题的人都应该试一试!

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

答案 10 :(得分:2)

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

更新xcode版本时,“C语言方言”设置为“GNU99”而不是“编译器默认值”。在某些时候,Xcode没有正确地迁移库项目设置,所以它被设置为GNU99。 这将解决问题

答案 11 :(得分:1)

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

这似乎是Xcode中的一个错误。

enter image description here

如果您看到该应用正在进行完整版本,请停止构建并再次尝试此技巧。

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

答案 12 :(得分:1)

通过应用取消选中&#34;查找隐式依赖关系&#34;来解决我的问题。溶液

但请记住,如果您正在使用cocoapods,请将此设置应用于您的pod项目,方法是从

中选择它。

产品 - &gt;方案 - &gt;荚 - &#34;命名为yourprojectname&#34;

也适用于:

产品 - &gt;方案 - &gt; &#34;命名为yourprojectname&#34;

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

由于

答案 13 :(得分:1)

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

enter image description here

答案 14 :(得分:-1)

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

也可用于加速常用的应用程序。

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