AWS SDK for iOS
AWS SDK for iOS 为开发者提供库和文档,用于使用 AWS 构建连接型移动应用程序。
我们建议使用最新的 AWS Amplify Library for Swift 的 v2 版本,快速实现身份验证、存储、推送通知等常见应用程序用例,这些用例遵循 Swift 的范式,如 async/await。
注意:Swift Amplify Library 的 v2(目前为 GA)建立在 AWS SDK for Swift 之上,仅提供对 AWS SDK for Swift 的访问,该SDK目前处于开发预览阶段。您可以通过 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 SDK for iOS,请查看iOS开发者指南。您可以设置SDK并开始创建新项目,或者将SDK集成到现有项目中。您还可以运行示例来了解SDK的工作原理。
要使用AWS SDK for iOS,您需要在您的开发机器上安装以下内容
- Xcode 11.0或更高版本
- iOS 9或更高版本
将SDK for iOS集成到现有应用程序中
我们有一些示例应用程序,展示了如何使用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包管理器应该安装哪个版本的仓库规则。选择第一个规则,即版本,并选择直到下一个次要版本,因为它将使用从《main》分支检测到的最新兼容版本,然后点击下一步。
注意: AWS Mobile SDK for iOS 不使用语义版本控制,在次要版本发布中可能会引入破坏性的API更改。我们建议将您的版本规则设置为上限为下一个次要版本,并进行次要版本发布评估以确保与您的应用程序兼容。
-
选择您想将哪些库添加到项目中。始终选择AWSCore SDK。要安装的其余SDK将取决于您试图安装的SDK。大多数SDK仅依赖于AWSCore,但要获取完整的依赖列表,请参阅README-spm-support文件。
注意:由于与打包的二进制依赖项冲突,通过Swift Package Manager不支持AWSLex用于
arm64
架构。选择所有合适的,然后点击完成。
您始终可以通过打开项目的Swift Packages选项卡来修改项目中包含的SPM包:在Xcode导航器中点击项目文件,然后点击项目图标,然后选择Swift Packages选项卡。
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
-
在您的 目标 中的 构建阶段 选项卡下,单击左上角的 + 按钮,然后选择 新 Run Script 阶段。然后将构建阶段设置如下。确保此阶段在
嵌入框架
阶段之下。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。旧版本的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
-
在您的 目标 中的 构建阶段 选项卡下,单击左上角的 + 按钮,然后选择 新 Run Script 阶段。然后将构建阶段设置如下。确保此阶段在
嵌入框架
阶段之下。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
注意:如果您遇到问题,您可以删除
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的日志级别是可累加的,这意味着当将级别设置为详细时,所有低于详细级别的消息都将被记录。也可以设置自定义日志以满足您的需求。有关更多信息,请参阅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
开源贡献
我们欢迎社区的所有贡献!在提交任何Pull请求之前,请确保您已经阅读了我们的贡献指南此处。谢谢!<3
联系我们
访问我们的GitHub 问题,留下反馈并与SDK的其他用户交流。
作者
亚马逊网络服务
许可证
更多信息请参阅 LICENSE 文件。