AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,用于构建使用 AWS 连接的移动应用程序。
我们建议使用最新的 AWS Amplify Library for Swift v2 版本,以快速实现认证、存储、推送通知等常见应用用例,这些用例遵循 Swift 的标准模式,例如 async/await。
注意:Swift Amplify Library 的 v2(目前为通用版)建立在 AWS SDK for Swift 之上,**仅**提供对开发者预览中的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。
您可以通过访问 Swift Amplify Library 文档 了解所有功能。您还可以使用 AWS Amplify 与 现有 AWS 云资源。如果您在 Amplify 中找不到所需的功能,请打开 Swift Amplify Library 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 或更高版本
我们有一些 示例应用程序,展示了如何使用 AWS SDK for iOS。请注意,这些示例应用程序中的代码不是生产质量的,应被视为所称呼的:示例。
有几个方法可以将 AWS 移动 SDK for iOS 集成到您的项目中
您应使用其中一种,并且只使用一种方式来导入 AWS 移动 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一同分发。要开始向iOS项目添加AWS SDK,请打开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移动SDK for iOS不使用语义版本控制,可能在次要版本发布中引入破坏性API更改。我们建议将您的版本规则设置为直到下一个次要版本,并评估次要版本发布以确保它们与您的应用兼容。
-
选择要添加到您的项目的库。始终选择AWSCore SDK。其他要安装的SDK取决于您尝试安装哪个SDK。大多数SDK仅依赖AWSCore,但有关完整依赖列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,当前通过Swift包管理器不支持AWSLex的
arm64
架构。选择所有合适的选项,然后点击完成。
您可以始终回退并修改项目中包含的SPM包。通过打开项目的Swift包选项卡:在Xcode导航器中点击项目文件,然后点击项目图标,然后选择Swift包选项卡。
CocoaPods
-
AWS移动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
关于我们所有库的完整列表,请查看项目根目录中的.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
- 在您的应用目标“通用”设置选项卡中,在“已嵌入的二进制文件”部分,从磁盘上的Carthage/Build文件夹中拖放您想要使用的每个xcframework。
带“fat库”的框架(不推荐)
要构建二进制文件中包含多个架构的平台特定框架包(Xcode 11及以下版本)
-
安装最新版本的Carthage。
-
将以下内容添加到您的
Cartfile
github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update
-
在Xcode中打开您的项目,选择您的目标。在“通用”选项卡下找到“框架、库和嵌入内容”,然后单击加号按钮。
-
单击“添加其他...”按钮,然后在弹出的菜单中选择“添加文件...”,然后导航到“Carthage” > “构建” > “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:最新 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 框架或 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 repo
日志记录
自本SDK的2.5.4版本起,日志记录使用灵活、快速的开源日志框架CocoaLumberjack。它支持许多功能,包括可以为每个输出目标设置日志级别,例如,将简洁的消息记录到控制台,将详细的消息记录到日志文件。
CocoaLumberjack的日志级别是可叠加的,因此当设置级别为详细时,所有来自详细级别以下的消息都被记录。还可以设置自定义日志以满足您的需求。有关更多信息,请参阅CocoaLumberjack
更改日志级别
Swift
AWSDDLog.sharedInstance.logLevel = .verbose
以下提供了日志级别的选项
.关闭
.错误
.警告
.信息
.调试
.详细
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下提供了日志级别的选项
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到苹果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文件。