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 的访问。您可以通过 AWS Amplify 中的逃生舱访问此底层 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 for 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 包管理器 GitHub 仓库的 URL (
https://github.com/aws-amplify/aws-sdk-ios-spm
) 输入搜索栏,然后点击 下一步。注意: 此 URL 不是 SDK 的主要 URL。我们在独立的仓库中维护该库的 Swift 包管理器清单文件(
Package.swift
),这样使用 SDK 的应用程序就不需要下载整个源版本库来消费二进制目标。 -
您将看到关于要安装 SDK 哪个版本的仓库规则。选择第一个规则 版本,并选择 更新主版本(Up to Next Minor),因为它将使用从
main
分支检测到的最新兼容版本依赖。然后点击 下一步。注意: AWS Mobile SDK for iOS 不使用语义版本,可能在次要版本发布中引入破坏性 API 变更。我们建议将 版本 规则设置为 更新主版本(Up to Next Minor),并评估次要版本发布以确保与您的应用程序兼容。
-
选择您要添加到项目的库。始终选择 AWSCore SDK。您要安装的其余 SDK 将根据您尝试安装的 SDK 进行调整。大多数 SDK 只依赖于 AWSCore,但有关完整的依赖列表,请参阅 README-spm-support 文件。
注意:由于与已打包的二进制依赖项冲突,当前通过 Swift 包管理器不支持 AWSLex 以
arm64
架构。选择所有合适的选项,然后点击 完成。
您始终可以通过打开项目的 Swift 包选项卡来更改项目中包含哪些 SPM 包:在 Xcode 导航器中点击项目文件,然后点击项目图标,然后选择 Swift 包 选项卡。
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 以包含您想要集成到项目中的 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
>构建
>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版本需要与它相同,否则您必须通过将
--no-use-binaries
标志传递给carthage update
命令,在您的机器上构建框架。
框架
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 的新版本时,您可以按照以下方式获取更改。
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
)。此单例方法创建具有 defaultServiceConfiguration
的服务客户端,您在步骤 5 中设置,并保持对客户端的强引用。
使用 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
)。此单例方法创建具有 defaultServiceConfiguration
的服务客户端,您在步骤 5 中设置,并保持对客户端的强引用。
使用 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
我们建议在发布到苹果 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 文件。