AWS SDK for iOS
AWS SDK for iOS 为开发者提供了用于构建连接移动应用的库和文档。
我们建议使用最新版本的 AWS Amplify Library for Swift 来快速实现类似于登录、存储、推送通知等常见应用用例,同时遵循 Swift 的 idiomatic 模式,如 async/await。
注意:Swift 的 Amplify Library v2 版本(目前为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 的应用程序就不必下载整个源代码仓库,只需下载二进制目标。 -
您将看到有关要安装的 SDK 版本的仓库规则。选择第一个规则 版本,并选择 直到下一个次小版本,因为它将使用从
main
分支检测到的最新兼容的依赖项版本,然后单击 下一步。注意: AWS Mobile 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
-
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 以包含您想要集成到项目中的 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
-
在您的 目标 的 构建阶段 选项卡下,单击左上角的 + 按钮,然后选择 新运行脚本阶段。然后按照以下设置构建阶段。确保此阶段位于
嵌入式框架
阶段之下。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 版本需要与此相同,否则您必须在计算机上通过传递
--no-use-binaries
标志给carthage update
命令来构建框架。
框架
设置 XCFramework
从 AWS SDK iOS 版本 2.22.1 开始,SDK 二进制文件作为 XCFramework 发布。按照以下步骤安装 XCFramework。
- 下载最新的 SDK ![链接](https://releases.amplify.aws/aws-sdk-ios/latest/aws-ios-sdk.zip)。较旧的 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
)。此单例方法创建一个具有 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文件。