AWS SDK for iOS
AWS SDK for iOS为开发者提供库和文档,用于构建与AWS连接的移动应用程序。
我们建议使用最新的AWS Amplify Library for Swift的v2版本来快速实现常见的应用场景,如身份验证、存储、推送通知等,这些场景遵循Swift的异步/等待等Swift模式。
注意:Swift版本2的Amplify Library(目前为GA)建立在AWS SDK for Swift之上,并且仅提供访问AWS SDK for Swift,目前处于开发者预览版。您可以通过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的工作方式。
要在您的开发机器上使用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
并在您的应用程序代码中使用它们,无需使用
AWSMobileClient.default().initialize()
let locationClient = AWSLocation.default()
Swift Package Manager
-
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 的主 URL。我们维护该库的 Swift 包管理器清单(
Package.swift
文件)在一个单独的仓库中,以便使用 SDK 的应用程序不需要下载整个源代码仓库,以便消耗二进制目标。 -
您将看到适合您想要 Swift 包管理器安装的 SDK 版本的仓库规则。选择第一个规则版本,并选择次低版本,因为它将使用可从 main 分支检测到的依赖关系兼容的最新版本,然后单击 下一步。
注意:AWS Mobile SDK for iOS 不使用语义版本控制,并且在较小版本的发布中可能会引入破坏 API 的更改。我们建议将您的版本规则设置为< stranger>次低版本,并评估小版本发布以确保它们与您的应用程序兼容。
-
选择要添加到项目中的库。始终选择 AWSCore SDK。要安装的其余 SDK 将取决于您要安装的 SDK。大多数 SDK 只依赖于 AWSCore,但有关完整依赖列表,请参阅 README-spm-support 文件。
注意:由于与打包的二进制依赖项冲突,AWSLex 目前不支持通过 Swift 包管理器在
arm64
架构下使用。选择所有合适的选项,然后单击 完成。
您始终可以通过打开项目的 Swift 包选项卡来修改项目中的 SPM 包。在 Xcode 导航器中单击项目文件,然后单击项目图标,然后选择 Swift 包 选项卡。
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 以包括要集成到项目中的 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 二进制文件以 XCFramework 的形式发布。按照以下步骤安装 XCFramework。
- 下载最新的 SDK:[最新 SDK](https://releases.amplify.aws/aws-sdk-ios/latest/aws-ios-sdk.zip)。旧版本的 SDK 可从 [https://releases.amplify.aws/aws-sdk-ios/aws-ios-sdk-#.#.#.zip](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](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](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](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
创建服务客户端,并保持对客户端的强引用。
AWS任务操作
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之前将日志级别设置为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 文件。