AWS SDK for iOS
AWS SDK for iOS 提供了图书馆和文档,供开发者使用 AWS 构建连接型移动应用程序。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现身份验证、存储、推送通知等常见应用程序用例,这些用例遵循 Swift 的模式,如 async/await。
注意:Swift Amplify Library 的 v2 版本(目前处于GA状态)基于 AWS SDK for Swift 构建,并且仅提供对 AWS SDK for Swift 的访问,目前处于开发者预览状态。您可以通过 AWS Amplify 的 Escape Hatch 访问此基础 SDK。
您可以去 Swift Amplify Library 的文档 了解更多功能信息。您还可以使用 AWS Amplify 与 您现有的 AWS 云资源 一起使用。如果 Amplify 中找不到您正在寻找的功能,请在 Swift Amplify Library 的 GitHub 仓库 中创建一个问题,我们将很乐意考虑您的请求。
如果仍然希望直接使用 AWS SDK for iOS,请参阅此处 AWS SDK 文档 AWS SDK Documentation here 并按照以下设置说明执行。您还可以查看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的应用程序就不必下载整个源代码仓库,以消耗二进制目标。 -
您将看到哪些SDK版本的仓库规则。选择第一条规则,版本,并选择 Next Minor,它将使用从
main
分支可检测到的最新兼容版本,然后单击 Next。注意: AWS Mobile SDK for iOS 不使用语义化版本管理,并在次要版本发布时可能会引入破坏性的API更改。我们建议将您的版本规则设置为“至下一个次要版本”,并评估次要版本更新以确保与您的应用程序兼容。
-
选择您想在项目中添加的库。始终选择AWSCore SDK。要安装的其他 SDK 将根据您尝试安装的 SDK 类型而变化。大多数 SDK 仅依赖 AWSCore,但对于完整的依赖列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖冲突,Swift Package Manager currently 不支持通过 AWSLex 在
arm64
架构上。选择所有相关选项,然后点击完成。
您可以通过打开项目的Swift Packages标签来随时修改项目中的SPM包:在Xcode导航器中单击项目文件,然后单击您的项目图标,然后选择“Swift Packages”标签。
CocoaPods
-
AWS Mobile SDK for iOS 可通过CocoaPods获取。如果您尚未安装CocoaPods,请运行以下命令安装CocoaPods:
$ gem install cocoapods $ pod setup
根据系统设置,您可能需要使用
sudo
来安装 cocoa pods,如下所示:$ sudo gem install cocoapods $ pod setup
-
在您的项目目录中(存储您的
*.xcodeproj
文件的目录),运行以下命令以在项目中创建一个Podfile
:$ pod init
-
编辑 podfile 以包含您希望集成到项目中的 pod。例如,如果您需要身份验证,可以使用 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
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。
不推荐的带有“fat库”的框架
为了构建具有多个架构的平台的框架包,请使用以下方法(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版本需要与之相同,否则您需要通过传递到
carthage update
命令的--no-use-binaries
标志在您的机器上构建框架。
框架
XCFramework 设置
从 AWS SDK iOS 版本 2.22.1 开始,SDK 二进制文件以 XCFramework 的形式发布。按照以下步骤安装 XCFramework:
- 下载最新的 SDK:[链接](https://releases.amplify.aws/aws-sdk-ios/latest/aws-ios-sdk.zip)。旧版本的 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,请使用此链接 [href](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
文件,并选择它们。在提示时,选择 Destination: 如果需要则复制项目 复选框。为您的特定用例添加所需的框架。例如,如果您正在使用 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
-
你想要在Swift文件中使用SDK时,为你要使用的服务导入适当的头文件。头文件导入约定是
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
开源贡献
我们欢迎社区提供任何形式的贡献!在提交任何Pull Request之前,请务必阅读我们的贡献指南这里。谢谢!<3
联系我们
访问我们的GitHub 问题 页面,留下反馈并与SDK的用户交流。
作者
亚马逊网络服务(Amazon Web Services)
许可证
请查看 LICENSE 文件以获取更多信息。