AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,用于使用 AWS 构建连接的移动应用程序。
我们推荐使用 AWS Amplify Library for Swift 的最新 v2 版本来快速实现常见的应用用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 的约定模式,如 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 中找不到所需的特性,请在 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 或更高版本
将 SDK 包含到现有的 iOS 应用中
我们提供了一些 示例应用程序,展示了如何使用 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 Package Manager GitHub 仓库的 URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
),然后点击 下一步。注意: 此URL不是SDK的main URL。我们在此独立仓库中维护此库的Swift包管理器清单文件(
Package.swift
),这样使用SDK的应用无需下载整个源代码库即可获取二进制目标。 -
您将看到Swift包管理器安装SDK哪个版本的仓库规则。选择第一个规则版本,并选择“直到下一个较小版本”,因为它将使用从
main
分支检测到的最新兼容版本的依赖项,然后点击下一步。注意: AWS Mobile SDK for iOS不使用语义版本控制,并在次要版本发布时可能引入破坏性API更改。我们建议将您的“版本”规则设置为“直到下一个较小版本”,并评估次要版本发布以确保它们与您的应用兼容。
-
选择您想添加到项目中的库。始终选择AWSCore SDK。要安装的其他SDK将根据您要安装的SDK而有所不同。大多数SDK仅依赖于AWSCore,但对于完整的依赖项列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,目前通过Swift包管理器不支持AWSLex在
arm64
架构上的支持。选择所有适当的选项,然后点击完成。
您可以通过打开项目的Swift包选项卡来随时修改项目中包含的SPM包:在Xcode导航器中单击项目文件,然后单击您的项目图标,然后选择Swift包选项卡。
CocoaPods
-
AWS Mobile SDK for iOS可通过CocoaPods获得。如果您尚未安装CocoaPods,请运行以下命令安装:
$ gem install cocoapods $ pod setup
根据您的系统设置,您可能需要使用
sudo
来安装cocoapods
,如下所示:$ sudo gem install cocoapods $ pod setup
-
在项目目录(
*.xcodeproj
文件所在的目录)中,运行以下命令以在项目中创建一个Podfile
。$ pod init
-
编辑Podfile以包含要集成到项目中的Pod。例如,如果您需要身份验证,可以使用AWSMobileClient,如果您需要分析,则添加AWSPinpoint。因此,您的Podfile可能看起来像这样:
target 'YourTarget' do
pod 'AWSMobileClient'
pod 'AWSPinpoint'
end
有关我们的Pod的完整列表,请查看该项目根目录中的.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 发布说明中提到,不支持使用 XCFrameworks 预构建的二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹拖放您想使用的每个 xcframework 到其中。
具有“胖库”的框架(不推荐)
(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
-
在您的目标中的构建阶段选项卡下,点击左上角的<强壮>按钮,然后选择新建运行脚本阶段。然后按照以下步骤设置构建阶段。确保此阶段位于<代码>嵌入框架代码>阶段之下。
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
注意:目前,iOS AWS SDK 使用最新发布的 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 版本,下载链接为 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框架或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
)。这个单例方法使用您在第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仓库
日志记录
从2.5.4版本起,日志使用灵活、快速、开源的日志框架CocoaLumberjack。它支持许多功能,例如可以根据输出目标设置日志级别,例如,将简洁的消息记录到控制台,将详细消息记录到日志文件。
CocoaLumberjack日志级别是累加的,即当级别设置为verbose时,会记录低于verbose级别的所有消息。还可以自定义日志来满足您的需求。有关更多信息,请参阅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用户沟通。
作者
亚马逊网络服务
许可
有关更多信息,请参阅 授权 文件。