---
title: 如何在Swift项目中集成GraphQL Apollo iOS客户端
slug: docs-ch/ios/graphql/swift-graphql
description: 学习在Swift项目中使用Apollo iOS客户端，实现GraphQL数据查询。
image: https://www.back4app.com/images/logo-social.png
createdAt: 2024-03-12T14:02:29.968Z
---

## 介绍

在本节中，您将学习如何在您的 Swift 项目中安装 Apollo iOS 客户端，并使用它从 Back4app 查询数据。

## 先决条件

:::hint{type="info"}
**要完成此快速入门，您需要：**

- Xcode。
- 在 Back4App 创建的应用程序。
  - 请遵循 [新 Parse 应用教程](https://www.back4app.com/docs/get-started/new-parse-app) 以了解如何在 Back4App 创建 Parse 应用。
:::

- 一个存储了一些数据的类（以便您可以检索它）。

## 1 - 将 Apollo 客户端引入您的 XCode 项目

集成 Apollo iOS 客户端的最简单方法是使用 [CocoaPods](https://cocoapods.org/)。为了集成它，请按照以下步骤操作：

1. 创建您的 XCode 项目，并在 .xcodeproj 文件的同一文件夹中创建一个名为 Podfile 的新文件

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/PEUfa1YovxMtVmHjTMbSx_image.png)

1. 编辑 Podfile 文件并添加以下代码，将字符串 YourProjectNameHere 更改为您项目的名称：

```ruby
# Uncomment the next line to define a global platform for your project
 platform :ios, '12.0'

 target 'YourProjectNameHere' do
 # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
 use_frameworks!

 # Pods for ConferencePlanner
 pod 'Apollo'

 end
```

1. 保存文件并打开终端。转到该文件夹并输入：

:::BlockQuote
pod install
:::

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/ZZl780kGZg-WYcpBiKM-5_image.png)

1. 安装完成后，您应该会有一个格式为 .xcworkspace 的新文件。使用 Xcode 打开该文件。

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/QfRd01OyKsYTkJg_1Ukjj_image.png)

## 2 - 获取您的模式

您需要一个名为 schema.json 的文件，其中包含您的 GraphQL 端点的模式。您可以通过两种方式获取完整的模式：

1. 使用 Back4app GraphQL 控制台
2. 使用 Apollo

我们将讨论这两种选择。选择你最喜欢的那个。

### 2.1 - 使用 Back4app GraphQL 控制台检索你的模式

前往你想要检索模式的应用程序的 GraphQL 控制台，然后在右侧的模式选项卡下，点击下载按钮。

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/9xb-cnkV0mslqAG6-jcq5_image.png)

### 2.2 - 使用 Apollo 检索你的模式

如果你更喜欢使用 Apollo，首先你需要通过输入以下命令安装桌面版本：

:::BlockQuote
npm install -g apollo
:::

然后，运行以下命令，将头部的值替换为你的 AppId 和 Masterkey：

:::BlockQuote
apollo client --endpoint=[https://parseapi.back4app.com/graphql](https://parseapi.back4app.com/graphql) --header="X-Parse-Application-Id: YourAppIdHere" --header="X-Parse-Master-Key: YourMasterKeyHere"
:::

这将生成一个 aschema.json 文件作为输出

## 3 - 将您的 Schema.json 文件添加到项目中

将您下载或检索的 schema.json 文件添加到项目的根目录中。这与您的 AppDelegate.swift 文件所在的文件夹相同。

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/v9dpqhKpw7IaDvEF7ssNE_image.png)

## 4 - 创建您的 GraphQL 文件

您现在可以使用您的文件和变更创建 GraphQL 文件。
这些文件必须具有 .graphql 扩展名，并至少包含一个查询或变更，以便 Apollo 从中创建 Swift 代码。

一个有用的约定是将查询、变更或片段与使用它们的 Swift 代码放在一起，通过在 \<name>.swift 旁边创建 \<name>.graphql。

如果您的文件树中没有现有的 .graphql 文件，请创建一个非常简单的查询并将其添加到文件树中的 .graphql 文件中，以便在您运行代码生成构建步骤时，它实际上能找到一些东西。如果没有，您将收到错误信息：未找到生成代码的操作或片段。

这是一个简单的查询示例，返回 Parse 用户：

```graphql
1   query findAllUsers{
2     objects{
3       find_User{
4         count
5         results{
6           username
7         }
8       }
9     }
10  }
```

将该文件添加到您的目标目录中，与您的 schema.json 文件处于同一层级：

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/uWcuy8aTL1cGATaqNejYM_image.png)

## 5 - 添加代码生成构建步骤

您可以在 Xcode 构建过程中调用 apollo，这将自动检索和更新 schema.json 文件，以便您的类始终反映您通过调用 check-and-run-apollo-cli.sh 包装脚本所做的任何更改。

该包装器检查您系统上安装的 Apollo 版本是否与您项目中的框架版本兼容。
如果您不检查这一点，您可能会生成与框架中的运行时代码不兼容的代码。

步骤如下：

1. 在您的应用程序目标的构建阶段设置选项卡中，单击 + 图标并选择新建运行脚本阶段。
2. 在创建的运行脚本中，将其名称更改为生成 Apollo GraphQL API。
3. 将此新运行脚本拖到构建阶段的编译源代码上方，以便在编译代码之前执行。
4. 将以下内容添加到运行脚本中：

:::BlockQuote
SCRIPT\_PATH="$&#x7B;PODS\_ROOT}/Apollo/scripts"
cd "$&#x7B;SRCROOT}/$&#x7B;TARGET\_NAME}"
"$&#x7B;SCRIPT\_PATH}"/check-and-run-apollo-cli.sh codegen --target=swift --includes=./\*\*/\*.graphql --localSchemaFile="schema.json" API.swift
:::

如果您正在使用 XCode 11 Beta，请改用此脚本：

:::BlockQuote
\# 转到构建根目录，然后返回到 SPM 保持的 apollo iOS 框架的检出位置。
cd "$&#x7B;BUILD\_ROOT}"
cd "../../SourcePackages/checkouts/apollo-ios/scripts"

APOLLO\_SCRIPT\_PATH="$(pwd)"

if \[ -z "$&#x7B;APOLLO\_SCRIPT\_PATH}" ]; then
echo "错误：在您的检出 SPM 包中找不到 CLI 脚本；请确保将框架添加到您的项目中。"
exit 1
fi

cd "$&#x7B;SRCROOT}/$&#x7B;TARGET\_NAME}"
"$&#x7B;APOLLO\_SCRIPT\_PATH}"/check-and-run-apollo-cli.sh codegen --target=swift --includes=./\*\*/\*.graphql --localSchemaFile="schema.json" API.swift
:::

## 6 - 构建并将您的 API 文件添加到目标

构建您的项目，名为 API.swift 的文件应在您的目标目录中创建：

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/thnYgBrzLVGMa9km99xEM_image.png)

将生成的 API.swift 文件拖到您的目标中，并确保取消选中“如果需要则复制文件”复选框：

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/VyC5uBcLau99P9-M6EPvg_image.png)

确保您检查了 API 文件需要包含的所有目标。

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/xaX63Ky-ADCvHITAbPCC2_image.png" size="60" width="266" height="394" position="center" showCaption="false"}

## 7 - 配置客户端

现在在你的 ViewController.swift 中，创建你的 Apollo 配置并更改你的 AppId 和 ClientKey 值：

```swift
1   let apollo: ApolloClient = {
2       let configuration = URLSessionConfiguration.default
3       configuration.httpAdditionalHeaders = [
4           "X-Parse-Application-Id": "YourAppIdHere",
5           "X-Parse-Client-Key": "YourClientKeyHere"
6       ]
7
8       let url = URL(string: "https://parseapi.back4app.com/graphql")!
9   
10      return ApolloClient(
11          networkTransport: HTTPNetworkTransport(
12              url: url,
13              configuration: configuration
14          )
15      )
16  }()
```

## 8 - 配置客户端

在你的 viewDidLoad 中，从 Apollo 客户端调用你的 GraphQL 查询：

```swift
1   apollo.fetch(query: FindAllUsersQuery()) { result in
2       guard let data = try? result.get().data else { return }
3       print(data.objects?.findUser.results[0].username)
4   }
```

如果你的用户类中有任何用户，第一个（索引 0）应该被检索到：

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/8QfZCn__MDZsnj1VrTftc_image.png)

## 可选步骤 - 获取语法高亮

如果您愿意，可以在 XCode 中获得 GraphQL 语法高亮。要实现这一点：

1. 将 [xcode-apollo 仓库](https://github.com/apollostack/xcode-apollo) 克隆到您的计算机上。
2. 如果 Xcode 当前正在运行，请关闭它。
3. 您可能需要在 \~/Library/Developer/Xcode 中创建这些文件夹：

:::BlockQuote
mkdir \~/Library/Developer/Xcode/Plug-ins \~/Library/Developer/Xcode/Specifications
:::

&#x20;   4\. 将 GraphQL.ideplugin 复制到 \~/Library/Developer/Xcode/Plug-ins。

:::BlockQuote
cp -R GraphQL.ideplugin \~/Library/Developer/Xcode/Plug-ins
:::

&#x20;    5\. 将 GraphQL.xclangspec 复制到 \~/Library/Developer/Xcode/Specifications。

:::BlockQuote
cp -R GraphQL.xclangspec \~/Library/Developer/Xcode/Specifications
:::

安装这些附加组件后，您第一次启动 Xcode 时可能会收到警告。一旦您同意加载插件，您将不再看到此警告。
