AWS SDK for iOS
AWS SDK for iOS 提供了库和文档,供开发者使用 AWS 构建连接型移动应用程序。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现常见的应用程序用例,如身份验证、存储、推送通知等,这些功能符合 Swift 的模式,如 async/await。
注意:目前处于 GA 状态的 v2 版本 Amplify Library for Swift 建立在 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 SDK for iOS,请参阅iOS 开发者指南。您可以设置 SDK 并开始构建一个新项目,或者您可以在现有项目中集成 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 包管理器、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的应用程序无需下载整个源代码库即可使用二进制目标。 -
您将看到Swift包管理器为所需的SDK版本定义的仓库规则。请选择第一条规则,即版本,并选择最高到下一个次要版本,因为它将使用从
main
分支可以检测到的最新兼容版本的依赖项,然后单击下一步。注意: AWS Mobile SDK for iOS 不使用语义版本控制,并且可能在次要版本发布中引入破坏性的API更改。我们建议将您的版本规则设置为最高到下一个次要版本,并评估次要版本发布以确保它们与您的应用程序兼容。
-
选择要添加到项目中的库。始终选择AWSCore SDK。要安装的其他SDK将根据您要安装的SDK而有所不同。大多数SDK仅依赖于AWSCore,但要查看完整的依赖项列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,AWSLex目前不支持通过Swift包管理器使用
arm64
架构。选择所有适当的选项,然后单击完成。
您可以随时返回并修改项目中的SPM包,方法是通过打开项目的Swift包选项卡:在Xcode导航器中单击项目文件,然后单击项目图标,然后选择Swift Packages选项卡。
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以包含要集成到项目中的库。例如,如果您需要身份验证,则可以使用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 消费 iOS AWS SDK
-
安装 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 拖放到应用目标中。
不推荐使用“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
注意:目前,iOS AWS SDK 使用最新发布的 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 到新版本
当 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
我们建议在发布到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的用户交流。
作者
亚马逊网络服务
许可
更多详情请参阅 LICENSE 文件。