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 仓库 中创建一个 issue,我们会很乐意考虑您的请求。
如果您仍然希望直接使用 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。我们在单独的存储库中维护此库的 Swift 包管理器清单文件(
Package.swift
),以便使用 SDK 的应用程序不需要下载整个源代码库即可使用二进制目标。 -
您将看到选择哪种 SDK 版本以使 Swift 包管理器进行安装的存储库规则。选择第一个规则 版版,并将之子 selects the rule Up to Next Minor,因为它将从
main
分支检测到的最新兼容版本使用依赖,然后点击 下一步。注意: iOS AWS 移动 SDK 不 使用语义版本控制,并在小版本发布中可能引入破坏性的 API 更改。我们建议将您的 版版 规则设置为 Up to Next Minor 并评估小版本发布以确保它们与您的应用程序兼容。
-
选择您想要添加到项目中的库。始终选择 AWSCore SDK。要安装剩余的 SDK 取决于您要安装的 SDK。大多数 SDK 只依赖于 AWSCore,但有关完整的依赖列表,请参阅 README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,AWSLex 目前不支持 Swift 包管理器中的
arm64
架构。选择所有适当的选项,然后点击 完成。
您始终可以通过打开项目的 Swift 包标签来修改项目中包含的 SPM 包:在 Xcode 导航器中单击 Project 文件,然后单击您的项目图标,然后选择 Swift Packages 标签。
CocoaPods
-
iOS AWS 移动 SDK 通过 CocoaPods 提供。如果您还没有安装 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
有关我们 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
注:目前,iOS版本的AWS SDK使用最新发布的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
)。此单例方法创建一个具有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的日志级别是累加的,这意味着当级别设置为详细时,所有低于详细的级别消息都会被记录。还可以设置自定义日志以满足您的需求。更多详细信息请参阅CocoaLumberjack
更改日志级别
Swift
AWSDDLog.sharedInstance.logLevel = .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的其他用户联系。
作者
亚马逊网络服务
许可
更多信息请查看_LICENSE文件。