AWS SDK for iOS
AWS SDK for iOS 为开发者提供了库和文档,以便使用 AWS 构建连接的移动应用程序。
我们建议使用最新版的 AWS Amplify Library for Swift,以便快速实现常见的应用用例,如身份验证、存储、推送通知等,这些用例遵循 Swift 的 idiomatic 模式,例如 async/await。
注意:Swift Amplify 库的 v2 版本(目前为 GA)基于 AWS SDK for Swift 构建,并且 仅 提供对正在开发者预览中的 AWS SDK for Swift 的访问。您可以通过 AWS Amplify 的 Escape Hatch 访问此底层 SDK。
您可以在 Swift Amplify 库文档 中了解更多所有功能的信息。您也可以使用 AWS Amplify 与 现有的 AWS 云资源。如果您在 Amplify 中找不到所需的功能,请打开一个Swift Amplify 库的 GitHub 仓库中的问题,我们很乐意考虑您的请求。
如果您仍然希望直接使用 AWS SDK for iOS,您可以参考此处 AWS SDK 文档并按照以下设置说明进行操作。您还可以查看 AWS SDK for iOS 样例仓库中的示例应用程序。
设置
要开始使用 AWS SDK for iOS,请查看iOS 开发者指南。您可以使用 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 包管理器与 Xcode 一起分发。要将 AWS SDK 添加到您的 iOS 项目中,请在 Xcode 中打开您的项目,并选择 文件 > Swift 包 > 添加包依赖。
-
将 iOS Swift 包管理器 AWS SDK GitHub 仓库的 URL(《https://github.com/aws-amplify/aws-sdk-ios-spm》)输入到搜索栏,然后点击 下一步。
注意:此 URL 不是 SDK 的主 URL。我们在这个分开的仓库中维护该库的 Swift 包管理器清单文件(《Package.swift》),以便使用 SDK 的应用无需下载整个源仓库即可消耗二进制目标。
-
您将看到用于安装 SDK 版本的仓库规则。选择第一个规则 版本,然后选择 直到下一个次要版本,因为它将使用从《main》分支检测到的最新兼容版本,然后点击 下一步。
注意:AWS Mobile SDK for iOS 不使用语义版本,可能在次要版本发布中引入破坏性的 API 变更。我们建议将您的 版本 规则设置为 直到下一个次要版本,并评估次要版本发布以确保它们与您的应用程序兼容。
-
选择要添加到您项目中的库。始终选择 AWSCore SDK。要安装的其余 SDK 将根据您尝试安装的 SDK 而变化。大多数 SDK 只依赖于 AWSCore,但为了获取完整的依赖项列表,请参阅README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,Swift 包管理器目前不支持为
arm64
架构使用 AWSLex。选择所有合适的选项,然后点击 完成。
您可以通过打开您的项目的 Swift 包选项卡来随时返回并修改项目中包含的 SPM 包:在 Xcode 导航器中单击项目文件,然后单击您的项目图标,然后选择 Swift 包 选项卡。
CocoaPods
-
AWS Mobile SDK for iOS 可通过 CocoaPods 获得。如果您还没有安装 CocoaPods,请运行以下命令来安装:
$ gem install cocoapods $ pod setup
根据您的系统设置,您可能需要在安装
cocoapods
时使用sudo
,如下所示:$ 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 版本,由于 Carthage 发布说明中提到的问题,不支持使用 XCFrameworks 的预构建二进制文件 - https://github.com/Carthage/Carthage/releases/tag/0.37.0
- 在您的应用程序目标“常规”设置选项卡中,在“嵌入的二进制文件”部分,从磁盘中的 Carthage/Build 文件夹拖拽每个您想使用的 xcframework 到此处。
不推荐的包含“fat libraries”的 Frameworks
为了构建具有多个架构的二进制文件的特定平台框架捆绑包(Xcode 11 及以下版本):
-
安装最新的 Carthage 版本 - Carthage。
-
将以下内容添加到您的
Cartfile
文件中:github "aws-amplify/aws-sdk-ios"
-
然后运行以下命令:
$ carthage update
-
在 Xcode 中打开您的项目后,选择您的 Target。在 常规 选项卡下,找到 框架、库和嵌入内容,然后单击 + 按钮。
-
单击 其他... 按钮,然后在弹出菜单中选择 “添加文件...”,然后导航到
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/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
)。此单例方法使用 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 对异步操作返回 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
我们建议在发布到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的其他用户建立联系。
作者
亚马逊网络服务公司
许可协议
更多信息请参阅 LICENSE 文件。