AWS SDK for iOS
AWS SDK for iOS 为开发者提供了构建连接到 AWS 的移动应用程序的库和文档。
我们建议使用最新版本的 AWS Amplify Library for Swift,以快速实现与 Swift 语言的异步/等待模式等价的应用程序用例,如身份验证、存储、推送通知等。
注意:Swift 的 Amplify 库的最新版本 2(目前为 GA)是建立在 AWS SDK for Swift 的基础之上,并且仅提供了访问 AWS SDK for Swift 的权限,目前处于开发者预览阶段。您可以通过 AWS Amplify 的逃生舱来访问此底层 SDK。
您可以通过访问Amplify Library for Swift 文档来了解所有功能。您还可以使用 AWS Amplify 与现有的 AWS 云资源一起使用。如果 Amplify 中找不到所需的特性,请向Amplify Library for Swift 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 或更高版本
在现有应用程序中包含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.swift
),这样使用 SDK 的应用无需下载整个源代码库即可消费二进制目标。 -
您将看到用于指定希望 Swift 包管理器安装哪个 SDK 版本的存储库规则。选择第一个规则,版本,并选择 更新到下一个次版本,因为它将使用从
main
分支中检测到的最新兼容依赖项版本,然后点击 下一步。注意:AWS Mobile SDK for iOS 不使用语义版本策略,在次要版本发布时可能引入破坏性 API 更改。我们建议将您的 版本 规则设置为 更新到下一个次版本,并评估次要版本发布以确保它们与您的应用兼容。
-
选择您希望添加到项目的库。始终选择 AWSCore SDK。要安装的其余 SDK 将根据您尝试安装的 SDK 而有所不同。大多数 SDK 仅依赖于 AWSCore,有关完整的依赖项列表,请参阅 README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,AWSLex 目前不支持 Swift 包管理器的
arm64
架构。选择所有合适的,然后点击 完成。
您可以通过打开项目的 Swift 包选项卡随时返回并修改项目中包含的 SPM 包:在 Xcode 查找器中点击项目文件,然后点击项目图标,然后选择 Swift 包 选项卡。
CocoaPods
-
您可以通过 CocoaPods 获取 AWS Mobile SDK for iOS。如果您尚未安装 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
有关我们的 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,由于 Carthage 发布说明中所述,不再支持使用 XCFrameworks 的预构建二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标“通用”设置选项卡中,在“嵌入式二进制文件”部分,将想要使用的每个 xcframework 从磁盘上的 Carthage/Build 文件夹拖拽到其中。
带有“胖库”的 Framework(不推荐)
要构建在二进制文件中包含多个架构的平台特定框架捆绑包(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 使用最新发布的版本构建 Carthage 二进制文件。为了使用预构建的二进制文件,您的 Xcode 版本需要相同,否则您必须通过将
--no-use-binaries
标志传递给carthage update
命令在您的计算机上构建框架。
框架
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,请参阅下方的“Legacy framework setup”部分。注意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
)。此单例方法创建一个服务客户端,带有defaultServiceConfiguration
,您在步骤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
)。此单例方法创建一个服务客户端,带有defaultServiceConfiguration
,您在步骤5中设置,并保持对该客户端的强引用。
使用AWSTask
SDK在异步操作上操作时返回AWSTask
对象,以避免阻塞UI线程。
AWSTask类是Bolts框架中的BFTask的重命名版本。有关Bolts的完整文档,请参阅Bolts-iOS仓库
记录
从本SDK的2.5.4版本开始,记录使用了CocoaLumberjack,一个灵活、快速的开源日志框架。它支持多种功能,包括设置每个输出目标的日志级别,例如,将简洁的消息记录到控制台,将详细消息记录到日志文件。
CocoaLumberjack的日志级别是可累计的,因此当日志级别设置为详细时,下级所有的消息都会被记录。还可以设置自定义日志以满足您的需求。有关更多信息,请参阅CocoaLumberjack
更改日志级别
Swift
AWSDDLog.sharedInstance.logLevel = .verbose
以下为可用的日志级别选项
.off
.error
.warning
.info
.debug
.verbose
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下为可用的日志级别选项
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到Apple App Store之前将日志级别设置为Off
。
定位日志输出
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 文件。