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 的访问。您可以通过 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 for iOS SDK,请查看iOS开发者指南。您可以为新项目设置SDK并开始构建,或者将SDK集成到现有项目中。您还可以运行示例来了解SDK的工作原理。
要使用AWS for iOS SDK,您需要在您的开发机器上安装以下内容
- Xcode 11.0或更新版本
- iOS 9或更新版本
在现有应用程序中包含iOS SDK
我们有一些建议的示例应用程序,展示了如何使用AWS for iOS SDK。请注意,这些示例应用程序中的代码不是实际应用的品质,应被视为示例。
有多种方法可以将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 Packages > 添加包依赖项。
-
在搜索栏中输入AWS SDK for iOS Swift包管理器GitHub存储库的URL(《https://github.com/aws-amplify/aws-sdk-ios-spm》),然后点击下一步。
注意:此URL不是SDK的主URL。我们维护该库的Swift包管理器清单文件(《Package.swift》),但这位于单独的存储库中,以确保使用SDK的应用程序不需要下载整个源代码仓库来消费二进制目标。
-
您将看到为哪些版本的SDK需要Swift Package Manager(Swift包管理器)安装的存储库规则。请选择第一个规则版本,并将它设置为直到下一个小版本,因为它将使用从
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
-
iOS的AWS Mobile SDK可以通过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。
带有“胖库”的框架(不推荐使用)
为了构建包含多个架构的二进制文件的特定平台的框架包(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版本必须相同,否则您必须通过向
carthage update
命令传递--no-use-binaries
标志来手动在您的机器上构建框架。
框架
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版本的SDK,下载链接为https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-2.10.2.zip。
注意:如果您使用的是> 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框架或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
)。此单例方法使用您在第 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
.错误
.警告
.信息
.调试
.详细
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
开源贡献
我们欢迎来自社区的任何贡献!在提交任何拉取请求之前,请务必阅读我们的贡献指南[在此](./CONTRIBUTING.md)。谢谢!<3
与我们交流
访问我们的GitHub 问题 页面留下反馈并与其他SDK用户交流。
作者
Amazon Web Services
许可协议
更多信息请参阅 LICENSE 文件。