如何在Swift项目中集成GraphQL Apollo iOS客户端
介绍
在本节中,您将学习如何在您的 Swift 项目中安装 Apollo iOS 客户端,并使用它从 Back4app 查询数据。
先决条件
要完成此快速入门,您需要:
- Xcode。
- 在 Back4App 创建的应用程序。
- 一个存储了一些数据的类(以便您可以检索它)。
1 - 将 Apollo 客户端引入您的 XCode 项目
集成 Apollo iOS 客户端的最简单方法是使用 CocoaPods。为了集成它,请按照以下步骤操作:
- 创建您的 XCode 项目,并在 .xcodeproj 文件的同一文件夹中创建一个名为 Podfile 的新文件

- 编辑 Podfile 文件并添加以下代码,将字符串 YourProjectNameHere 更改为您项目的名称:
# 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- 保存文件并打开终端。转到该文件夹并输入:
pod install

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

2 - 获取您的模式
您需要一个名为 schema.json 的文件,其中包含您的 GraphQL 端点的模式。您可以通过两种方式获取完整的模式:
- 使用 Back4app GraphQL 控制台
- 使用 Apollo
我们将讨论这两种选择。选择你最喜欢的那个。
2.1 - 使用 Back4app GraphQL 控制台检索你的模式
前往你想要检索模式的应用程序的 GraphQL 控制台,然后在右侧的模式选项卡下,点击下载按钮。

2.2 - 使用 Apollo 检索你的模式
如果你更喜欢使用 Apollo,首先你需要通过输入以下命令安装桌面版本:
npm install -g apollo
然后,运行以下命令,将头部的值替换为你的 AppId 和 Masterkey:
apollo client --endpoint=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 文件所在的文件夹相同。

4 - 创建您的 GraphQL 文件
您现在可以使用您的文件和变更创建 GraphQL 文件。 这些文件必须具有 .graphql 扩展名,并至少包含一个查询或变更,以便 Apollo 从中创建 Swift 代码。
一个有用的约定是将查询、变更或片段与使用它们的 Swift 代码放在一起,通过在 <name>.swift 旁边创建 <name>.graphql。
如果您的文件树中没有现有的 .graphql 文件,请创建一个非常简单的查询并将其添加到文件树中的 .graphql 文件中,以便在您运行代码生成构建步骤时,它实际上能找到一些东西。如果没有,您将收到错误信息:未找到生成代码的操作或片段。
这是一个简单的查询示例,返回 Parse 用户:
1 query findAllUsers{
2 objects{
3 find_User{
4 count
5 results{
6 username
7 }
8 }
9 }
10 }将该文件添加到您的目标目录中,与您的 schema.json 文件处于同一层级:

5 - 添加代码生成构建步骤
您可以在 Xcode 构建过程中调用 apollo,这将自动检索和更新 schema.json 文件,以便您的类始终反映您通过调用 check-and-run-apollo-cli.sh 包装脚本所做的任何更改。
该包装器检查您系统上安装的 Apollo 版本是否与您项目中的框架版本兼容。 如果您不检查这一点,您可能会生成与框架中的运行时代码不兼容的代码。
步骤如下:
- 在您的应用程序目标的构建阶段设置选项卡中,单击 + 图标并选择新建运行脚本阶段。
- 在创建的运行脚本中,将其名称更改为生成 Apollo GraphQL API。
- 将此新运行脚本拖到构建阶段的编译源代码上方,以便在编译代码之前执行。
- 将以下内容添加到运行脚本中:
SCRIPT_PATH="${PODS_ROOT}/Apollo/scripts" cd "${SRCROOT}/${TARGET_NAME}" "${SCRIPT_PATH}"/check-and-run-apollo-cli.sh codegen --target=swift --includes=./**/*.graphql --localSchemaFile="schema.json" API.swift
如果您正在使用 XCode 11 Beta,请改用此脚本:
# 转到构建根目录,然后返回到 SPM 保持的 apollo iOS 框架的检出位置。 cd "${BUILD_ROOT}" cd "../../SourcePackages/checkouts/apollo-ios/scripts"
APOLLO_SCRIPT_PATH="$(pwd)"
if [ -z "${APOLLO_SCRIPT_PATH}" ]; then echo "错误:在您的检出 SPM 包中找不到 CLI 脚本;请确保将框架添加到您的项目中。" exit 1 fi
cd "${SRCROOT}/${TARGET_NAME}" "${APOLLO_SCRIPT_PATH}"/check-and-run-apollo-cli.sh codegen --target=swift --includes=./**/*.graphql --localSchemaFile="schema.json" API.swift
6 - 构建并将您的 API 文件添加到目标
构建您的项目,名为 API.swift 的文件应在您的目标目录中创建:

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

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

7 - 配置客户端
现在在你的 ViewController.swift 中,创建你的 Apollo 配置并更改你的 AppId 和 ClientKey 值:
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 查询:
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)应该被检索到:

可选步骤 - 获取语法高亮
如果您愿意,可以在 XCode 中获得 GraphQL 语法高亮。要实现这一点:
- 如果 Xcode 当前正在运行,请关闭它。
- 您可能需要在 ~/Library/Developer/Xcode 中创建这些文件夹:
mkdir ~/Library/Developer/Xcode/Plug-ins ~/Library/Developer/Xcode/Specifications
4. 将 GraphQL.ideplugin 复制到 ~/Library/Developer/Xcode/Plug-ins。
cp -R GraphQL.ideplugin ~/Library/Developer/Xcode/Plug-ins
5. 将 GraphQL.xclangspec 复制到 ~/Library/Developer/Xcode/Specifications。
cp -R GraphQL.xclangspec ~/Library/Developer/Xcode/Specifications
安装这些附加组件后,您第一次启动 Xcode 时可能会收到警告。一旦您同意加载插件,您将不再看到此警告。