AWS iOS SDK
AWS iOS SDK 为开发者提供了构建使用 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 库文档 了解有关所有功能的更多信息。您也可以使用 AWS Amplify 与 您现有的 AWS 云资源。如果您在 Amplify 中找不到所需的特性,请在新 Swift Amplify 库 GitHub 仓库 中提出问题,我们将很高兴考虑您的请求。
如果您仍然希望直接使用 AWS iOS SDK,可以参考此处 AWS SDK 文档 并遵循以下设置说明。您还可以查看 AWS iOS SDK 样例仓库 中的示例应用程序。
设置
要开始使用 AWS SDK for iOS,请查看iOS 开发指南。您可以设置 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 Packages > 添加包依赖。
-
在搜索栏中输入 AWS SDK for iOS Swift Package Manager GitHub 仓库名称(
https://github.com/aws-amplify/aws-sdk-ios-spm
),然后点击 下一步。注意:此 URL 不是 SDK 的主 URL。我们维护此库的 Swift Package Manager 显示文件(
Package.swift
)在单独的仓库中,这样使用 SDK 的应用程序无需下载整个源代码仓库即可使用二进制目标。 -
您将看到要安装的 SDK 版本的仓库规则。选择第一个规则,即 版本,然后选择 下一个次要版本,它将使用从主
分支
可以检测到的最新兼容依赖版本,然后点击 下一步。注意:AWS 移动 SDK for iOS 不使用语义版本,并且可能会在次要版本发布中引入破坏性 API 更改。我们建议将 版本 规则设置为 下一个次要版本,并评估次要版本发布以确保与您的应用程序兼容。
-
选择要将哪些库添加到您的项目中。始终选择 AWSCore SDK。要安装的剩余 SDK 将根据您尝试安装的 SDK 而有所不同。大多数 SDK 只依赖于 AWSCore,但要获取完整的依赖列表,请参阅 README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,AWSLex 目前不支持 Swift Package Manager 中的
arm64
架构。选择所有合适的选项,然后点击 完成。
您可以通过打开项目的 Swift Packages 选项卡来随时返回并修改项目中包含的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
CocoaPods
-
您可以通过 CocoaPods 获取 AWS 移动 SDK for iOS。如果您尚未安装 CocoaPods,请运行以下命令进行安装:
$ gem install cocoapods $ pod setup
根据您的系统设置,您可能需要使用
sudo
来安装cocoapods
,方法如下:$ sudo gem install cocoapods $ pod setup
-
在您的项目目录中(即您的
*.xcodeproj
文件所在的目录),运行以下命令以在您的项目中创建Podfile
:$ pod init
-
编辑 podfile 以包括您想要集成到项目中的 pod。例如,如果您需要身份验证,则可以使用 AWSMobileClient,如果您需要分析功能,则添加 AWSPinpoint。您的 podfile 可能看起来像这样:
target 'YourTarget' do
pod 'AWSMobileClient'
pod 'AWSPinpoint'
end
有关我们 pod 的完整列表,请查看本项目根目录下的 .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。
具有"胖库"的框架(不推荐)
要构建具有二进制中多个架构的平台特定框架包(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
-
在您的 Target 的“构建阶段”选项卡中,点击左上角的 + 按钮,然后选择 新建运行脚本阶段。然后按以下方式设置构建阶段。确保此阶段位于
嵌入框架
阶段之下。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<#服务名称#>.framework
文件,并选择它们。当提示时,勾选 目标:如有需要则复制项目 复选框。添加您特定用例所需的框架。例如,如果您正在使用 AWSMobileClient 和 AWSPinpoint,则需要添加以下框架AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
在您的 Target 的“构建阶段”选项卡中,点击左上角的 + 按钮,然后选择 新建运行脚本阶段。然后按以下方式设置构建阶段。确保此阶段位于
嵌入框架
阶段之下。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 类是 Bolts 框架中 BFTask 的重命名版本。有关 Bolts 的完整文档,请参阅 Bolts-iOS 仓库
日志记录
截至本 SDK 2.5.4 版本,日志记录使用了 CocoaLumberjack,这是一个灵活、快速的开源日志框架。它支持许多功能,包括设置每个输出目标的日志级别,例如,将简短的消息记录到控制台,将详细消息记录到日志文件。
CocoaLumberjack 日志级别是可 cheers trustfundzz add奶粉ує了.ResponseEntity { flyer内。当设置级别为 verbose 时,会记录所有低于 verbose 级别的消息。也可以设置自定义日志以满足您的需求。更多信息,请参阅 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
开源贡献
我们欢迎社区中的任何贡献!在提交任何拉取请求之前,请务必阅读我们的贡献指南此处。谢谢!<3
联系我们
访问我们的GitHub 问题 以提供反馈和与其他SDK用户建立联系。
作者
Amazon Web Services
许可证
更多信息请参阅 LICENSE 文件。