AWS iOS SDK
AWS iOS SDK 提供了一个库和文档,供开发者使用 AWS 建立连接的移动应用程序。
我们建议使用最新的 AWS Amplify Library for Swift 的 v2 版本,以快速实现常见的应用用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 中的 idiomatic like async/await。
注意:Swift Amplify Library 的 v2 版本(目前为 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 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包管理器、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 Package Manager GitHub 仓库 URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
)输入到搜索栏中,然后点击 下一步。注意:这个 URL 不是 SDK 的主 URL。我们在此独立仓库中维护了这个库的 Swift Package Manager 清单文件(
Package.swift
),这样使用 SDK 的应用就无需下载整个源代码仓库,即可使用二进制目标。 -
您将看到 SDK 的版本规则,用于指定 Swift Package Manager 要安装哪个版本。选择第一个规则,即 版本,然后选择 最高下一个次小版本,这将使用从
main
分支检测到的兼容的最新依赖版本,然后点击 下一步。注意:AWS Mobile SDK for iOS 不使用 语义化版本,并且可能在次要版本发布时引入破坏性 API 变化。我们建议将您的 版本 规则设置为 最高下一个次小版本,并评估次要版本发布以确保其与您的应用兼容。
-
选择要添加到项目的库。始终选择 AWSCore SDK。要安装的其他 SDK 将根据您要安装的 SDK 而有所不同。大多数 SDK 仅依赖 AWSCore,但完整的依赖列表,请参见 README-spm-support 文件。
注意:由于与打包的二进制依赖冲突,通过 Swift Package Manager 目前不支持在
arm64
架构下支持 AWSLex。选择所有适当的选项,然后点击 完成。
您可以通过打开项目的 Swift Packages 选项卡,随时返回并修改项目中包含的 SPM 包:在 Xcode 导航器中单击 Project 文件,然后单击项目图标,然后选择 Swift Packages 选项卡。
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
有关我们所有 pods 的完整列表,请参见该项目的根目录中的 .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 开始,不支持使用 XCFrameworks 预编译的二进制文件,如 Carthage 发行说明中所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹拖放您要使用的每个 xcframework。
不建议使用“fat libraries”的框架
要为具有多个架构的二进制文件构建平台特定的框架包(Xcode 11 和以下版本)
-
安装最新的 Carthage 版本 - 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 中,点击 Build Phases 标签页左上角的 + 按钮,然后选择 New Run Script Phase。然后按照以下设置构建阶段。请确保这个阶段位于
Embed Frameworks
阶段之下。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版本可以通过
https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-#.#.#.zip
下载,其中#.#.#
代表版本号。所以,对于2.23.3版本,下载链接是这里。
注意1:如果您使用的是版本 < 2.22.1,请参阅下方的“ Legacy framework setup”部分。注意2:要下载版本 < 2.23.3,请使用此链接
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
- 解压缩ZIP文件
- 在您的应用程序目标的“General settings”标签页中,在“Embedded Binaries”部分,从下载文件夹拖放每个要使用的xcframework。
旧框架配置
- 使用
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
下载所需的SDK,其中#.#.#
代表版本号。所以对于2.10.2版本,下载链接是这里。
注意:如果您使用的是版本 > 2.22.0,请参阅上方的“XCFramework setup”部分。
-
在 Xcode 中打开您的项目后,选择您的 目标。在 通用 选项卡下,找到 嵌入的二进制文件,然后点击 + 按钮。
-
点击 添加其他... 按钮,导航到
AWS<#ServiceName#>.framework
文件并选择它们。在提示时勾选 目的:如有需要,复制项目 复选框。添加您特定用例所需的框架。例如,如果您正在使用 AWSMobileClient 和 AWSPinpoint,则希望添加以下框架AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
在您的 Target 中,点击 Build Phases 标签页左上角的 + 按钮,然后选择 New Run Script Phase。然后按照以下设置构建阶段。请确保这个阶段位于
Embed Frameworks
阶段之下。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
以下是一些日志级别选项:
.关闭
.错误
.警告
.信息
.调试
.详细
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下是一些日志级别选项:
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到Apple App Store之前将日志级别设置为关闭
。
定位日志输出
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 文件。