【问题标题】:Xcode 10 New Build System Clean IssueXcode 10 新构建系统清理问题
【发布时间】:2018-09-25 11:39:19
【问题描述】:

我最近将我的Xcode 更新为 10。默认情况下,“新构建系统”已启用。当我构建我的项目时,我注意到我的更改在模拟器上不起作用。当我尝试调试此代码时,Xcode 显示正确更改的源代码,但执行的代码是旧的。

当我改回“旧版”构建系统时,一切正常。

有类似经历的朋友吗?

谢谢

这可能是 Cocoapods 的问题。因为我确实解锁了 podfile 并尝试编辑一些代码。

【问题讨论】:

  • 我也有同样的问题。除非我清理所有内容,否则不会在新版本中获取开发单元的更改。 fwiw 这里有相关讨论(虽然在撰写本文时没有解决方案):groups.google.com/forum/#!topic/cocoapods/UyxOT5_GFfI
  • 我有同样的问题,这不仅限于对 pod 的更改,当我在代码中注释/取消注释一行时,除非您执行命令,否则更改不会反映在新版本中+Shift+K。当我在“工作区设置”中切换到“旧版构建系统”时,它根本没有这个问题。我的环境是 Xcode Version 10.0 (10A255), macOS MOjave Version 10.14(18A391)
  • 同样的问题,除了没有被拾取的更改是在非 pod 子项目中。实际上:编译中断的更改很好:编译失败。但会忽略非破坏性更改。大声笑!
  • 这个bug已经存在很久了,仍然没有解决方案:/
  • 在 xcode 10.1 中仍然得到这个

标签: swift build cocoapods xcode10


【解决方案1】:

在 Xcode 10 中,新的构建系统是默认的。更新 Xcode 10 后,您的项目将面临问题。Apple 意识到了这些问题,他们在 Xcode 10 发行说明中提到了这一点。

https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes/build_system_release_notes_for_xcode_10

  • 在使用自定义的项目上执行xcodebuild clean 时 在派生数据目录之外构建位置,并且该位置较旧 在 Xcode 10 之前构建产品,Xcode 可能会报错 表示不会删除新创建的目录 构建系统。 (40427159)

    解决方法:手动删除构建文件夹。


作为参考,这里是完整的已知问题部分;最后一次清理失败:

已知问题:

  • 增量构建可能无法正确地为 对项目的非源相关更改,例如资源文件 修改,这可能导致应用程序无法启动。 (41254808)

    解决方法:更改同一目标中的源文件以触发 协同设计过程,或执行干净的构建。

  • 安装 Swift 工具链后,Xcode 不会立即检测到 工具链。 (31360319)

    解决方法:关闭并重新打开工作区。

  • 新的构建系统不支持按需资源 (ODR)。如果 您的项目使用 ODR,旧的构建系统可以重新启用 文件 > 工作区/项目设置。 (31508570)

  • 当在继承的 xcconfig 文件中定义构建设置时 使用 $(inherited) 或 $() 的值,构建设置 编辑器显示设置的最后分配值,而不是 正确组合的值。 (28572636)

  • 具有多个不同资产目录的目标 构建阶段可能会产生有关“重复输出文件”的错误。 (39810274)

    解决方法:确保所有资产目录都由同一个处理 目标中的构建阶段。

  • 新的“使用时序摘要构建”命令不显示 一些任务在构建期间在构建系统中运行。 (39801746)

  • 自定义构建系统插件(包括英特尔 ICC 编译器)不是 还支持。 (32795438, 33286594)

    解决方法:如果需要,切换到使用旧版构建系统 文件 > 项目/工作区设置表。

  • 具有复制标头的目标构建阶段在编译源之后排序 构建阶段可能无法构建并发出有关构建的诊断信息 循环。 (39880168)

    解决方法:在编译之前安排任何 Copy Headers 构建阶段 源构建阶段。

  • 在对使用自定义的项目执行 xcodebuild clean 时 在派生数据目录之外构建位置,并且该位置较旧 在 Xcode 10 之前构建产品,Xcode 可能会报错 表示不会删除新创建的目录 构建系统。 (40427159)

    解决方法:手动删除构建文件夹。

【讨论】:

    【解决方案2】:

    你需要做一些额外的步骤才能最终使它编译成功。 (即使在 Xcode 9 上也需要这些额外的步骤。)

    Xcode:文件 -> 工作区设置 -> 构建系统:旧版构建系统

    Xcode:产品 -> 清洁

    通过不同的模拟器类型旋转编译,例如“iPhone 8”、“iPhone 8 Plus”等(它们可能会失败,也可能不会。)

    执行此步骤,希望您在执行此步骤后解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 2019-04-02
      • 2020-04-13
      • 2018-03-16
      • 2019-02-19
      • 2019-03-07
      • 2014-05-21
      • 2018-04-27
      相关资源
      最近更新 更多