AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,以使用 AWS 构建连接的移动应用。
我们建议使用 AWS Amplify Library for Swift 的最新版本 v2,以快速实现身份验证、存储、推送通知等通用应用程序用例,这些用例遵循 Swift 的 idiom,例如 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开发者指南。您可以在iOS项目中设置SDK并开始构建新的项目,或者将SDK集成到现有项目中。您还可以运行示例代码来了解SDK的工作原理。
为了使用AWS SDK for iOS,您需要在您的开发机器上安装以下软件:
- Xiode 11.0或更高版本
- iOS 9或更高版本
将SDK集成到现有应用中
我们有一些示例应用,展示了如何使用AWS SDK for iOS。请注意,这些示例应用中的代码不是生产级别的,应被视为我们所说的示例。
有几种方法可以将AWS Mobile SDK for iOS集成到自己的项目中
您应该只使用其中一种方法来导入AWS Mobile SDK。以多种方式导入SDK会在项目中加载重复的SDK副本,并导致编译器/链接器错误。
注意:如果您正在使用XCFrameworks(即Swift Package Manager、Carthage或动态框架),一些模块将在名称后使用
后缀,以解决Swift问题。将
AWSMobileClient
命名为AWSMobileClientXCF
,将AWSLocation
命名为AWSLocationXCF
。要使用AWSMobileClient
或AWSLocation
SDK,请导入它们如下
import AWSMobileClientXCF
import AWSLocationXCF
并在您的应用程序代码中不需要
AWSMobileClient.default().initialize()
let locationClient = AWSLocation.default()
Swift包管理器
-
Swift Package Manager与Xiode一起分发。要将AWS SDK添加到您的iOS项目中,请打开您的项目并将其在Xiode中,然后选择
文件 > 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的版本对应项的仓库规则。选择第一个规则版本,并选择到下一个次要版本,因为它将使用从
main
分支中检测到的最新兼容版本依赖项,然后单击下一步。注意:AWS Mobile SDK for iOS不使用语义版本控制,可能在次要版本发布中引入破坏性API更改。我们建议将版本规则设置为到下一个次要版本,并评估次要版本发布以确保它们与您的应用程序兼容。
-
选择要添加到您项目中的库。始终选择< strongest>AWSCore SDK。要安装的其余SDK将取决于您尝试安装哪个SDK。大多数SDK仅依赖于< strongest>AWSCore,但有关完整的依赖项列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,AWSLex目前通过Swift Package Manager不支持< code>arm64架构。
选择所有合适的项,然后单击完成。
您始终可以通过打开项目的Swift Packages选项卡来修改项目中包含的SPM包:在Xcode导航器中单击项目文件,然后单击项目的图标,然后选择< strong>Swift Packages选项卡。
CocoaPods
-
AWS Mobile SDK for iOS可通过CocoaPods获得。如果您尚未安装CocoaPods,请运行以下命令安装CocoaPods。
$ gem install cocoapods $ pod setup
根据系统设置,您可能需要使用< code>sudo来安装< code>cocoapods,如下所示。
$ sudo gem install cocoapods $ pod setup
-
在项目目录(< code>*.xcodeproj文件所在的目录)中,运行以下命令以在项目中创建< code>Podfile。
$ pod init
-
编辑podfile以包含您想要集成到项目中的库名。例如,如果您需要认证,可以使用AWSMobileClient,如果您需要分析,请添加AWSPinpoint。结果,您的podfile可能如下所示
target 'YourTarget' do
pod 'AWSMobileClient'
pod 'AWSPinpoint'
end
有关我们提供的所有库的完整列表,请参阅此项目根目录中的.podspec文件。
-
然后运行以下命令
$ pod install --repo-update
-
要打开您的项目,使用XCode打开项目目录中的新创建的< code>*.xcworkspace文件。您可以通过在项目文件夹中执行以下命令来完成此操作
$ xed .
注意:< strong>不要使用< code>*.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 预编译的二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用目标的“通用”设置标签页中,在“已包含的二进制文件”部分,从磁盘上的 Carthage/Build 文件夹中拖放您想要使用的每个 xcframework。
不建议使用包含“fat libraries”的框架
为了构建具有多个架构的二进制文件的特定平台框架包(Xcode 11 及以下版本)
-
安装最新版本的 Carthage - https://github.com/Carthage/Carthage#installing-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)。旧版本 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,请参考下面的 "Legacy framework setup" 部分。注意2:要下载版本 < 2.23.3,请使用此链接
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
- 解压缩 ZIP 文件
- 在应用程序目标的 "General" 设置选项卡中,在 "Embedded Binaries" 部分,从下载文件夹中拖放您希望使用的每个 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
)。此单例方法使用您在第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
以下列出可用的日志级别选项
.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之前,请确保阅读我们的贡献指南[这里](./CONTRIBUTING.md)。谢谢!<3
联系我们
访问我们的GitHub Issues,留下反馈并与SDK的其他用户建立联系。
作者
亚马逊网络服务
认订
更多信息请参阅 认订 文件。