AWS SDK for iOS
iOS AWS SDK 为开发者提供了一个库和文档,以便他们可以使用 AWS 建立联机移动应用程序。
我们建议您使用最新版本的 AWS Amplify Library for Swift,以快速实现常见的应用程序用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 的习惯用法,如 async/await。
注意:AWS Amplify Library for Swift 的 v2 版本(目前为 GA)是建立在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 仓库 中提出问题,我们会高兴地考虑您的请求。
如果您仍然希望直接使用 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 Package Manager GitHub仓库的URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
)并点击下一步。注意:此URL不是SDK的主要URL。我们维护此库的Swift Package Manager清单文件(
Package.swift
)在单独的仓库中,这样使用该SDK的应用程序不需要下载整个源代码仓库即可使用二进制目标。 -
您将看到指示您想要Swift Package Manager安装的SDK版本的仓库规则。选择第一个规则版本,并选择直到下一个小版本,因为这将使用
main
分支中可以检测到的最新兼容版本,然后点击下一步。注意:AWS Mobile SDK for iOS不使用语义版本控制,并且可能在次要版本发布中引入破坏性API更改。我们建议将您的版本规则设置为直到下一个小版本,并评估次要版本发布以确保它们与您的应用兼容。
-
选择您想要添加到项目中的库。始终选择AWSCore SDK。要安装的其余SDK取决于您要安装的SDK。大多数SDK仅依赖于AWSCore,但有关完整依赖关系列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,AWSLex目前不支持通过Swift Package Manager对
arm64
架构的支持。选择所有适当的选项,然后点击完成。
您始终可以返回并通过打开项目中的Swift Packages选项卡来修改包含在您的项目中的SPM包:在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以包含您要集成到项目中的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,由于Carthage发行说明中提到 - https://github.com/Carthage/Carthage/releases/tag/0.37.0,不支持使用XCFrameworks预构建的二进制文件
- 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘上的Carthage/Build文件夹中拖入您想要使用的每个xcframework。
不建议使用“胖库”框架
为了构建具有多种体系结构的二进制文件的平台特定框架包(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 版本需要与之相同;否则,您必须通过在
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 中打开您的项目后,选择您的 目标。在 常规 选项卡下,找到 嵌入的二进制文件,然后单击 + 按钮。
-
单击 添加其他... 按钮,导航到
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
更改日志级别
Cocoa
AWSDDLog.sharedInstance.logLevel = .verbose
以下是一些可用的日志级别选项
.关闭
.错误
.警告
.信息
.调试
.详细
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下是一些可用的日志级别选项
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到 Apple App Store 之前将日志级别设置为 关闭
。
定位日志输出
CocoaLumberjack 可以将日志输出到文件,也可以作为一个与 Xcode 控制台集成的框架使用。
要初始化将日志输出到文件的日志记录,请使用以下代码
Cocoa
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 控制台的日志记录,请使用以下代码
Cocoa
AWSDDLog.add(AWSDDTTYLogger.sharedInstance) // TTY = Xcode console
Objective-C
[AWSDDLog addLogger:[AWSDDTTYLogger sharedInstance]]; // TTY = Xcode console
开源贡献
我们欢迎任何形式来自社区的贡献!在提交任何PR之前,请确保阅读我们的贡献指南这里。谢谢!<3
联系我们
访问我们的GitHub 问题页面反馈意见并与其他SDK用户交流。
作者
亚马逊网络服务
许可协议
更多信息请参阅 LICENSE 文件。