AWS SDK for iOS
AWS SDK for iOS 为开发者提供了库和文档,使他们能够使用 AWS 开发连接型移动应用程序。
特性/API
- 认证:为希望创建用户认证体验的开发者提供 API 和构建块。
- 分析:轻松收集您应用的分析数据。分析数据包括用户会话以及其他您想在应用中跟踪的自定义事件。
- API:在制作 HTTP 请求时提供简单解决方案。它提供与 AWS Signature Version 4 兼容的自动、轻量级签名过程。
- 存储:提供了对公共、受保护或私有存储桶中您应用程序用户内容的简单管理机制。
- 推送通知:允许您使用 Amazon Pinpoint 目标和活动管理支持将推送通知集成到您的应用中。
- Pub/Sub:提供与云托管的消息导向中间件的连接。
- 生成的 AWS 服务接口:提供与任何 AWS 服务直接交互的能力。
网站了解更多关于Amplify框架的信息。
访问我们的设置
要开始使用AWS SDK for iOS,请参阅iOS开发者指南。您可以设置SDK并开始构建新项目,或将其集成到现有项目中。您还可以运行示例,以了解SDK的工作方式。
要使用AWS SDK for iOS,您需要在您的开发机器上安装以下内容
- Xcode 11.0或更高版本
- 大多数SDK需要iOS 8或更高版本。AWSCognitoAuth,AWSMobileClient和AWSTranscribeStreaming需要iOS 9。
将SDK for iOS集成到现有应用程序中
我们有一些示例应用程序,展示了如何使用AWS SDK for iOS。请注意,这些示例应用程序中的代码不是生产质量的,应被视为我们称之为“示例”的真正内容。
有三种方法可以将AWS Mobile SDK for iOS集成到您的项目中
您应该使用其中一种方法来导入AWS Mobile SDK。以多种方式导入SDK会在项目中加载SDK的重复副本,并导致编译器/链接器错误。
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
-
安装最新版本的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
命令来在您的机器上构建框架。
框架
-
下载最新的SDK。旧版本的SDK可以从
https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-#.#.#.zip
下载,其中#.#.#
代表版本号。因此,对于2.10.2版本,下载链接是https://sdk-for-ios.amazonwebservices.com/aws-ios-sdk-2.10.2.zip。 -
在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 框架。手动选择所有 AWS 框架,然后在键盘上按下 删除。然后选择 移动到垃圾桶。如果您遵循上面使用的示例,该示例使用 AWSMobileClient 和 AWSPinpoint,您将删除
AWSAuthCore.framework
AWSCognitoIdentityProvider.framework
AWSCognitoIdentityProviderASF.framework
AWSCore.framework
AWSMobileClient.framework
AWSPinpoint.framework
-
按照上述安装过程来包含 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 import AWSCognito
-
调用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; @import AWSCognito;
-
调用AWS服务。
AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager]; AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new]; uploadRequest.bucket = yourBucket; uploadRequest.key = yourKey; uploadRequest.body = yourDataURL; uploadRequest.contentLength = [NSNumber numberWithUnsignedLongLong:fileSize]; [[transferManager upload:uploadRequest] continueWithBlock:^id(AWSTask *task) { // Do something with the response return nil; }];
注意:大部分服务客户端类都有一个单例方法来获取默认客户端。命名约定为+ defaultSERVICENAME
(例如,上面的代码片段中的+ defaultS3TransferManager
)。这个单例方法使用你在步骤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
我们建议在发布到Apple App Store之前,将日志级别设置为Off
。
针对日志输出
CocoaLumberjack可以将日志 направить в文件 или использоваться как Bibliothека, интегрирующаяся с консолью 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的其他用户建立联系。
作者
Amazon Web Services
许可协议
更多信息请参阅 LICENSE 文件。