AWS AppSync SDK for iOS
AWS AppSync SDK for iOS 允许您访问您的 AWS AppSync 后端,并执行如 查询
、变更
和 订阅
等操作。SDK 还包括对离线操作的支持。此 SDK 基于 Apollo 项目,见 此处。请在该仓库中记录客户端 SDK 的相关问题,并请到 官方 AWS AppSync 论坛 中提出关于 AppSync 服务的问题。
设置
注意:AWS AppSync 使用 Swift 5.1。请使用 Xcode 11.0 或更高版本进行构建。
安装 SDK
通过 Swift 包管理器
-
Swift 包管理器随 Xcode 分发。要将 AWS SDK 添加到您的 iOS 项目,请在 Xcode 中打开项目,然后选择 文件 > Swift 包 > 添加包依赖。
-
将 AWS AppSync SDK for iOS GitHub 仓库的 URL (
https://github.com/awslabs/aws-mobile-appsync-sdk-ios
) 输入搜索栏,然后点击 下一步。 -
您将看到针对您想要 Swift Package Manager 安装的 SDK 版本的存储库规则。选择第一个规则 版本,并选择 最高到达下一个主要版本,因为它将使用可从
main
分支检测到的最新兼容版本,然后点击 下一步。 -
选择
软件包产品,然后点击 完成。 -
在您的源文件中,使用
import AWSAppSync
导入 SDK。
通过 CocoaPods
-
将以下行添加到您的 Podfile 中
pod 'AWSAppSync', '~> 3.6.2'
示例
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'EventsApp' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for EventsApp pod 'AWSAppSync', '~> 3.6.2' end
-
运行
pod install
以安装 AppSync SDK,然后在 Xcode 中打开.xcworkspace
文件(而不是.xcodeproj
文件)。 -
现在 构建 您的项目以开始使用 SDK。每当 SDK 发布新版本时,您可以通过运行
pod update
并重新构建项目来更新,以便使用新功能。 -
在您的源文件中,使用
import AWSAppSync
导入 SDK。
通过 Carthage
XCFrameworks(推荐)
Carthage 支持在 Xcode 12 或以上版本中使用 XCFrameworks。按照以下步骤使用 XCFrameworks 吸收 AWS SDK for iOS:
-
安装 Carthage 0.37.0 或更高版本。
-
将以下内容添加到您的
Cartfile
中github "awslabs/aws-mobile-appsync-sdk-ios"
-
然后运行以下命令
$ carthage update --use-xcframeworks
-
在您的应用程序目标的“常规”设置标签页中,在“嵌入的二进制文件”部分,将每个 xcframework 从磁盘上的 Carthage/Build 文件夹拖放到应用程序目标中。
注意:如果您正在使用 XCFrameworks(即,Carthage 或动态框架),则模块
AWSMobileClient
的名称为AWSMobileClientXCF
,以解决 Swift 问题。要使用AWSMobileClient
,请按以下方式导入
import AWSMobileClientXCF
并在您的应用程序代码中使用它,而无需使用 XCF
后缀。
AWSMobileClient.default.initialize()
带有“胖库”的框架(不推荐)
要为二进制中的多个架构构建特定平台的框架包(Xcode 11 及以下版本)
-
将以下内容添加到您的 Cartfile 中
github "awslabs/aws-mobile-appsync-sdk-ios"
-
完成后,运行
carthage update
并用 Xcode 打开*.xcworkspace
文件,选择您的Target
。在General
选项卡中找到Embedded Binaries
,然后选择+
按钮。 -
选择
添加其他
按钮,导航到Carthage > Build > iOS
下的AWS<#ServiceName#>.framework
文件,选择AWSAppSync.framework
和其相关依赖。- AWSAppSync.framework
- AWSCore.framework
- Reachability.framework
- SQLite.framework
- AppSyncRealTimeClient.framework
- Starscream.framework
不需要时请不要选择
Destination: Copy items
的复选框。 -
在您的
Target
的Build Phases
选项卡中,选择左上角的+
按钮,然后选择New Run Script Phase
。按照以下设置构建阶段。确保此阶段在 Embed Frameworks 阶段之下。bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh"
选项
- Shell: /bin/sh
- 在构建日志中显示环境变量:勾选
- 仅在安装时运行脚本:不勾选
- 输入文件:空
- 输出文件:空
-
现在 构建 您的项目以开始使用 SDK。每次 SDK 发布新版本时,您都可以通过运行
carthage update
并重新构建项目以使用新功能。注意:目前,iOS 的 AWSAppSync SDK 使用 Xcode 12.0 构建了 Carthage 二进制文件。要使用预构建的二进制文件,您的 Xcode 版本需要与之相同。否则,您将需要通过向
carthage update
命令传递--no-use-binaries
标志,在你的计算机上构建框架。 -
在您的源文件中,使用
import AWSAppSync
导入 SDK。
Codegen
要使用 AppSync SDK,您需要使用来自 AWS Amplify CLI 的 amplify codegen
。此命令将根据您的 schema 生成 Swift 语言文件。您可以直接与这些类交互,而不是操作 GraphQL 查询文档。您可以在 此处 找到使用 codegen 的说明。
Sample
您可以在以下位置找到使用 AppSync SDK 的示例应用:https://github.com/aws-samples/aws-mobile-appsync-events-starter-ios
Documentation
您可以在以下位置找到设置 codegen 后端并通过 iOS 客户端访问它的逐步说明:https://docs.amplify.aws/sdk/api/graphql/q/platform/ios
贡献
贡献指南已记录于此。
测试贡献
如果你正在为SDK作出贡献,建议添加一些单元测试和/或集成测试,并针对现有测试进行评估。
运行测试
AWSAppSync
标签配置了在Test
配置中运行单元测试和集成测试。按照以下说明完成集成测试的设置后,您可以通过调用Xcode中的“产品 > 测试”(⌘-U)来运行这两个套件。
要仅运行一个测试套件(单元或集成),从方案选择器中选择适当的标签,然后调用“产品 > 测试”(⌘-U)。虽然单元测试的运行速度比集成测试快得多,但我们建议在任何PR提交之前都运行这两个。
设置单元测试
单元测试无需任何特定设置,可以直接从Xcode IDE运行。
- 注意:目前,任何需要网络活动的测试都放在集成测试中,即使测试击中本地主机而不是有效服务。
设置集成测试
要运行集成测试,您需要以下内容
- 两个具有
Posts
模式的AppSync API实例。- 第一个 AppSync 实例应该配置为使用支持未认证身份的 Cognito 身份池。
- Cognito 身份池的无身份用户角色应该具有
AppSync Invoke Full Access
权限。
- Cognito 身份池的无身份用户角色应该具有
- 第二个实例应配置为使用 API 密钥认证。
- 第一个 AppSync 实例应该配置为使用支持未认证身份的 Cognito 身份池。
按照以下步骤可以获取后端设置
- 使用 API 密钥认证创建带有 AppSync API 的堆栈
- 转到 AWS CloudFormation 控制台。
- 点击 创建堆栈,然后选择 上传模板文件。点击 选择文件,导航到此项目中 Cloud Formation 模板所在的路径:
AWSAppSyncIntegrationTests/ConsoleResources/appsync-integrationtests-cloudformation.yaml
- 点击 下一步
- 输入“堆栈名称”和“资源名称前缀”
- 我们建议使用“资源名称前缀”,以便容易识别人名堆栈是用于 AppSync 测试的,例如:
AppSyncTest<YYYYMMDDHHMM>
。 - 由于您将创建两个堆栈进行这些测试,一个使用 API 密钥认证,另一个使用 IAM(Cognito 身份)认证,因此我们建议选择一个易于区分两个堆栈的堆栈名称,例如:
AppSyncTest<YYYYMMDDHHMM>-APIKey
和AppSyncTest<YYYYMMDDHHMM>-IAM
。
- 我们建议使用“资源名称前缀”,以便容易识别人名堆栈是用于 AppSync 测试的,例如:
- 选择
ApiKey
认证类型 - 当堆栈创建完成后,点击 输出 选项卡。
- 将适当的值复制到测试配置文件
AppSyncIntegrationTests/appsync_test_credentials.json
AppSyncApiKey
AppSyncEndpointAPIKey
AppSyncEndpointAPIKeyRegion
- 按照上述 1-6 步骤创建另一个 CloudFormation 堆栈,但在第 5 步中选择“IAM”认证类型。
- 将适当的值复制到测试配置文件
AppSyncIntegrationTests/appsync_test_credentials.json
AppSyncEndpoint
AppSyncRegion
CognitoIdentityPoolId
CognitoIdentityPoolRegion
BucketName
BucketRegion
AppSyncMultiAuthAPIKey
- 将适当的值复制到测试配置文件
- 按照上述 1-6 步骤创建另一个 CloudFormation 堆栈,以
API Key
作为认证类型(我们将在稍后更改它)-
使用此项目中提供的模板
AWSAppSyncIntegrationTests/ConsoleResources/appsync-lambda-authorize r.js
创建一个 Lambda 函数 -
堆栈完成后,点击 输出 选项卡
-
将适当的值复制到测试配置文件
AppSyncIntegrationTests/appsync_test_credentials.json
AppSyncEndpointAPIKeyLambda
AppSyncEndpointAPIKeyLambdaRegion
-
转到 AWS AppSync 控制台,选择新创建的 AppSync 实例
-
在
设置
部分,将默认认证类型更改为并选择在上一步骤创建的 Lambda 函数
-
注意:您必须在
AppSyncIntegrationTests/appsync_test_credentials.json
中提供所有值或在代码中提供。没有机制来处理一个源将部分值覆盖另一个源。在运行集成测试之前必须指定所有值。
选项 1:使用测试配置文件
在 AWSAppSyncIntegrationTests
文件夹中添加文件 appsync_test_credentials.json
(见以下示例),并替换 AppSyncEndpoint
、CognitoIdentityPoolId
、AppSyncEndpointAPIKey
、AppSyncAPIKey
和所需的区域值
{
"AppSyncEndpoint": "https://iambasedendpoint.appsync-api.us-east-1.amazonaws.com/graphql",
"AppSyncRegion": "us-east-1",
"CognitoIdentityPoolId": "us-east-1:abcd1234-1234-12324-b4b7-aaa0c0831234",
"CognitoIdentityPoolRegion": "us-east-1",
"AppSyncEndpointAPIKey": "https://apikeybasedendpoint.appsync-api.us-east-1.amazonaws.com/graphql",
"AppSyncEndpointAPIKeyRegion": "us-east-1",
"AppSyncAPIKey": "da2-sad3lkh23422",
"BucketName": "bucketName",
"BucketRegion": "us-east-1",
"AppSyncMultiAuthAPIKey": "da2-sd34s5ffxz"
}
注意:
AppSyncEndpointAPIKey
端点使用基于 API 密钥的认证,而AppSyncEndpoint
使用基于AWS_IAM
的认证。
选项 2:在源代码中编辑默认值
使用适当的值编辑文件 AWSAppSyncTestCommon/AppSyncClientTestConfigurationDefaults
。
现在您可以通过在 Xcode 中执行“产品 > 测试”操作(⌘-U)来运行集成测试。
许可证
该库license遵循亚马逊软件许可协议。