【问题标题】:Xcode 8 recompiling complete code every timeXcode 8每次都重新编译完整的代码
【发布时间】:2016-09-20 07:31:55
【问题描述】:

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

【问题讨论】:

  • 为什么这被否决了?!这是一个合法的问题。每次编译需要 4 分钟,降低了所有团队的工作效率。
  • 我也有这个问题。
  • 你在用一些 IBDesignable 的东西修改 xib/storyboards 吗?
  • 相关苹果论坛主题:forums.developer.apple.com/thread/62737。仍然没有解决方法。
  • 确保按照 Apple 论坛中的建议打开错误报告。

标签: ios xcode


【解决方案1】:

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 月 4 日更新

这个问题似乎是resolved with Xcode 8.2 (beta 2)

但对我来说,它没有得到解决,即使我使用 Xcode 8.2 也面临这个问题。 可以试试(下载Xcode8.2 beta2here

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


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

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

For reference

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

【讨论】:

  • 到目前为止一切顺利!!!给我一小时,如果持续下去,赏金就是你的了。
  • 啊,又要重新编译一切了
  • 我也有同样的行为。如果我清除派生数据(或更改 C 语言方言),它将适用于大约 10 次构建。之后它会回退以重建所有内容。
  • Xcode 8.2 (beta 2) 适用于 10 个构建,然后从头开始重新构建所有内容,但仍然比以前的更好。
  • 不幸的是,这个问题在 Xcode 8.3 beta 2 中仍然存在(至少对我们而言)。我们的项目没有明显的改进。
【解决方案2】:

转到产品 -> 方案 -> 编辑方案。 选择左侧栏中的构建并取消选中“查找隐式依赖项

但是当你第一次构建项目时,这个标志应该保持选中状态..

【讨论】:

  • @Josh,您是否在项目中使用多个项目(例如子项目或包含)。通过查看构建输出,您确定它确实在重建所有内容吗?
  • 它是一个包含 cocoapods 和主项目的基本工作区。 CocoaPods 保持构建,但主项目重新构建每个文件;观察构建输出,它肯定有 100 多个文件正在重建。
  • 更新:似乎这个解决方案在这样做之后适用于一些构建,但是清理整个项目并重建也是如此。然而,到第 2-8 次重建时,它又开始重新编译所有内容。有任何想法吗?令人沮丧。
  • 这不起作用,至少对于 CocoaPods 工作区不起作用。一切都在建立,每次。超级烦人,特别是因为苹果已经有多年时间来解决这个问题。
【解决方案3】:

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

【讨论】:

  • 哈,原来这么简单:)
【解决方案4】:

更新

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

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

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

Xcode 9 对我来说一直是个问题。像你们中的许多人一样,我正在处理一个大型 swift 4/cocoapods 项目,其中包含许多源文件并且每次都重新编译每个文件真气。

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

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

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

  • 构建设置 -> HEADERMAP_USERS_VFS = YES

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

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

      HEADERMAP_USES_VFS = YES

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

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

      编辑:有时仍会重新编译所有内容,尽管在定义此设置后似乎不太频繁。

      【讨论】:

      • 我也添加了这个值,构建时间更快但它没有解决增量构建。我已将 Swift 编译器 - 代码生成/调试更改为快速、整体模块优化……是迄今为止最好的结果
      • 我什至找不到用户定义的)
      • @DavidSeek 位于构建设置的最底部
      • 如果您没有看到它,请阅读此meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
      【解决方案7】:

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

      【讨论】:

      • 我们使用了相当多的@IBDesignable 指令...有什么特别需要我们寻找的吗?
      • 我认为可以通过一一排除找到它们,并检查结果,我的情况是整个项目中只有两个@IBDesignable指令。
      【解决方案8】:

      Madhuri Mane 在这点上是完全正确的。为了更清楚一点,需要注意一些要点:

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

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

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

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

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

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          【解决方案10】:

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

          Xcode 8.2 beta 2

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

          构建系统

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

          它对我有用。构建速度像往常一样恢复。 遇到这个问题的小伙伴们不妨一试!

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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

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

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

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

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

              【讨论】:

              • 这确实有效,但有时 XCode 会因代码 1 而失败,您必须进行干净的构建。这是一场噩梦
              • 在其他情况下 Xcode 将始终进行完整构建。我发现如果您修改桥接头中包含的 .h 文件,它将重建所有 Swift 文件。可能还有其他与 Xcode 错误无关的场景。
              • 在某些情况下,唯一的变化是函数重命名或添加到现有类/结构的新属性会导致整个重建。
              • 参考这个问题/答案,这个线程是这个的副本:有更好的解决方案:stackoverflow.com/questions/39456223/…
              【解决方案13】:

              通过将取消选中应用于“查找隐式依赖项”解决方案来解决我这边的问题。

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

              中选择它来将此设置也应用于您的 pod 项目

              Product -> Scheme -> Pods-"yourProjectName"

              也适用于:

              产品 -> 方案 -> "yourProjectName"

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

              谢谢

              【讨论】:

                【解决方案14】:

                尝试: 1. 导航到项目 2.点击构建设置 3. 检查优化级别是否设置为无以进行调试。 4. 单击添加用户定义的设置 5. 将 SWIFT_WHOLE_MODULE_OPTIMIZATION 设置为 YES。

                【讨论】:

                • 我写一封信时它仍然可以编译。
                【解决方案15】:

                为了增加xcode的编译时间,可以使用IRAMDISK(Virtual memory disk)。非常有用且有效的减少编译时间的方法。

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

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

                【讨论】:

                • 如果您已经有 SSD 磁盘,这不会加快编译速度。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-02-25
                • 1970-01-01
                相关资源
                最近更新 更多