AWS SDK for iOS
AWS SDK for iOS 为开发者提供了使用 AWS 构建连接移动应用的库和文档。
我们建议使用 AWS Amplify Library for Swift 的最新 v2 版本,以便快速实现常见的应用用例,例如身份验证、存储、推送通知等,这些用例遵循 Swift 的泛型模式,如 async/await。
注意:Swift Amplify Library 的 v2 版本(目前为通用版)建立在 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 iOS SDK,请查看iOS开发者指南。您可以为新的项目设置SDK并开始构建,也可以将SDK集成到现有的项目中。您还可以运行示例以了解SDK的工作方式。
要使用AWS iOS SDK,您需要在您的开发机器上安装以下内容
- Xcode 11.0或更高版本
- iOS 9或更高版本
将iOS SDK包含到现有应用程序中
我们有一些示例应用程序,展示了如何使用AWS iOS SDK。请注意,这些示例应用程序中的代码不是生产级别的,应被视为我们所称的示例。
有几种方法可以集成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 Packages > 添加包依赖。
-
在搜索栏中输入AWS SDK for iOS Swift Package Manager GitHub仓库的URL(
https://github.com/aws-amplify/aws-sdk-ios-spm
),然后点击下一步。注意:此URL不是SDK的默认URL。我们在这个单独的仓库中维护了此库的Swift包管理器清单文件(
Package.swift
),以便使用SDK的应用程序不需要下载整个源代码库就可以消费二进制目标。 -
您将看到关于SDK版本和Swift Package Manager需要安装的存储库规则的说明。选择第一条规则《版本》,并选择《至下一个小版本》,因为它将使用从
main
分支可以检测到的最新的兼容依赖版本,然后点击《下一步》。**注意:** iOS版的AWS Mobile SDK 不使用语义版本控制,可能在小版本发布时引入破坏性的API更改。我们建议将您的《版本》规则设置为《至下一个小版本》,并评估小版本发布以确保它们与您的应用程序兼容。
-
选择要将哪些库添加到项目中。始终选择《AWSCore》SDK。要安装的其余SDK将根据您尝试安装哪个SDK而变化。大多数SDK只依赖于《AWSCore》,但关于完整的依赖列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,通过Swift Package Manager不支持AWSLex存在于《
arm64
》架构中。选择所有合适的选项,然后点击《完成》。
您总可以通过打开项目中的Swift Packages标签来修改项目中包含哪个SPM包:在Xcode导航器中点击项目文件,然后点击您的项目图标,然后选择《Swift Packages》标签。
CocoaPods
-
iOS版的AWS Mobile SDK通过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 二进制文件以 XCFrameworks 的形式发布。按照以下步骤进行安装 XCFramework。
- 下载 最新 SDK。 older 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
Frameworks
-
在 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步中设置的服务配置的客户端,并保持对客户端的强引用。
使用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
我们在发布到苹果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
开源贡献
欢迎社区的所有贡献!在提交任何Pull Request之前,请确保阅读我们的贡献指南这里。谢谢!<3
联系我们
访问我们的GitHub 问题 留言反馈并与其他SDK用户交流。
作者
Amazon Web Services
许可
查看更多详细信息,请参阅 LICENSE 文件。