AWS SDK for iOS
AWS SDK for iOS 为开发人员提供了创建使用 AWS 的连接型移动应用程序的库和文档。
我们建议使用最新的 AWS Amplify Library for Swift v2 版本,快速实现常见的应用程序用例,如身份验证、存储、推送通知等,这些用例遵循 Swift idiomatic 的模式,如 async/await。
注意:Swift Amplify Library 的 v2 版本(目前为 GA)基于 AWS SDK for Swift 构建,并仅提供对 AWS SDK for Swift 的访问,该 SDK 目前处于开发者预览阶段。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。
您可以通过访问 Swift Amplify Library 的文档 了解所有功能。您还可以使用 AWS Amplify 与您的现有 AWS 云资源一起使用 。如果您在 Amplify 中找不到需要的功能,请打开在 AWS Amplify Library for Swift GitHub 仓库 上的问题,我们将很高兴考虑您的请求。
如果您仍然希望直接使用 AWS SDK for iOS,可以参考此处 的 AWS SDK 文档,并按照下面的设置说明操作。您也可以查看 AWS SDK for iOS 样例仓库 中的示例应用程序。
设置
要开始使用 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 Package Manager、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
分支检测到的最新兼容依赖版本,然后点击 下一步。注意:Apple 移动 AWS SDK for iOS 不使用语义版本化,可能在次版本发布上引入破坏性 API 变更。我们建议将您的 版本 规则设置为 最高版本不超过下一个次版本,并评估次版本发布以确保它们与您的应用程序兼容。
-
选择要添加到您的项目中的库。始终选择 AWSCore SDK。要安装的其他 SDK 将根据您要安装的 SDK 而异。大多数 SDK 仅依赖于 AWSCore,但有关完整依赖列表,请参阅 README-spm-support 文件。
注意:由于与一个打包的二进制依赖冲突,目前通过 Swift 包管理器不支持 AWSLex 在
arm64
架构上。选择所有合适的选项,然后点击 完成。
您可以通过打开项目的 Swift 包标签来随时返回并修改项目中的 SPM 包:在 Xcode 导航器中点击项目文件,然后点击您的项目图标,然后选择 Swift 包 标签。
CocoaPods
-
Apple 移动 AWS SDK for iOS 可通过 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。
带有 "fat libraries" 的框架(不推荐)
为了构建平台特定框架捆绑包,其中二进制文件具有多个架构(Xcode 11 及以下版本)
-
安装最新版本的 Carthage。
-
将以下内容添加到您的
Cartfile
中github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 Target。在 通用 选项卡下,找到 框架、库和嵌入式内容,然后单击 + 按钮。
-
单击 添加其他... 按钮,然后在弹出菜单中选择 "添加文件...",然后导航到
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
注意:目前,AWS SDK for iOS 使用最新发布的 Xcode 版本构建 Carthage 二进制文件。要使用预构建的二进制文件,您的 Xcode 版本必须相同,否则您必须通过向
carthage update
命令传递--no-use-binaries
标志在您的机器上构建框架。
框架
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 中打开您的项目后,选择您的 Target。在 一般 选项卡下,找到 嵌入的二进制文件 并然后单击 + 按钮。
-
点击 添加其他... 按钮,导航到
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
更新 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
)。此单例方法创建一个使用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的其他用户交流。
作者
亚马逊网络服务
许可证
更多信息请查看 LICENSE 文件。