AWS SDK for iOS
AWS SDK for iOS 为开发者提供了一个库和文档,用于使用 AWS 构建连接的移动应用。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现常见的应用用例,例如身份验证、存储、推送通知等,遵循 Swift 的惯用模式,如 async/await。
注意:Swift Amplify 库的 v2 版本(目前为 GA)建立在 AWS SDK for Swift 的基础上,并且仅提供对目前处于开发者预览状态的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。
您可以通过访问 Swift Amplify 库的文档 来了解所有功能。您还可以使用 AWS Amplify 与 现有的 AWS 云资源。如果您在 Amplify 中找不到所需的功能,请打开 Swift Amplify GitHub 仓库中的问题,我们将很高兴考虑您的请求。
如果您仍然希望直接使用 AWS SDK for iOS,请参阅 此处 AWS SDK 文档 并遵循以下设置说明。您还可以查看 AWS SDK for iOS 示例仓库 中的示例应用程序。
设置
要开始使用 iOS 的 AWS SDK,请查阅iOS 开发者指南。您可以设置 SDK 并开始构建新项目,或者将 SDK 集成到现有项目中。您还可以运行示例以了解 SDK 的工作原理。
使用 iOS 的 AWS SDK,您需要在您的开发机器上安装以下软件
- Xcode 11.0 或更高版本
- iOS 9 或更高版本
将 SDK 集成到现有应用程序中
我们有一些示例应用程序,展示了如何使用 iOS 的 AWS SDK。请注意,这些示例应用程序中的代码不是生产级别的,应被视为我们所称的:示例。
有多种方法可以将 AWS Mobile SDK 集成到您的项目中
您应只使用其中一种方式来导入 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 Package Manager 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文件。
注意:由于与打包的二进制依赖项冲突,目前通过Swift Package Manager不支持AWSLex的
arm64
架构。选择所有适用的选项,然后点击完成。
您可以通过打开项目的Swift Packages选项卡来随时返回并修改项目中包含的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以包含您想要集成到项目中的库。例如,如果您需要身份验证,可以使用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 发布说明中提到,不支持使用 XCFrameworks 的预构建二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在磁盘上的 Carthage/Build 文件夹中,将您想要使用的每个 xcframework 从 General 设置标签中的 Embedded Binaries 部分拖放到您的应用程序目标的区域。
带有“fat库”的 Framework(不推荐)
为了构建带有多架构二进制的特定平台框架包(Xcode 11 及以下版本)
-
安装最新版本的 Carthage。
-
将以下内容添加到您的
Cartfile
github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 Target。在 General 选项卡下,找到 Frameworks, Libraries, and Embedded Content,然后单击 + 按钮。
-
单击 Add Other... 按钮,然后在弹出菜单中,单击 "Add Files...",然后导航到
Carthage
>Build
>iOS
下的AWS<#ServiceName#>.framework
文件并选择它们。如果提示,请勿选中 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
注意:当前,AWS SDK for iOS 使用最新发布的 Xcode 版本构建 Carthage 二进制文件。要使用预先构建的二进制文件,您的 Xcode 版本需要相同,否则您必须在计算机上通过向
carthage update
命令传递--no-use-binaries
标志来构建框架。
框架
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 中设置的 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类是BFTask类(来自Bolts框架)的重命名版本。有关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用户建立联系。
作者
亚马逊网络服务
许可证
更多信息请参见LICENSE文件。