AWS SDK for iOS
AWS SDK for iOS 为开发者提供了一个库和文档,用于使用 AWS 构建联网的移动应用。
我们推荐使用 AWS Amplify Library for Swift 的最新 v2 版本,以快速实现如身份验证、存储、推送通知等常用应用用例,并遵循 Swift 的 idiomatic 模式如 async/await。
注意:Swift Amplify Library 的 v2 版本(目前为 GA)基于 AWS SDK for Swift 构建,并且 仅 提供对当前处于开发者预览中的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Docking 可能访问此底层 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 Package Manager、Carthage或动态框架),一些模块的名称带有
XCF
后缀,以解决Swift问题。将AWSMobileClient
命名为AWSMobileClientXCF
,将AWSLocation
命名为AWSLocationXCF
。要使用AWSMobileClient
或AWSLocation
SDK,请以如下方式导入
import AWSMobileClientXCF
import AWSLocationXCF
并在您的应用程序代码中使用它,无需使用XCF
后缀。
AWSMobileClient.default().initialize()
let locationClient = AWSLocation.default()
Swift Package Manager
-
Swift Package Manager与Xcode一起分发。要开始将AWS SDK添加到iOS项目,请打开Xcode中的项目,然后选择文件 > Swift Packages > 添加包依赖。
-
将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,预构建的XCFrameworks的二进制文件不支持,如Carthage发行说明中所述 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“常规”设置标签中,在“嵌入的二进制文件”部分,从磁盘上的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
注:目前,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/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 的版本,请使用此链接
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
Framework
-
在 Xcode 的 项目导航器 中,输入 "AWS" 以找到您手动添加到项目中的 AWS Framework 或 XCFramework。选择所有 AWS Framework 并按您的键盘上的 删除 键。然后选择 移动到废纸篓。
-
按照上述安装过程来包含 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 在执行异步操作以避免阻塞 UI 线程时返回 AWSTask
对象。
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 文件。