AWSAppSync 3.7.1

AWSAppSync 3.7.1

AWS Mobile SDK 工具AWS Amplify Swift Ops 维护。



 
依赖于
AWSCore~> 2.36.0
SQLite.swift~> 0.12.2
AppSyncRealTimeClient~> 3.2.0
 

  • AWS

AWS AppSync SDK for iOS

Release CocoaPods Carthage compatible Build Status Documentation Status Swift Twitter Follow

AWS AppSync SDK for iOS 允许您访问您的 AWS AppSync 后端,并执行如 查询变更订阅 等操作。SDK 还包括对离线操作的支持。此 SDK 基于 Apollo 项目,见 此处。请在该仓库中记录客户端 SDK 的相关问题,并请到 官方 AWS AppSync 论坛 中提出关于 AppSync 服务的问题。

设置

注意:AWS AppSync 使用 Swift 5.1。请使用 Xcode 11.0 或更高版本进行构建。

安装 SDK

通过 Swift 包管理器

  1. Swift 包管理器随 Xcode 分发。要将 AWS SDK 添加到您的 iOS 项目,请在 Xcode 中打开项目,然后选择 文件 > Swift 包 > 添加包依赖

  2. 将 AWS AppSync SDK for iOS GitHub 仓库的 URL (https://github.com/awslabs/aws-mobile-appsync-sdk-ios) 输入搜索栏,然后点击 下一步

  3. 您将看到针对您想要 Swift Package Manager 安装的 SDK 版本的存储库规则。选择第一个规则 版本,并选择 最高到达下一个主要版本,因为它将使用可从 main 分支检测到的最新兼容版本,然后点击 下一步

  4. 选择 软件包产品,然后点击 完成

  5. 在您的源文件中,使用 import AWSAppSync 导入 SDK。

通过 CocoaPods

  1. 将以下行添加到您的 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
  2. 运行 pod install 以安装 AppSync SDK,然后在 Xcode 中打开 .xcworkspace 文件(而不是 .xcodeproj 文件)。

  3. 现在 构建 您的项目以开始使用 SDK。每当 SDK 发布新版本时,您可以通过运行 pod update 并重新构建项目来更新,以便使用新功能。

  4. 在您的源文件中,使用 import AWSAppSync 导入 SDK。

通过 Carthage

XCFrameworks(推荐)

Carthage 支持在 Xcode 12 或以上版本中使用 XCFrameworks。按照以下步骤使用 XCFrameworks 吸收 AWS SDK for iOS:

  1. 安装 Carthage 0.37.0 或更高版本。

  2. 将以下内容添加到您的 Cartfile

    github "awslabs/aws-mobile-appsync-sdk-ios"
    
  3. 然后运行以下命令

     $ carthage update --use-xcframeworks
    
  4. 在您的应用程序目标的“常规”设置标签页中,在“嵌入的二进制文件”部分,将每个 xcframework 从磁盘上的 Carthage/Build 文件夹拖放到应用程序目标中。

注意:如果您正在使用 XCFrameworks(即,Carthage 或动态框架),则模块 AWSMobileClient 的名称为 AWSMobileClientXCF,以解决 Swift 问题。要使用 AWSMobileClient,请按以下方式导入

    import AWSMobileClientXCF

并在您的应用程序代码中使用它,而无需使用 XCF 后缀。

    AWSMobileClient.default.initialize() 
带有“胖库”的框架(不推荐)

要为二进制中的多个架构构建特定平台的框架包(Xcode 11 及以下版本)

  1. 将以下内容添加到您的 Cartfile 中

    github "awslabs/aws-mobile-appsync-sdk-ios"
    
  2. 完成后,运行 carthage update 并用 Xcode 打开 *.xcworkspace 文件,选择您的 Target。在 General 选项卡中找到 Embedded Binaries,然后选择 + 按钮。

  3. 选择 添加其他 按钮,导航到 Carthage > Build > iOS 下的 AWS<#ServiceName#>.framework 文件,选择 AWSAppSync.framework 和其相关依赖。

    • AWSAppSync.framework
    • AWSCore.framework
    • Reachability.framework
    • SQLite.framework
    • AppSyncRealTimeClient.framework
    • Starscream.framework

    不需要时请不要选择 Destination: Copy items 的复选框。

  4. 在您的 TargetBuild Phases 选项卡中,选择左上角的 + 按钮,然后选择 New Run Script Phase。按照以下设置构建阶段。确保此阶段在 Embed Frameworks 阶段之下。

    bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh"

    选项

    • Shell: /bin/sh
    • 在构建日志中显示环境变量:勾选
    • 仅在安装时运行脚本:不勾选
    • 输入文件:空
    • 输出文件:空
  5. 现在 构建 您的项目以开始使用 SDK。每次 SDK 发布新版本时,您都可以通过运行 carthage update 并重新构建项目以使用新功能。

    注意:目前,iOS 的 AWSAppSync SDK 使用 Xcode 12.0 构建了 Carthage 二进制文件。要使用预构建的二进制文件,您的 Xcode 版本需要与之相同。否则,您将需要通过向 carthage update 命令传递 --no-use-binaries 标志,在你的计算机上构建框架。

  6. 在您的源文件中,使用 import AWSAppSync 导入 SDK。

Codegen

要使用 AppSync SDK,您需要使用来自 AWS Amplify CLIamplify 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 权限。
    • 第二个实例应配置为使用 API 密钥认证。

按照以下步骤可以获取后端设置

  1. 使用 API 密钥认证创建带有 AppSync API 的堆栈
    1. 转到 AWS CloudFormation 控制台
    2. 点击 创建堆栈,然后选择 上传模板文件。点击 选择文件,导航到此项目中 Cloud Formation 模板所在的路径:AWSAppSyncIntegrationTests/ConsoleResources/appsync-integrationtests-cloudformation.yaml
    3. 点击 下一步
    4. 输入“堆栈名称”和“资源名称前缀”
      • 我们建议使用“资源名称前缀”,以便容易识别人名堆栈是用于 AppSync 测试的,例如:AppSyncTest<YYYYMMDDHHMM>
      • 由于您将创建两个堆栈进行这些测试,一个使用 API 密钥认证,另一个使用 IAM(Cognito 身份)认证,因此我们建议选择一个易于区分两个堆栈的堆栈名称,例如:AppSyncTest<YYYYMMDDHHMM>-APIKeyAppSyncTest<YYYYMMDDHHMM>-IAM
    5. 选择 ApiKey 认证类型
    6. 当堆栈创建完成后,点击 输出 选项卡。
    7. 将适当的值复制到测试配置文件 AppSyncIntegrationTests/appsync_test_credentials.json
      • AppSyncApiKey
      • AppSyncEndpointAPIKey
      • AppSyncEndpointAPIKeyRegion
  2. 按照上述 1-6 步骤创建另一个 CloudFormation 堆栈,但在第 5 步中选择“IAM”认证类型。
    1. 将适当的值复制到测试配置文件 AppSyncIntegrationTests/appsync_test_credentials.json
      • AppSyncEndpoint
      • AppSyncRegion
      • CognitoIdentityPoolId
      • CognitoIdentityPoolRegion
      • BucketName
      • BucketRegion
      • AppSyncMultiAuthAPIKey
  3. 按照上述 1-6 步骤创建另一个 CloudFormation 堆栈,以 API Key 作为认证类型(我们将在稍后更改它)
    1. 使用此项目中提供的模板 AWSAppSyncIntegrationTests/ConsoleResources/appsync-lambda-authorize r.js 创建一个 Lambda 函数

    2. 堆栈完成后,点击 输出 选项卡

    3. 将适当的值复制到测试配置文件 AppSyncIntegrationTests/appsync_test_credentials.json

      • AppSyncEndpointAPIKeyLambda
      • AppSyncEndpointAPIKeyLambdaRegion
    4. 转到 AWS AppSync 控制台,选择新创建的 AppSync 实例

    5. 设置 部分,将默认认证类型更改为 并选择在上一步骤创建的 Lambda 函数

注意:您必须在AppSyncIntegrationTests/appsync_test_credentials.json中提供所有值或在代码中提供。没有机制来处理一个源将部分值覆盖另一个源。在运行集成测试之前必须指定所有值。

选项 1:使用测试配置文件

AWSAppSyncIntegrationTests 文件夹中添加文件 appsync_test_credentials.json(见以下示例),并替换 AppSyncEndpointCognitoIdentityPoolIdAppSyncEndpointAPIKeyAppSyncAPIKey 和所需的区域值

{
  "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遵循亚马逊软件许可协议