AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,用于使用 AWS 构建连接的移动应用程序。
我们推荐使用 AWS Amplify Library for Swift 的最新 v2 版本来快速实现常见应用用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 的 idiomatic 模式,如 async/await。
注意:目前为 GA 的 Amplify Library for Swift 的 v2 版本(目前在开发者预览中)是在 AWS SDK for Swift 的基础上构建的,并且 仅 提供对 AWS SDK for Swift 的访问,该 SDK 目前处于开发者预览中。您可以通过 AWS Amplify 的 Escape Hatch 访问此基础 SDK。
您可以访问 Amplify Library for Swift 文档 了解有关所有功能的更多信息。您还可以使用 AWS Amplify 与 您现有的 AWS 云资源 一起使用。如果您在 Amplify 中找不到所需的功能,请 在 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包管理器GitHub仓库的URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
)输入搜索栏,然后单击“下一步”。注意:此URL不是SDK的主要URL。为了确保使用该SDK的应用程序不需要下载整个源存储库以使用二进制目标,我们维护此库的Swift包管理器清单文件(
Package.swift
),并将其存储在单独的存储库中。 -
您将看到针对您希望 Swift Package Manager 安装的 SDK 版本的存储库规则。选择第一个规则 版本,并选择 直到下一个次要版本,因为这将使用可以从
main
分支检测到的最新兼容依赖项版本,然后单击 下一步。注意:适用于 iOS 的 AWS Mobile SDK 不使用语义版本控制,可能在次要版本发布中引入破坏性 API 更改。我们建议将您的 版本 规则设置为 直到下一个次要版本,并评估次要版本发布以确保它们与您的应用程序兼容。
-
选择您想要添加到项目的库。始终选择 AWSCore SDK。要安装的其他 SDK 将取决于您要安装的 SDK。大多数 SDK 只依赖于 AWSCore,但要查看完整依赖项列表,请参阅 README-spm-support 文件。
注意:由于与打包二进制依赖项冲突,AWSLex 目前不支持通过 Swift Package Manager 在
arm64
架构中。选择所有适当的选项,然后单击 完成。
您始终可以通过打开项目的 Swift 包选项卡来修改项目中包含的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击项目的图标,然后选择 Swift 包 选项卡。
CocoaPods
-
适用于 iOS 的 AWS Mobile SDK 通过 CocoaPods 提供。如果您尚未安装 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
要查看我们提供的所有 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
推荐使用 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 版本必须相同;否则,您必须在您的机器上通过将
--no-use-binaries
标志传递给carthage update
命令来自定义构建框架。
框架
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
)。此单例方法使用您在第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的日志级别是累加的,这意味着当级别设置为verbose时,所有低于verbose级别的消息都会被记录。还可以设置自定义日志以满足您的需求。更多信息请参阅CocoaLumberjack
更改日志级别
Swift
AWSDDLog.sharedInstance.logLevel = .verbose
以下日志级别选项可用
.off
.error
.warning
.info
.debug
.verbose
Objective-C
[AWSDDLog sharedInstance].logLevel = AWSDDLogLevelVerbose;
以下日志级别选项可用
AWSDDLogLevelOff
AWSDDLogLevelError
AWSDDLogLevelWarning
AWSDDLogLevelInfo
AWSDDLogLevelDebug
AWSDDLogLevelVerbose
我们建议在发布到苹果应用商店之前将日志级别设置为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的其他用户建立联系。
作者
亚马逊网络服务
许可协议
有关更多信息,请参阅LICENSE文件。