AWS SDK for iOS
AWS SDK for iOS 为开发者提供了一个库和文档,使他们能够使用 AWS 构建连接的移动应用程序。
我们推荐使用 AWS Amplify Library for Swift 的最新 v2 版本,快速实现常见的应用用例,比如身份验证、存储、推送通知等等,这些用例遵循 Swift 中的语言习惯,如 async/await。
注意:Swift Amplify Library 的 v2 版本(目前为 GA)基于 AWS SDK for Swift 构建,并且仅提供 AWS SDK for Swift 的访问权限,该 SDK 目前处于开发者预览阶段。您可以通过 AWS Amplify 的逃生摇晃功能访问此底层 SDK。
您可以访问 Swift Amplify Library 的文档 了解更多功能信息。您还可以使用 AWS Amplify 与 现有的 AWS 云资源。如果想在 Amplify 中找不到您要查找的功能,请在 Swift Amplify Library 的 GitHub 仓库 中提交 issue,我们将乐意考虑您的请求。
如果您仍然希望直接使用 AWS SDK for iOS,您可以参考 AWS SDK 文档 并遵循下面的设置说明。您还可以查看 AWS SDK for iOS 示例仓库 中的示例应用程序。
设置
要开始使用 AWS SDK for iOS,请查看iOS 开发者指南。您可以设置 SDK 并开始构建一个新项目,也可以在现有项目中集成 SDK。您还可以运行示例以了解 SDK 的工作方式。
要使用 AWS SDK for iOS,您需要在您的开发机器上安装以下内容
- Xcode 11.0 或更高版本
- iOS 9 或更高版本
在现有应用程序中包含 iOS SDK
我们有几个示例应用程序,展示了如何使用 AWS SDK for iOS。请注意,这些示例应用程序中的代码不是生产级别的,应被视为我们所说的仅仅是示例。
有几种方法可以将 AWS Mobile SDK for iOS 集成到您自己的项目中
您应该使用其中一种方法导入 AWS Mobile SDK。以多种方式导入 SDK 会导致项目中加载 SDK 的多个副本,并导致编译器/链接器错误。
注意:如果您正在使用 XCFrameworks(即 Swift 包管理器、Carthage 或动态框架),一些模块使用
XCF
后缀命名以解决一个 Swift 问题。AWSMobileClient
被命名为AWSMobileClientXCF
,AWSLocation
被命名为AWSLocationXCF
。要使用AWSMobileClient
或AWSLocation
SDK,导入它们如下:
import AWSMobileClientXCF
import AWSLocationXCF
并在您的应用程序代码中不使用 XCF
后缀使用它。
AWSMobileClient.default().initialize()
let locationClient = AWSLocation.default()
Swift 包管理器
-
Swift 包管理器与 Xcode 一起分发。要将 AWS SDK 添加到您的 iOS 项目中,请打开 Xcode 中的项目并选择 文件 > Swift 包 > 添加包依赖项。
-
将 AWS SDK for iOS Swift 包管理器 GitHub 仓库的 URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
)输入到搜索栏中,然后点击 下一步。注意事项: 此 URL 不是 SDK 的主 URL。我们在这个库的单独仓库中维护 Swift Package Manager 的清单文件(
Package.swift
),以便使用 SDK 的应用程序无需下载整个源仓库即可获取二进制目标。 -
您将看到 Swift Package Manager 要安装 SDK 哪个版本的仓库规则。选择第一个规则版本,然后选择到下一个次版本号,因为它将使用从
main
分支检测到的最新兼容版本,然后单击下一步。注意事项: AWS Mobile SDK for iOS 不使用语义版本控制,并且可能在次要版本发布中引入破坏性的 API 变更。我们建议将您的版本规则设置为到下一个次版本号,并评估次要版本发布是否符合您的应用程序兼容性。
-
选择要添加到您项目中的库。始终选择 AWSCore SDK。要安装的剩余 SDK 依赖于您尝试安装哪个 SDK。大多数 SDK 仅依赖于 AWSCore,但有关完整依赖列表,请参阅README-spm-support 文件。
注意:由于与打包的二进制依赖冲突,AWSLex 目前不支持通过 Swift Package Manager 在
arm64
架构上使用。选择所有合适的选项,然后单击 完成。
您可以通过打开项目中 Swift 包的选项卡来随时返回并修改包含在您项目中的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
CocoaPods
-
AWS Mobile SDK for iOS 可通过 CocoaPods 获取。如果您尚未安装 CocoaPods,请运行以下命令安装 CocoaPods:
$ gem install cocoapods $ pod setup
根据系统设置,您可能需要使用
sudo
来安装cocoapods
,如下所示:$ sudo gem install cocoapods $ pod setup
-
在您的项目目录(您的
*.xcodeproj
文件所在的目录)中运行以下命令来在您的项目中创建一个Podfile
。$ pod init
-
编辑 podfile 以包含要集成到您项目中的 pods。例如,如果您需要身份验证,则可以使用 AWSMobileClient,如果您需要分析,则添加 AWSPinpoint。因此,您的 podfile 可能看起来像这样:
target 'YourTarget' do
pod 'AWSMobileClient'
pod 'AWSPinpoint'
end
有关我们所有 pods 的完整列表,请查看此项目根目录中的 .podspec 文件。
-
然后运行以下命令:
$ pod install --repo-update
-
要打开您的项目,请使用 XCode 在您项目目录中打开新创建的
*.xcworkspace
文件。您可以在项目文件夹中发出以下命令完成此操作:$ xed .
注意:请不要使用
*.xcodeproj
。如果您打开项目文件而不是工作空间,您可能会遇到以下错误:ld: library not found for -lPods-AWSCore clang: error: linker command failed with exit code 1 (use -v to see invocation)
Carthage
XCFrameworks (推荐)
Carthage 支持在 Xcode 12 及以上版本中使用 XCFrameworks。按照以下步骤使用 XCFrameworks 消费 AWS SDK for iOS:
-
安装 Carthage 0.37.0 或更高版本。
-
将以下内容添加到您的
Cartfile
github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update --use-xcframeworks --no-use-binaries
由于 Carthage 0.37.0 中未支持使用 XCFrameworks 编译的预构建二进制文件,如 Carthage 发布说明所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“常规”设置选项卡下的“嵌入的二进制文件”部分,从前面的 Carthage/Build 文件夹拖放每个要使用的 xcframework。
带有“fat库”的框架(不推荐)
要构建具有多个架构的二进制文件的平台特定框架包,(Xcode 11 和以下)
-
安装 Carthage 的最新版本。
-
将以下内容添加到您的
Cartfile
github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 目标。在 常规 选项卡下,找到 框架、库和嵌入内容,然后单击 [+]按钮。
-
单击 添加其他... 按钮,然后从弹出菜单选择 "添加文件...",然后导航到 Carthage > Build > iOS 下的
AWS<#ServiceName#>.framework
文件,并选择它们。如果您被提示选择 "目标:如果需要则复制项目",请取消选中该复选框。添加您特定用例所需的框架。例如,如果您正在使用 AWSMobileClient 和 AWSPinpoint,您将想要添加以下框架:AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
在您的 目标 中的 构建阶段 选项卡下,单击左上角的 [+]按钮,然后选择 新建运行脚本阶段。然后按照以下方式设置构建阶段。确保此阶段在
嵌入框架
阶段下方。Shell /bin/sh bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh" Show environment variables in build log: Checked Run script only when installing: Not checked Input Files: Empty Output Files: Empty
注意:目前,AWS SDK for iOS 使用最新发布的 Xcode 版本构建 Carthage 二进制文件。要使用预构建的二进制文件,您的 Xcode 版本必须相同;否则,您必须通过在
carthage update
命令中传递--no-use-binaries
标志来在您的机器上手动构建框架。
框架
XCFramework 设置
从 AWS SDK iOS 版本 2.22.1 开始,SDK 二进制文件以 XCFrameworks 的形式发布。按照以下步骤安装 XCFramework。
- 下载最新的 SDK:最新 SDK。旧版 SDK 可通过
https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-#.#.#.zip
下载,其中#.#.#
代表版本号。例如,版本 2.23.3 的下载链接为:https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-2.23.3.zip。
注意1:如果您使用的是版本 < 2.22.1,请参阅下面的“旧版框架设置”部分。注意2:要下载版本 < 2.23.3,请使用此链接
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
- 解压 ZIP 文件
- 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,将下载文件夹中的每个 xcframework 拖放到您想使用的位置。
旧版框架设置
- 使用
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
下载所需的 SDK,其中#.#.#
代表版本号。例如,版本 2.10.2 的下载链接为:https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-2.10.2.zip。
注意:如果您使用的是版本 > 2.22.0,请参阅上面的“XCFramework 设置”部分。
-
在 Xcode 中打开您的项目后,选择您的 目标。在 通用 选项卡下,找到 嵌入的二进制文件 并然后点击 + 按钮。
-
单击 添加其他... 按钮,导航到
AWS<#ServiceName#>.framework
文件并选择它们。当提示时,请勾选 目的:如有需要复制项目 复选框。为您的特定用例添加所需的框架。例如,如果您正在使用 AWSMobileClient 和 AWSPinpoint,则希望添加以下框架AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
在您的 目标 中的 构建阶段 选项卡下,单击左上角的 [+]按钮,然后选择 新建运行脚本阶段。然后按照以下方式设置构建阶段。确保此阶段在
嵌入框架
阶段下方。Shell /bin/sh bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework/strip-frameworks.sh" Show environment variables in build log: Checked Run script only when installing: Not checked Input Files: Empty Output Files: Empty
更新 SDK 到最新版本
每次发布 SDK 的新版本时,您可以按照以下方式获取更新。
CocoaPods
-
在项目目录中运行以下命令。CocoaPods 会自动获取新更改。
$ pod update
注意:如果您的 Pod 有问题,您可以删除
Podfile.lock
和Pods/
,然后运行pod install
清洁地安装 SDK。
Carthage
-
在项目目录中运行以下命令。Carthage 会自动获取新更改。
$ carthage update
框架
-
在 Xcode 的 项目导航器 中,键入 "AWS" 以找到您手动添加到项目的 AWS 框架或 XCFrameworks。选择所有 AWS 框架,按键盘上的 删除 键。然后选择 移动到废纸篓。
-
按上述安装过程包含新的 SDK 版本。
Swift入门指南
-
在应用程序代理中导入AWSCore头文件。
import AWSCore
-
通过在
application:didFinishLaunchingWithOptions:
应用程序代理方法中添加以下代码片段来创建默认服务配置。let credentialsProvider = AWSCognitoCredentialsProvider( regionType: CognitoRegionType, identityPoolId: CognitoIdentityPoolId) let configuration = AWSServiceConfiguration( region: DefaultServiceRegionType, credentialsProvider: credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration
-
在您想要使用SDK的Swift文件中,导入您所使用的服务的相应头文件。头文件导入约定为
import AWSServiceName
,如下面的示例所示import AWSS3 import AWSDynamoDB import AWSSQS import AWSSNS
-
调用AWS服务。
let dynamoDB = AWSDynamoDB.default() let listTableInput = AWSDynamoDBListTablesInput() dynamoDB.listTables(listTableInput!).continueWith { (task:AWSTask<AWSDynamoDBListTablesOutput>) -> Any? in if let error = task.error as? NSError { print("Error occurred: \(error)") return nil } let listTablesOutput = task.result for tableName in listTablesOutput!.tableNames! { print("\(tableName)") } return nil }
注意:大多数服务客户端类都有一个单例方法来获取默认客户端。命名约定为+ defaultSERVICENAME
(例如,上面的代码片段中的+ defaultDynamoDB
)。此单例方法使用您在第5步中设置的defaultServiceConfiguration
创建服务客户端,并保持对客户端的强引用。
Objective-C入门指南
-
在应用程序代理中导入AWSCore头文件。
@import AWSCore;
-
通过在
application:didFinishLaunchingWithOptions:
应用程序代理方法中添加以下代码片段来创建默认服务配置。AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:CognitoRegionType identityPoolId:CognitoIdentityPoolId]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType credentialsProvider:credentialsProvider]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
-
导入您所使用的服务的适当头文件。头文件导入约定为
@import AWSServiceName;
,如下面的示例所示@import AWSS3; @import AWSDynamoDB; @import AWSSQS; @import AWSSNS;
-
调用AWS服务。
AWSSNS *sns = [AWSSNS defaultSNS]; AWSSNSListTopicsInput *listTopicsInput = [AWSSNSListTopicsInput new]; [[sns listTopics:listTopicsInput] continueWithBlock:^id(AWSTask *task) { // Do something with the response return nil; }];
注意:大多数服务客户端类都有一个单例方法来获取默认客户端。命名约定为+ defaultSERVICENAME
(例如,上面的代码片段中的+ defaultS3SNS
)。此单例方法使用您在第5步中设置的defaultServiceConfiguration
创建服务客户端,并保持对客户端的强引用。
AWSTask的使用
SDK在执行异步操作时返回AWSTask
对象,以避免阻塞UI线程。
AWSTask类是Bolts框架中的BFTask的改名版本。有关Bolts的完整文档,请参阅Bolts-iOS仓库
日志
从本 SDK 的 2.5.4 版本起,日志功能使用 CocoaLumberjack,这是一个灵活、快速的开源日志框架。它支持许多功能,包括为输出目标设置日志级别的功能,例如将简洁的消息记录到控制台,而将详细消息记录到日志文件中。
CocoaLumberjack 的日志级别是叠加的,即当级别设置为详细时,所有低于详细级别的消息都会被记录。还可以设置自定义日志以满足您的需求。有关更多信息,请参见 CocoaLumberjack
更改日志级别
Swift
AWSDDLog.sharedInstance.logLevel = .verbose
以下是一些可供选择的日志级别选项
.关闭
.错误
.警告
.信息
.调试
.详细
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下是一些可供选择的日志级别选项
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到苹果应用商店之前将日志级别设置为 关闭
。
定位日志输出
CocoaLumberjack 可以将日志发送到文件,也可以用作一个集成为 Xcode 控制台的框架。
要初始化文件日志记录,请使用以下代码
Swift
let fileLogger: AWSDDFileLogger = AWSDDFileLogger() // File Logger
fileLogger.rollingFrequency = TimeInterval(60*60*24) // 24 hours
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
AWSDDLog.add(fileLogger)
Objective-C
AWSDDFileLogger *fileLogger = [[AWSDDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[AWSDDLog addLogger:fileLogger];
要初始化 Xcode 控制台日志记录,请使用以下代码
Swift
AWSDDLog.add(AWSDDTTYLogger.sharedInstance) // TTY = Xcode console
Objective-C
[AWSDDLog addLogger:[AWSDDTTYLogger sharedInstance]]; // TTY = Xcode console
开源贡献
我们欢迎社区中的任何贡献!在提交任何PR之前,请务必阅读我们的贡献指南这里。谢谢!<3
联系我们
访问我们的GitHub 问题,留言反馈并与SDK的用户交流。
作者
Amazon Web Services
许可证
有关更多信息,请参阅LICENSE文件。