AWS SDK for iOS
AWS SDK for iOS为开发者提供库和文档,以便使用AWS构建连接的移动应用程序。
功能/API
- 身份验证:为希望创建用户身份验证体验的开发者提供API和构建模块。
- 分析:轻松收集您的应用程序中的分析数据。分析数据包括用户会话和其他您想在应用程序中跟踪的自定义事件。
- API:在执行HTTP请求时提供简单解决方案。它提供一个符合AWS签名版本4的自动、轻量级签名过程。
- 存储:提供了用于在公共、受保护或私有存储桶中管理您的应用程序内容的简单机制。
- 推送通知:允许您通过Amazon Pinpoint定向和活动管理支持,在应用程序中集成推送通知。
- PubSub:提供了与基于云的消息导向中间件连接性。
- 生成的AWS服务接口:提供直接与任何AWS服务交互的能力。
网站,了解更多关于 Amplify 框架的信息。
访问我们的设置
要开始使用 AWS SDK for iOS,请查看 iOS 开发者指南。您可以选择设置 SDK 并开始构建新项目,或者在现有项目中集成 SDK。您还可以运行示例,以了解 SDK 的工作方式。
要使用 AWS SDK for iOS,您需要在您的开发机器上安装以下内容
- Xcode 11.0 或更高版本
- 大多数 SDK 需要 iOS 8 或更高版本。AWSCognitoAuth、AWSMobileClient 和 AWSTranscribeStreaming 需要 iOS 9。
将 iOS SDK 包含在现有应用程序中
我们有一些示例应用程序,展示了如何使用 AWS SDK for iOS。请注意,这些示例应用程序中的代码不是生产级别的,应当被视为我们所说的“示例”。
有三种方法可以集成 AWS Mobile SDK for iOS 到您自己的项目中
您应该使用其中的一种方法来导入 AWS Mobile SDK。以多种方式导入 SDK 会在项目中加载重复的 SDK,并导致编译器/链接器错误。
CocoaPods
-
AWS Mobile SDK for iOS 通过 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
有关我们提供的所有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版本必须相同;否则,您必须通过向“carthage update”命令传递
--no-use-binaries
标志在您的机器上构建框架。
框架
-
下载最新的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可以将日志直接写入文件,或者作为一个与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》文件。