AWS SDK for iOS
AWS SDK for iOS为开发者提供了库和文档,以便使用AWS构建连接型移动应用程序。
我们建议使用AWS Amplify Library for Swift的最新v2版本,以快速实现身份验证、存储、推送通知等常见应用用例,这些用例遵循Swift的idiomatic模式,如async/await。
注意:Swift(目前为GA)的Amplify Library的第2版是在AWS SDK for Swift之上构建的,**仅**提供对AWS SDK for Swift的访问,目前处于开发者预览阶段。您可以通过AWS Amplify中的Escape Hatch访问此基础SDK。
您可以访问Amplify Library for Swift文档以了解所有功能。您还可以使用AWS Amplify与现有的AWS云资源一起使用。如果您在Amplify中找不到您要查找的功能,请向Amplify Library for Swift GitHub仓库提交问题,我们很乐意考虑您的请求。
如果您仍想直接使用AWS SDK for iOS,请参阅此处AWS SDK文档并遵循以下设置说明。您还可以查看AWS SDK for iOS示例代码仓库中的示例应用程序。
设置
要开始使用适用于iOS的AWS SDK,请参阅 iOS开发指南。您可以设置SDK并开始构建新项目,或者在现有项目中集成SDK。您还可以运行示例来了解SDK的工作方式。
要使用适用于iOS的AWS SDK,您需要在开发机上安装以下内容
- Xcode 11.0或更高版本
- iOS 9或更高版本
在现有应用程序中包含iOS SDK
我们有几个 示例应用程序 呈现如何使用适用于iOS的AWS SDK。请注意,这些示例应用程序中的代码并非是生产就绪的,应被视为我们所命名的:示例。
有几种方法可以将AWS Mobile SDK for iOS集成到您的项目中
您应该只使用这些方式之一来导入AWS移动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 的应用程序无需下载整个源仓库即可消耗二进制目标。 -
您将看到要安装 SDK 的版本规则的仓库规则。选择第一个规则 版本,并选择 最高到下一个次版本,因为它将使用可从
main
分支检测到的兼容性最新的依赖项版本,然后单击 下一步。注意:AWS Mobile SDK for iOS 不使用 语义版本控制,并且在次版本发布中可能会引入破坏性 API 更改。我们建议将您的 版本 规则设置为 最高到下一个次版本,并评估次版本发布以确保它们与您的应用程序兼容。
-
选择您要添加到项目的库。始终选择 AWSCore SDK。您要安装的剩余 SDK 将根据您要安装的 SDK 而变化。大多数 SDK 仅依赖于 AWSCore,但对于完整依赖项列表,请参阅 README-spm-support 文件。
注释:由于与打包的二进制依赖项冲突,目前通过 Swift 包管理器不支持 AWSLex 对
arm64
架构的支持。选择适当的所有项,然后单击 完成。
您始终可以通过打开项目的 Swift 包选项卡来修改项目中包含的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
CocoaPods
-
您可以通过 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
有关我们 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 支持 XCFrameworks 且 Xcode 12 或以上版本。请按照以下步骤使用 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 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
-
在您的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 版本需要与之相同;否则,您必须通过向“
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,请参阅下面的“Legacy framework setup”部分。注意2:要下载版本 < 2.23.3,请使用此链接
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
- 解压缩 ZIP 文件
- 在您的应用程序目标的“通用设置”标签页中,在“嵌入二进制文件”部分,从下载的文件夹中将每个选择要使用的 xcframework 拖放到应用程序目标中。
Legacy framework setup
- 使用
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 setup”部分。
-
在 Xcode 中打开您的项目后,选择您的 Target。在“通用”选项卡下找到“嵌入二进制文件”,然后点击“+”按钮。
-
单击添加其他...按钮,导航到
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,这是一个灵活、快速的开源日志框架。它支持许多功能,包括能够针对每个输出目标设置日志级别,例如,将简洁的消息记录到控制台,verbose 信息记录到日志文件。
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
我们建议在发布到苹果应用商店之前将日志级别设置为 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之前,请确保阅读我们贡献指南[此处](./CONTRIBUTING.md)。谢谢!<3
联系我们
访问我们的GitHub 问题,留下您的反馈并与SDK的用户交流。
作者
Amazon Web Services
许可证
有关更多信息,请参阅 LICENSE 文件。