为什么Apollo无法在Xcode中构建-只能有一个名为...的片段?

时间:2018-11-13 23:23:01

标签: xcode apollo

使用:

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

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

select id,name, code, attribute, amount
from attb
where (code = 123 and attribute='Alpha') OR code = 122

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

,该项目将拒绝构建。

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

1 个答案:

答案 0 :(得分:0)

问题在于bash "There can only be one operation named..." 命令正在本地find目录中查找重复文件!这是由于以下情况引起的:

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

为此更改Apollo的构建阶段脚本:

Relative

对此:

$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(或Apollo不在任何目录中)。您可以在此处找到设置: Xcode>首选项>位置>派生数据
  • 如果您希望将“派生数据”保持在原位,请在传递给apollo-cli的查询中更改bash find命令,以通过附加Default来排除DerivedData/文件夹。您可以通过转到项目根目录>(目标项目)>构建阶段>生成Apollo GraphQL API (在安装步骤中应已添加,请参见here)找到脚本。使它看起来像这样: -not -path "*DerivedData/*"

您可能需要最后一次从项目文件夹中删除$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-cli.sh codegen:generate --queries="$(find . -name '*.graphql' -not -path "*DerivedData/*")" --schema=schema.json API.swift文件夹,并且进行最后一次清理(DerivedData/)也没有什么坏处。