【问题标题】:Why does Apollo fail to build in Xcode - There can only be one fragment named ...?为什么 Apollo 无法在 Xcode 中构建 - 只能有一个名为 ...的片段?
【发布时间】:2019-04-16 20:57:53
【问题描述】:

使用:

  • Xcode 10.1
  • 阿波罗 1.9.2
  • CocoaPods 1.5.3
  • 来自 Apollo 的最新构建阶段脚本

在 Xcode 的构建阶段,当它执行 Apollo GraphQL API 脚本时,我收到重复片段和操作的错误,a-la:

"There can only be one fragment named..."

"There can only be one operation named..."

项目将拒绝构建。

清理构建文件夹将允许您在错误再次出现之前再次构建或运行项目。

【问题讨论】:

    标签: xcode apollo


    【解决方案1】:

    问题是 bash find 命令在本地 DerivedData/ 目录中查找重复文件!这是在以下情况下引起的:​​

    • 您在 Xcode 中将 DerivedData/ 目录设置为 Relative
    • 您使用的是 Apollo 提供的默认构建阶段脚本

    从这里更改 Apollo 的构建阶段脚本:

    $APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql')" --schema=schema.json API.swift

    到这里:

    $APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql' -not -path "*DerivedData/*")" --schema=schema.json API.swift


    细节:

    • 如果您不关心派生数据的去向,请将位置设置从 Relative 更改为 Default(或 Apollo 未查看的任何目录)。您可以在此处找到设置:Xcode > Preferences > Locations > Derived Data
    • 如果您希望将派生数据保留在原处,请更改传递给 apollo-cli 的查询中的 bash find 命令,以通过附加 -not -path "*DerivedData/*" 排除 DerivedData/ 文件夹。您可以通过转到 Project Root > (Target Project) > Build Phases > Generate Apollo GraphQL API 找到该脚本(您应该在安装步骤中添加,请参阅 here)。让它看起来像这样: $APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql' -not -path "*DerivedData/*")" --schema=schema.json API.swift

    您可能需要最后一次从项目文件夹中删除 DerivedData/ 文件夹,并且最后一次清理 (Command + Shift + K) 并没有什么坏处。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2016-04-13
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多