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 的逃生舱访问此基础 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的多个副本并导致编译器/链接器错误。
注意:如果您正在使用XCFramework(即Swift Package Manager、Carthage或动态框架),某些模块以
XCF
后缀命名以解决Swift问题。AWSMobileClient
被命名为AWSMobileClientXCF
,而AWSLocation
被命名为AWSLocationXCF
。要使用AWSMobileClient
或AWSLocation
SDK,请按以下方式导入它们
import AWSMobileClientXCF
import AWSLocationXCF
并在没有使用后缀的情况下将其用于您的应用程序代码中。
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的官方网站。我们为了使使用SDK的应用程序无需下载整个源代码仓库,专门在一个独立的仓库中维护了此库的Swift Package Manager清单文件(
Package.swift
)。 -
您将看到用于指定您要安装哪个版本的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,请运行以下命令安装:
$ gem install cocoapods $ pod setup
根据您的系统设置,您可能需要使用
sudo
来安装cocoapods
,如下:$ sudo gem install cocoapods $ pod setup
-
在您的项目目录中(包含您的
*.xcodeproj
文件的目录),运行以下命令,为您的项目创建一个Podfile
。$ pod init
-
编辑Podfile以包含您希望集成到项目中的库。例如,如果您需要认证,您可以使用AWSMobileClient,如果您需要分析,您添加AWSPinpoint。这样,您的Podfile可能看起来如下:
target 'YourTarget' do
pod 'AWSMobileClient'
pod 'AWSPinpoint'
end
有关我们所有库的完整列表,请查看此项目根目录下的.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发行说明中所述,不支持使用XCFrameworks预构建的二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标的“通用”设置选项卡中,在“嵌入的二进制文件”部分,将您想使用的每个xcframework从磁盘上的Carthage/Build文件夹拖动并放下。
带有“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
-
在您的 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 版本需要相同,否则您必须通过传递
--no-use-binaries
标志到carthage update
命令在您的设备上构建框架。
框架
设置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,下载链接是 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 中打开您的项目后,选择您的 Target。在 General 选项卡下,找到 Embedded Binaries 并单击 + 按钮。
-
点击 添加其他... 按钮,导航到
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
以下记录级别选项可供使用
.off
.error
.warning
.info
.debug
.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用户交流。
作者
亚马逊网络服务
许可证
有关更多信息,请参阅许可证文件。