AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,帮助他们使用 AWS 构建连接型移动应用程序。
我们推荐使用最新的 v2 版本的 AWS Amplify 库来快速实现如您所愿的认证、存储、推送通知等常见应用程序用例,并遵循 Swift 中 idiomatic 的 async/await 模式。
注意:目前处于 GA 状态的 Swift Amplify 库的 v2 版本建立在 AWS SDK for Swift 的基础上,并且 仅提供对处于开发者预览阶段的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此基础 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的工作方式。
要使用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 Package Manager GitHub仓库的URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
)输入搜索栏中,然后点击下一步。注意:此URL不是SDK的官方网站。我们在这个单独的仓库中维护了该库的Swift Package Manager清单文件(
Package.swift
),这样使用SDK的应用程序就不需要下载整个源仓库来使用二进制目标。 -
您将看到Swift Package Manager为所需SDK版本设置的仓库规则。选择第一个规则版本,然后选择直到下一个次级版本,因为它将使用从
main
分支识别的最新兼容版本,然后点击下一步。注意:AWS Mobile SDK for iOS不使用语义版本控制(详情),可能在新版本中引入破坏性API更改。我们建议将版本规则设置为直到下一个次级版本,并评估新版本以确保它与您的应用程序兼容。
-
选择您想要添加到项目中的库。始终选择AWSCore SDK。您需要安装的其余SDK将基于您尝试安装的SDK而变化。大多数SDK仅依赖于AWSCore,但对于完整的依赖列表,请参阅"README-spm-support文件"。
注意:因为与预编译的二进制依赖项存在冲突,通过Swift Package Manager目前不支持在
arm64
架构上使用AWSLex。选择所有合适的选项,然后点击完成。
您可以随时打开项目,通过在Xcode中打开项目的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以包含您想要集成到项目中的库。例如,如果您需要身份验证,您可以使用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 构建的预构建二进制文件
- 在您的应用目标的“常规”设置选项卡中,在“已嵌入的二进制文件”部分,将_xcframework_从磁盘上的 Carthage/Build 文件夹拖放到您想要使用的每个中的。
带有 "fat libraries" 的 Frameworks(不推荐)
为了在二进制文件中构建具有多个架构的特定平台框架捆绑包(Xcode 11 及以下版本)
-
安装 Carthage 的最新版本。
-
在您的
Cartfile
中添加以下内容github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 Target。在 常规 选项卡下,找到 Frameworks、库和嵌入内容,然后单击 + 按钮。
-
单击 添加其他... 按钮,然后从弹出菜单中选择 "添加文件...",然后导航到
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,否则您需要通过将
--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
-
在您的 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 框架或 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 的日志级别是累加的,因此当级别设置为 verbose 时,下面所有级别的消息也会被记录。也可以根据需要设置自定义的日志。更多信息请参阅 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
开源贡献
我们欢迎社区中的任何贡献!在提交任何PR之前,请务必阅读我们的贡献指南此处。谢谢!<3
联系我们
请访问我们的GitHub 问题 留下反馈并与SDK用户交流。
作者
Amazon Web Services 提供
许可证
有关更多信息,请参阅LICENSE文件。