AWS SDK for iOS
AWS SDK for iOS 为开发者提供了一个库和文档,用于构建与 AWS 连接的移动应用程序。
我们建议使用最新的 v2 版本的 AWS Amplify Library for Swift,以便快速实现认证、存储、推送通知等常见应用用例,以便使用 Swift 的模式,如 async/await。
注意:Swift 的 Amplify Library 版本 2(目前为 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 for iOS SDK,请查看iOS开发者指南。您可以设置SDK并开始构建新项目,或将SDK集成到现有项目中。您还可以运行示例以了解SDK的工作方式。
要使用AWS for iOS SDK,您需要在您的开发机器上安装以下内容
- Xcode 11.0或更高版本
- iOS 9或更高版本
在现有应用程序中包含iOS SDK
我们有一些示例应用程序,展示了如何使用AWS for iOS SDK。请注意,这些示例应用程序中的代码不具备生产质量,应被视为我们所说的“示例”。
有几种方法可以将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
并在应用程序代码中使用没有后缀的。
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 版本的存储库规则。选择第一个规则 版本,并选择 直到下一个 minor 版本,因为它将使用从
main
分支检测到的最新兼容依赖项版本,然后单击 下一步。注意: AWS iOS 移动 SDK 不使用 语义版本控制,并可能在次要版本发布中引入破坏性 API 变更。我们建议将您的 版本 规则设置为 直到下一个 minor 版本 并评估次要版本发布以确保与您的应用程序兼容。
-
选择要添加到您的项目的库。始终选择 AWSCore SDK。要安装的其他 SDK 依据您要安装的 SDK 而定。大多数 SDK 只需要 AWSCore,但要查看完整的依赖项列表,请参阅 README-spm-support 文件。
注意:由于与封装的二进制依赖项冲突,AWSLex 目前不支持通过 Swift Package Manager 使用
arm64
架构。选择所有合适的选项,然后单击 完成。
您可以通过打开项目的 Swift 包 tab 修改项目中包含的 SPM 包:在 Xcode 导航器中单击 Project 文件,然后单击您的项目图标,然后选择 Swift Packages 标签。
CocoaPods
-
通过 CocoaPods 获取 AWS iOS 移动 SDK。如果您尚未安装 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 支持 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
- 在您的应用程序目标的“常规”设置选项卡中,在“嵌入式二进制文件”部分,将您要从磁盘上的 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
-
在您的目标中,在构建阶段标签下,点击左上角的+按钮,然后选择新建运行脚本阶段。然后按照以下设置构建阶段。请确保此阶段位于
框架内嵌
阶段之下。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可以从
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
-
在您的目标中,在构建阶段标签下,点击左上角的+按钮,然后选择新建运行脚本阶段。然后按照以下设置构建阶段。请确保此阶段位于
框架内嵌
阶段之下。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 问题页面,留下反馈并与其他SDK用户建立联系。
作者
Amazon Web Services
许可
更多详情请查看LICENSE文件。