Xcode SwiftGen: 在具有多个目标的项目中构建失败

3
当使用Cocoapods和多个目标时,我应该如何配置SwiftGen?
我有一个项目有两个目标(MyProject和MyProject Dev),并且已经将SwiftGen与Cocoapods集成。
我可以轻松构建第一个目标。但是'Dev'目标总是失败。脚本阶段是Build Phases中的最后一步,但是早或晚运行它似乎没有任何区别。
在失败时,我观察到以下内容:
- 生成的.swift文件有一个导入语句'import MyProject',这里不应该有 - 'No type named [ClassName] in module [MyProject]' OR 'No such module [MyProject]'
我正在使用的SwiftGen版本是5.2.1,Xcode 9.2,目标iOS 10.0。
从版本5开始,SwiftGen需要一个配置文件,因此我已经设置了一个如下所示的配置文件:
output_paths: Sources/Generated
storyboards:
  - paths: MyProject/Storyboards/Base.lproj
    templateName: swift4
    output: MyProject/Storyboards/Storyboards.swift
    params:
      ignoreTargetModule: true

到目前为止,我已经查阅了文档和以下问题:https://github.com/SwiftGen/SwiftGen/issues/273。但是我的情况与此不同,我正在使用不同类型的 SG 安装,而我的项目构建失败(而不仅仅是未生成任何资源)。清理项目、构建文件夹和删除派生数据都没有效果。我认为可能是我在配置设置中漏掉了某些内容,但我无法看出具体是哪些。这是我在这里提出的第一个问题,如果我有所遗漏,还请谅解,我会乐意进行编辑。
2个回答

4

我有过生成Storyboard文件的相同问题。尝试修改您的配置文件:

params: ignoreTargetModule: true module: <YOUR_PROJECT_NAME>

希望这可以帮到你。


太好了,这完全解决了问题。缺失的部分是将“module:<YOUR_PROJECT_NAME>”添加到参数列表中,然后它就像魔法般地工作了。非常感谢您提供答案。 - Alexei
1
感谢@GhostCat的反馈!也许是的,我应该再读一遍介绍 :) 只是不清楚接下来该怎么做,是改变我的决定(如果可能的话)还是下次更加小心呢? :) - Ned
我很感激您的快速和友好回复。在这种情况下,heho实际上改进了问题,所以没有太多要做的。所以:将来要更加小心。请记住:当OP必须编辑问题使其可回答时,投票应为“关闭为MCVE”或类似选项。投票编辑意味着:您、我或任何人都可以编辑和修复问题;-) - GhostCat

0

虽然有些犹豫称之为解决方案,但以下方法至少允许项目构建和运行。

  • 从“Dev”目标中删除SwiftGen脚本阶段
  • 使用包含SwiftGen的主方案构建项目以生成所有必要的对象和结构
  • 切换到Dev方案并运行项目。

由SwiftGen创建的Strings.swift文件链接到两个目标,因此即使在一个方案中运行脚本,该文件中的资源也将对常规和Dev目标都可用。

希望这能帮助到某些人。


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