2

更新到 Xcode 10 后,初始项目配置存在一些问题。步骤如下所示:

  1. 使用Sourcery生成一些文件
  2. 使用SwiftLint进行检查
  3. 建造

配置工作如下:

在此处输入图像描述

这在 Xcode 9 中运行良好,但显然,它在 Xcode 10 构建系统下不起作用。问题是如果我下载存储库(.generated文件不是存储库的一部分)。点击build它会显示如下结果:

... 使用 '.sourcery.yml' 中的配置文件扫描源... 找到 239 种类型。正在加载模板... 已加载 9 个模板。生成代码...完成。处理时间 0.491948962211609 秒...

所以 sourcery 工作正常,然后 linting:

Linting 'FromResponse.generated.swift' (1/186)

工作正常以及过程,但最终,构建将失败:

错误:找不到构建输入文件:'/path/Generated/FromResponse.generated.swift', ...

所以这很奇怪,因为文件物理存在并且根据构建设置文件应该在生成它们之后编译。那么我应该如何在构建过程中处理 sourcery 呢?

4

3 回答 3

5

我们能够以与此 Github 问题类似的方式“修复”此问题:

https://github.com/mac-cain13/R.swift/issues/438#issuecomment-416982928

我们必须将Sourcery生成的每个文件添加到输出文件夹中,Xcode 才能正确获取它。

在此处输入图像描述

于 2018-09-29T21:41:37.703 回答
0

这与 Xcode 10 中默认启用的新 Xcode 构建系统中的更改有关。如果构建阶段创建的文件需要作为后续构建阶段的输入,那么它需要在输出文件或输出中明确指定它们文件列表。

在您的示例中,Sourcery 构建阶段正在生成 Swift 源文件,这些文件需要作为 Compile Sources 阶段的输入。

但是,此时的问题是,在为 Sourcery 指定输出文件后,构建阶段不会每次都重新运行,因为它看到输出文件已经存在。到目前为止,除了手动运行 Sourcery 和 SwiftGen 等工具或将生成的文件保存在 Git 中以便它们始终存在之外,我还没有为这部分制定出可用的解决方案。

于 2018-09-21T11:36:50.640 回答
0

mogenerator我在调用 buildphase来构建我的数据模型类时遇到了类似的问题。@Yuchen 给出的方法应该有效。

@Andrew:为了强制(重新)运行这个构建阶段,我添加了这一行

touch .alwaysRun

作为要运行的 shell 命令的最后一行,并将构建阶段“输入文件”标记为具有$(SRCROOT)/.alwaysRun. 这似乎可以解决问题。

于 2018-11-13T09:19:09.117 回答