Xcode 10新构建系统清理问题

16

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

当我切换回“传统”的构建系统时,一切正常。

有没有类似的经验?

谢谢

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


2
我有完全相同的问题。在新版本中,除非我清理所有内容,否则开发 Pods 中的更改不会被捕获。FWIW,这里有相关讨论(目前还没有解决方案):https://groups.google.com/forum/#!topic/cocoapods/UyxOT5_GFfI - de.
1
我有同样的问题,这不仅限于更改Pods,当我在代码中注释/取消注释一行时,除非您执行Command+Shift+K,否则更改不会反映在新构建中。当我在“工作区设置”中切换到“传统构建系统”时,根本没有这个问题。我的环境是Xcode版本10.0(10A255),macOS Mojave版本10.14(18A391)。 - infinity_coding7
相同的问题,只是未被捕获的更改位于非 pod 子项目中。实际上:编译错误的更改被很好地捕获了:有编译失败。但是非破坏性的更改被忽略了。哈哈! - orion elenzil
1
这个漏洞存在已经很长时间了,但仍然没有解决:/ - fluidsonic
1
仍然在Xcode 10.1中遇到此问题。 - orion elenzil
2个回答

1
在Xcode 10中,新的构建系统已成为默认选项。更新到Xcode 10后,您的项目可能会遇到问题。苹果公司已经意识到这些问题,并在Xcode 10发布说明中提到了这一点。

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

  • 在使用自定义构建位置并且存在早于 Xcode 10 生成的构建产品的项目上执行 xcodebuild clean ,Xcode 可能会报告一个错误,指出它不会删除不是由新构建系统创建的目录。(40427159)

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


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

已知问题:

  • 增量构建可能无法正确对非源代码相关的更改进行代码签名,例如资源文件修改,这可能导致应用程序无法启动。(41254808)

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

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

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

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

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

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

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

  • 新的“带时间摘要构建”命令不会显示构建期间构建系统中运行的某些任务的时间。(39801746)

  • 尚不支持自定义构建系统插件,包括Intel ICC编译器。(32795438、33286594)

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

  • 将“复制标题”构建阶段排序在“编译源”构建阶段之后的目标可能无法构建,并发出有关构建循环的诊断。(39880168)

    解决方法:在编译源构建阶段之前排列任何“复制标题”构建阶段。

  • 在对使用位于派生数据目录之外的自定义构建位置的项目执行xcodebuild clean并且具有在Xcode 10之前生成的旧构建产品的情况下,Xcode可能会报告错误,指示它不会删除未由新构建系统创建的目录。(40427159)

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


0

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

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

Xcode:产品 -> 清理

尝试通过不同的模拟器类型进行编译,例如“iPhone 8”,“iPhone 8 Plus”等。(它们可能会失败或可能不会。)

按照这个步骤,希望您能解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接