AWS SDK for iOS
AWS SDK for iOS 提供了库和文档,使开发者可以使用 AWS 构建连接的移动应用程序。
我们建议使用最新的 AWS Amplify Library for Swift v2 版本,以快速实现常见的应用程序用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 的约定模式,如 async/await。
注意:Swift 的 Amplify 库(当前为 GA)建立在 AWS SDK for Swift 之上,仅提供对 AWS SDK for Swift 的访问,该 SDK 目前处于开发者预览版。您可以通过 AWS Amplify 的逃生舱访问此底层 SDK。
您可以通过 Swift Amplify 库文档 了解所有功能的更多信息。您还可以使用 AWS Amplify 与 现有的 AWS 云资源 结合使用。如果您在 Amplify 中找不到您需要的功能,请在 Swift Amplify 库的 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
分支检测到的最新兼容的依赖项版本,然后点击 下一步。注意: iOS 的 AWS 移动 SDK 不使用语义版本,可能会在次小版本发布中引入破环性 API 变更。我们建议将 版本 规则设置为 更新到下一个次小版本,并评估次小版本发布,以确保它们与您的应用程序兼容。
-
选择您想要添加到项目中的库。始终选择 AWSCore SDK。其他要安装的 SDK 将根据您想要安装的 SDK 而变化。大多数 SDK 只依赖于 AWSCore,但要查看完整的依赖列表,请参阅 README-spm-support 文件。
注意:由于与包二进制依赖项的冲突,AWSLex 目前不支持通过 Swift 包管理器为
arm64
架构使用。选择所有适当的选项,然后点击 完成。
您可以通过打开您项目的 Swift 包选项卡来随时修改项目中的 SPM 包:在 Xcode 导航器中点击项目文件,然后点击您项目图标,然后选择 Swift 包 选项卡。
CocoaPods
-
通过 CocoaPods 提供适用于 iOS 的 AWS 移动 SDK。如果您尚未安装 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库”的框架(不推荐)
要将具有多个架构的二进制平台的框架包进行构建(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,链接为按此链接。旧版本SDK可以从
https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-#.#.#.zip
下载,其中#.#.#
代表版本号。因此,对于2.23.3版本,下载链接为按此链接。
注意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版本,下载链接为按此链接。
注:如果您使用的是版本 > 2.22.0,请参阅上方的“XCFramework 设置”部分。
-
在 Xcode 中打开您的项目后,选择您的 目标。在 通用 选项卡下,找到 嵌入式二进制文件 并单击 + 按钮。
-
单击 添加其他... 按钮,导航到
AWS<#服务名称#>.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框架或XCFramework。选中所有AWS框架,然后按键盘上的 Delete键。然后选择移动到废纸篓。
-
按照上面的安装过程,包括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 日志级别是可累加的,因此当级别设置为详细时,将记录所有低于详细级别的消息。还可以设置自定义日志以满足您的需求。有关更多信息,请参阅 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 文件以获取更多信息。