AWS SDK for iOS
AWS SDK for iOS 为开发者提供了构建与 AWS 连接的移动应用程序的库和文档。
我们建议使用 Swift 的最新 v2 版本 AWS Amplify 库,以快速实现身份验证、存储、推送通知等常用应用用例,并遵循 Swift 的 async/await 等通用模式。
注意:Swift 的 Amplify 库第 2 版(目前为 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,您需要在您的开发机器上安装以下软件:
- Swift Package Manager 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 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文件。
注意:由于与打包的二进制依赖项冲突,AWSLex不通过Swift Package Manager支持
arm64
架构。选择适合的选项,然后点击完成。
您可以通过打开项目的Swift Packages标签来随时回退并修改要包含在您项目中的SPM包:在Xcode导航器中点击项目文件,然后点击您的项目图标,然后选择Swift Packages标签。
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以包含您要集成到项目中的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,不支持使用 XCFrameworks 构建的预构建二进制文件,如 Carthage 发布说明中所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“常规设置”选项卡中,在“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹中拖放您想要使用的每个 xcframework。
带有 "fat libraries" 的框架(不推荐)
为了构建具有多个架构的二进制文件的平台特定框架包(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
-
在您的 目标 的 构建阶段 选项卡中,点击左上角的 + 按钮,然后选择 新建Run Script阶段。然后设置构建阶段如下。请确保此阶段在
嵌入框架
阶段之下。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 可从
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<#ServiceName#>.framework
文件并选择它们。在提示时勾选 目标:如有需要则复制项目 复选框。添加针对您特定用例所需的框架。例如,如果您正在使用 AWSMobileClient 和 AWSPinpoint,则希望添加以下框架AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
在您的 目标 的 构建阶段 选项卡中,点击左上角的 + 按钮,然后选择 新建Run Script阶段。然后设置构建阶段如下。请确保此阶段在
嵌入框架
阶段之下。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
.error
.warning
.info
.debug
.verbose
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下是一些可用的日志级别选项
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到苹果应用商店之前将日志级别设置为 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 文件。