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

时间:2018-03-16 01:39:30

标签: ios swift xcode cocoapods

使用Cocoapods和多个目标时,如何配置SwiftGen?

我有一个包含两个目标的项目(MyProject和MyProject Dev),它与SwocoGen集成了Cocoapods。

我可以毫无问题地建立第一个目标。然而,' Dev'目标总是失败。脚本阶段是Build Phases的最后一步,但是之前或之后运行它似乎没有任何区别。

失败后,我发现了以下情况:

  • 生成的.swift文件有一个import语句,' import MyProject'哪个不应该
  • '模块[MyProject]中没有名为[ClassName]的类型'或者'没有这样的模块[MyProject]'

SwiftGen版本I使用的是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 个答案:

答案 0 :(得分:1)

我在生成Storyboard文件时遇到了同样的问题。尝试修改配置文件: params: ignoreTargetModule: true module: <YOUR_PROJECT_NAME>

希望它会有所帮助。

答案 1 :(得分:0)

犹豫不决称这是一个解决方案,它更像是一种解决方法,但以下方法至少允许构建和运行项目。

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

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

希望这有助于某人。