更新到Xcode 10后,初始项目配置存在一些问题。步骤如下所示:
配置如下:
这在Xcode 9中工作正常,但是显然,它在Xcode 10构建系统下不起作用。问题是如果我下载存储库(.generated
文件不是存储库的一部分)。然后点击build
,它将显示以下结果:
... 在“ .sourcery.yml”中使用配置文件 扫描来源... 找到239种类型。 正在加载模板... 加载了9个模板。 产生程式码... 完了 处理时间0.491948962211609秒 ...
因此,源程序可以正常运行,然后掉毛:
对'FromResponse.generation.swift'进行标记(1/186)
工作正常,但过程最终会失败:
错误:找不到构建输入文件: '/path/Generated/FromResponse.generation.swift', ...
因此很奇怪,因为文件实际上位于该文件中,并且根据构建设置,应在生成文件之后对其进行编译。那么我应该如何在构建过程中使用Sourcery?
答案 0 :(得分:3)
我们可以通过与Github问题类似的方式“修复”此问题:
https://github.com/mac-cain13/R.swift/issues/438#issuecomment-416982928
我们必须通过 Sourcery 将每个生成的文件添加到输出文件夹中,然后Xcode会正确拾取它们。
答案 1 :(得分:0)
这与Xcode 10中默认启用的新Xcode构建系统中的更改有关。如果构建阶段创建了需要作为后续构建阶段输入的文件,则需要在输出中显式指定它们文件或输出文件列表。
在您的示例中,Sourcery构建阶段正在生成Swift源文件,这些文件是Compile Sources阶段的输入。
但是,此时的问题是,在为Sourcery指定输出文件之后,构建阶段不会每次都重新运行,因为它会看到输出文件已经存在。到目前为止,除了手动运行诸如Sourcery和SwiftGen之类的工具或将生成的文件保存在Git中以使其始终存在之外,我还没有为该部分找到一个可用的解决方案。
答案 2 :(得分:0)
在构建阶段调用mogenerator
来构建数据模型类时,我遇到了类似的问题。 @Yuchen给出的方法应该有效。
@Andrew:为强制始终(重新)运行此构建阶段,我添加了这一行
touch .alwaysRun
作为shell命令的最后一行运行,并将构建阶段“输入文件”标记为具有$(SRCROOT)/.alwaysRun
。这似乎可以解决问题。