Xcode 10,Sourcery和swiftlint构建阶段顺序

时间:2018-09-19 13:53:38

标签: xcode xcode10 swiftlint sourcery

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

  1. 使用Sourcery
  2. 生成一些文件
  3. SwiftLint擦拭
  4. 构建

配置如下:

enter image description here

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

  

...   在“ .sourcery.yml”中使用配置文件   扫描来源...   找到239种类型。   正在加载模板...   加载了9个模板。   产生程式码...   完了   处理时间0.491948962211609秒   ...

因此,源程序可以正常运行,然后掉毛:

  

对'FromResponse.generation.swift'进行标记(1/186)

工作正常,但过程最终会失败:

  

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

因此很奇怪,因为文件实际上位于该文件中,并且根据构建设置,应在生成文件之后对其进行编译。那么我应该如何在构建过程中使用Sourcery?

3 个答案:

答案 0 :(得分:3)

我们可以通过与Github问题类似的方式“修复”此问题:

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

我们必须通过 Sourcery 将每个生成的文件添加到输出文件夹中,然后Xcode会正确拾取它们。

enter image description here

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

touch .alwaysRun

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