AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,以使用 AWS 构建可连接的移动应用程序。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以便快速实现类似于 Authentication、存储、推送通知等常见应用程序用例,这些用例遵循 Swift 中的异步/等待等 Swift 语言的模式。
注意:当前处于 GA 状态的 AWS Amplify Library for Swift 的 v2(目前处于开发者预览状态)建立在 AWS SDK for Swift 之上,并且 **仅** 提供对 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的逃生舱访问此底层 SDK。
您可以通过访问 AWS Amplify Library for Swift 文档 了解所有功能的详细信息。您还可以使用 AWS Amplify 与 您现有的 AWS 云资源 一起使用。如果在 Amplify 中找不到您想要的特性,请在本 AWS Amplify Library for Swift 的 GitHub 仓库中 提出一个 issue,我们将很高兴考虑您的请求。
如果您仍然希望直接使用 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 Package Manager
-
Swift Package Manager 与 Xcode 一起分发。要将 AWS SDK 添加到您的 iOS 项目中,请打开您的项目,然后在 Xcode 中选择 文件 > Swift Packages > 添加包依赖。
-
在搜索栏中输入 AWS SDK for iOS Swift Package Manager GitHub 仓库的 URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
),然后单击 下一步。注意: 此 URL 不是 SDK 的主 URL。我们在此独立仓库中维护 Swift Package Manager 的清单文件(
Package.swift
),以便使用 SDK 的应用程序无需下载整个源代码库即可消耗二进制目标。 -
您将看到用于安装 SDK 的版本的仓库规则。选择第一个规则,版本,并选择 下一个次要版本,因为它将使用从
main
分支检测到的最新兼容版本,然后单击 下一步。注意: iOS AWS 移动 SDK 不使用语义版本控制,并在次要版本发布中可能会引入破坏性 API 更改。我们建议将您的 版本 规则设置为 下一个次要版本 并评估次要版本发布以确保它们与您的应用程序兼容。
-
选择您要添加到项目中的库。始终选择 AWSCore SDK。要安装的其他 SDK 将根据您试图安装的 SDK 而变化。大多数 SDK 仅依赖于 AWSCore,但有关完整的依赖列表,请参阅 README-spm-support 文件。
注意:由于与封装的二进制依赖项冲突,当前无法通过 Swift Package Manager 支持使用 AWSLex 的
arm64
架构。选择所有合适的,然后单击 完成。
您始终可以通过打开项目的 Swift 包管理器选项卡来修改项目中包含的包:在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
CocoaPods
-
iOS AWS 移动 SDK 通过 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
有关我们所有 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 (recommended)
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 构建的预构建二进制文件,如 Carthage 发布说明中所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标“通用”设置标签页下,在“嵌入的二进制文件”部分,将想使用的每个 xcframework 从磁盘上的 Carthage/Build 文件夹拖放到此处。
含有“fat libraries”的框架(不推荐)
为了构建包含多个架构的二进制文件的特定平台框架包(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
-
在使用 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,请参阅下面的“旧框架设置”部分。注意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 中打开您的项目后,选择您的 Target。在 常规 选项卡下,找到 嵌入式二进制文件 并点击 + 按钮。
-
点击 添加其他... 按钮,导航到
AWS<#服务名称#>.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 的日志级别是累积的,这意味着当设置为详细级时,详细级别以下的所有消息都会被记录。还可以设置自定义日志以满足您的需求。有关更多信息,请参阅 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 Issues 留下反馈并与SDK的其他用户建立联系。
作者
亚马逊网络服务
许可证
更多信息请参阅《LICENSE》文件。