AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,使他们能够使用 AWS 构建连接型移动应用。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现如身份验证、存储、推送通知等常见应用用例,这些用例遵循 Swift 的异步/等待等惯用模式。
注意:Swift Amplify Library 的 v2 版本(目前为GA)建立在 AWS SDK for Swift 之上,并且仅提供对当前处于开发者预览中的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。
您可以前往 Swift Amplify Library 文档 以了解更多功能。您也可以使用 AWS Amplify 集成到您现有的 AWS 云资源中。如果您在 Amplify 中找不到所需的功能,请向 Swift Amplify Library GitHub 仓库 中提交问题,我们将很乐意考虑您的需求。
如果您仍然想直接使用 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 或更高版本
将 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 Packages > 添加包依赖。
-
在搜索栏中输入 AWS SDK for iOS Swift Package Manager GitHub 仓库的 URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
),然后点击 下一步。注意:此 URL 不是 SDK 的主 URL。我们在此独立仓库中维护此库的 Swift Package Manager 清单文件(
Package.swift
),以便使用 SDK 的应用程序不必下载整个源代码库,只需下载二进制目标。 -
您将看到选择 AWS SDK 版本的仓库规则。选择第一个规则 版本,并选择 至下一个次小版本,因为它将使用主分支中检测到的最新兼容版本,然后点击 下一步。
注意:AWS iOS 移动 SDK 不使用语义版本控制,可能在次要版本发布中引入破坏性 API 更改。我们建议将 版本 规则设置为 至下一个次小版本 并评估次要版本发布,以确保它们与您的应用程序兼容。
-
选择要添加到项目中的库。始终选择 AWSCore SDK。安装其余 SDK 将取决于您要安装的 SDK。大多数 SDK 只依赖于 AWSCore,但有关完整依赖列表,请参阅 README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,目前无法通过 Swift Package Manager 支持在
arm64
架构上使用 AWSLex。选择所有合适的选项,然后点击 完成。
您总是可以通过打开项目的 Swift Packages 选项卡来修改项目中包含哪些 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
CocoaPods
-
AWS iOS 移动 SDK 通过 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 版本起,由于 Carthage 发布说明中提到(见 https://github.com/Carthage/Carthage/releases/tag/0.37.0),不支持使用 XCFrameworks 的预构建二进制文件。
- 在您的应用程序目标的“常规”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹中拖放您想要使用的每个 xcframework。
带有“胖库”的框架(不推荐使用)
为了构建具有多个架构的特定平台的框架存档(Xcode 11 和以下版本)
-
安装最新版本的 Carthage。
-
将以下内容添加到您的
Cartfile
github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 目标。在 通用 选项卡下,找到 框架、库和嵌入内容,然后单击 + 按钮。
-
单击 添加其他... 按钮,然后在弹出菜单中单击“添加文件...”,然后导航到
Carthage
>Build
>iOS
下的AWS<#ServiceName#>.framework
文件,并选择它们。如果提示,不要选择< strong> Destination: Copy items if needed 复选框。添加您特定用例所需的框架。例如,如果您正在使用 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
注意:目前,iOS AWS SDK 使用 Xcode 的最新发布版本构建 Carthage 二进制文件。为了使用预构建的二进制文件,您的 Xcode 版本需要相同,否则您必须通过将
--no-use-binaries
标志传递给carthage update
命令来在您的机器上构建框架。
框架
XCFramework 设置
从 AWS SDK iOS 版本 2.22.1 开始,SDK 二进制文件作为 XCFramework 发布。按照以下步骤安装 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框架或XCFramework。选择所有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步中设置的字段创建一个服务客户端并维持对客户端的强引用。
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步中设置的字段创建一个服务客户端并维持对客户端的强引用。
使用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
建议在发布到Apple App Store之前将日志级别设置为关闭
。
定向日志输出
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 文件。