要开始使用 AWS SDK for iOS,您可以设置 SDK 并开始构建一个新项目,或者您可以将 SDK 集成到现有项目中。您还可以运行示例以了解 SDK 的工作方式。
AWS Mobile SDK for iOS 支持以下软件版本
您可以查看 SDK 源代码。
示例应用程序是独立项目,已经为您设置好了。您还可以将 iOS SDK 集成到现有应用程序中。如果您有一个现有应用程序并希望在其中使用 AWS,有两种方法可以将 AWS Mobile SDK for iOS 导入到您的项目中
从我们的 AWS Mobile SDK 页面下载 SDK。SDK 存储在一个名为 aws-ios-sdk-#.#.#
的压缩文件存档中(其中 #.#.#
代表版本号,因此对于版本 2.0.0,文件名是 aws-ios-sdk-2.0.0
)。
注意:AWSiOSSDKv2.framework 的大小 > 65MB;然而,当将其导入到项目中时,它不会将 > 65MB 添加到应用程序的二进制文件中,因为
只有您在应用程序中使用的对象才包含在框架中的您的应用程序二进制文件中
AWSiOSSDKv2.framework 包含一个静态库,库中的目标代码在构建时合并到您的应用程序二进制文件中。当不使用 -ObjC
和 -all_load
链接器标志时,Xcode 足够智能,可以确定框架中哪些对象对您的应用程序是必要的,并仅包含那些对象。AWSiOSSDKv2.framework 是打包好的,因此您不需要包含这些链接器标志。(如果您正在使用需要您包含 -ObjC
或 -all_load
链接器标志的第三方框架,您可以使用 -force_load
代替包含这些框架。)
例如,如果您的应用程序仅使用Amazon DynamoDB,而不使用其他支持的服务,则这些服务的目标代码将不包括在您的应用程序中。除非您使用框架中的所有对象,否则只包含框架代码的一部分。
框架包含五种架构,而设备上的应用程序最多需要三种。
我们目前针对iOS的AWS Mobile SDK编译了五种架构:armv7
、armv7s
、arm64
、i386
和x86_64
。如果您想优化应用程序以适应iPhone 6和iPhone 5S等64位设备,您需要使用支持arm64
的工具来构建应用程序。AWS移动SDK对iOS支持的32位iOS设备使用armv7
和armv7s
架构。
64位iPhone模拟器使用x86_64
,32位模拟器使用i386
,因为它们在Mac上运行。为了开发者能够在模拟器上使用我们的框架进行测试,我们支持这些架构。这些架构对于测试是必不可少的,但对于App Store中的应用程序是不必要的。即使您使用了AWS Mobile SDK中的所有对象,提交给苹果的应用程序也永远不会包含框架中大约五分之一的代码。
App Store上的应用程序已经被压缩。
在将您的应用程序提交给苹果后,它将加密以进行DRM(数字版权管理)目的,并重新压缩,从而进一步降低文件大小。
在Xcode中打开您的项目,按住Control并点击框架,然后点击将文件添加到 "<项目名称>"...。
在Finder中导航到AWS<服务名称#>.framework
文件并选择它们。
AWSCore.framework
AWSAutoScaling.framework
AWSCloudWatch.framework
AWSDynamoDB.framework
AWSEC2.framework
AWSElasticLoadBalancing.framework
AWSIoT.framework
AWSKinesis.framework
AWSLambda.framework
AWSMachineLearning.framework
AWSMobileAnalytics.framework
AWSS3.framework
AWSSES.framework
AWSSimpleDB.framework
AWSSNS.framework
AWSSQS.framework
打开您项目的目标,选择构建阶段,展开将二进制文件与库链接,点击+按钮,并添加libsqlite3.tbd
、libz.tbd
、CFNetwork.framework
、Security.framework
、SystemConfiguration.framework
和UIKit.framework
。
当我们推出SDK的新版本时,您可以按照以下描述获取更改。
在Xcode中选择以下框架,然后按键盘上的删除。然后选择移动到垃圾桶。
AWSCore.framework
AWSAutoScaling.framework
AWSCloudWatch.framework
AWSDynamoDB.framework
AWSEC2.framework
AWSElasticLoadBalancing.framework
AWSIoT.framework
AWSKinesis.framework
AWSLambda.framework
AWSMachineLearning.framework
AWSMobileAnalytics.framework
AWSS3.framework
AWSSES.framework
AWSSimpleDB.framework
AWSSNS.framework
AWSSQS.framework
AWSCognito.framework
按照上述安装过程包含SDK的新版本。
iOS 9的发布包括可能影响您的应用程序与某些AWS服务交互方式的变化。如果您使用苹果的iOS 9 SDK(或Xcode 7)编译应用程序,苹果的App Transport Security (ATS)功能可能会影响应用程序连接到某些AWS服务端点的功能。为了确保受影响的应用程序能够继续成功连接到AWS端点,您需要配置它们以通过在您的info.plist
文件中添加这些属性与苹果的ATS进行正确交互。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>amazonaws.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>amazonaws.com.cn</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
如果您受此问题影响,要详细了解如何识别和解决该问题,请按照以下链接中的说明操作:AWS 开发者指南。
使用 Xcode 创建一个 Objective-C 桥接头文件。
在桥接头中,导入您所使用的服务的相应标头。头文件导入约定是 #import <AWSServiceName/AWSServiceName.h>
,例如以下示例:
#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>
#import <AWSDynamoDB/AWSDynamoDB.h>
#import <AWSSQS/AWSSQS.h>
#import <AWSSNS/AWSSNS.h>
#import <AWSCognito/AWSCognito.h>
从 您的目标 > 构建设置 > Objective-C 桥接头,将 Objective-C 桥接头 指向您刚刚创建的桥接头。
通过在 application:didFinishLaunchingWithOptions:
应用程序代理方法中添加以下代码片段来创建默认服务配置。
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: CognitoRegionType,
identityPoolId: CognitoIdentityPoolId)
let configuration = AWSServiceConfiguration(
region: DefaultServiceRegionType,
credentialsProvider: credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
调用 AWS 服务。
let dynamoDB = AWSDynamoDB.defaultDynamoDB()
let listTableInput = AWSDynamoDBListTablesInput()
dynamoDB.listTables(listTableInput).continueWithBlock{ (task: AWSTask!) -> AnyObject? in
if let error = task.error {
print("Error occurred: \(error)")
return nil
}
let listTablesOutput = task.result as AWSDynamoDBListTablesOutput
for tableName : AnyObject in listTablesOutput.tableNames {
print("\(tableName)")
}
return nil
}
注意:大多数服务客户端类都有一个单例方法来获取默认客户端。命名约定是 + defaultSERVICENAME
(例如,在上面的代码片段中为 + defaultDynamoDB
)。该单例方法使用步骤 5 中设置的 defaultServiceConfiguration
创建服务客户端,并保持对客户端的强引用。
在应用程序代理中导入 AWSCore 头文件。
#import <AWSCore/AWSCore.h>
通过在 application:didFinishLaunchingWithOptions:
应用程序代理方法中添加以下代码片段来创建默认服务配置。
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:CognitoRegionType
identityPoolId:CognitoIdentityPoolId];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType
credentialsProvider:credentialsProvider];
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
导入您所使用的服务的相应标头。头文件导入约定是 #import <AWSServiceName/AWSServiceName.h>
,例如以下示例。
#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>
#import <AWSDynamoDB/AWSDynamoDB.h>
#import <AWSSQS/AWSSQS.h>
#import <AWSSNS/AWSSNS.h>
#import <AWSCognito/AWSCognito.h>
调用 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
创建服务客户端,并保持对客户端的强引用。
在 iOS SDK 中支持本机 AWSTask,您可以对异步请求进行链式调用而不是嵌套。这样可以使逻辑更清晰,同时使代码更具可读性。阅读这篇博客文章来学习如何使用 AWSTask。
在开发过程中更改日志级别可能会使调试更轻松。您可以导入 AWSCore.h 并调用来更改日志级别。
Swift
AWSLogger.defaultLogger().logLevel = .Verbose
以下日志级别选项可供使用
.None
.Warn
.Info
.Debug
.Verbose
Objective-C
[AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose;
以下日志级别选项可供使用
AWSLogLevelNone
AWSLogLevelError
(这是默认值。只有错误日志会被打印到控制台。)AWSLogLevelWarn
AWSLogLevelInfo
AWSLogLevelDebug
AWSLogLevelVerbose
AWS SDK for iOS 包含示例应用,展示了常见用例。
此示例演示了如何通过包括 Facebook、Google 和登录 Amazon 在内的登录提供程序安全地管理和同步您的移动应用程序数据以及创建唯一身份。
此示例演示了如何使用 DynamoDB 对象映射器插入/更新/删除/查询项。
此示例演示了如何使用 S3 转发管理器同时上传/下载多个文件。它还展示了如何暂停、恢复和取消文件的上传/下载。
此示例演示了如何使用 Amazon S3 预签名 URL 构建器在后台下载/上传文件。
此示例演示了如何设置 Amazon SNS 移动推送并使用 Amazon 移动分析记录事件。
此示例演示了如何使用 AWS IoT 发布和订阅数据。
此示例演示了使用 Cognito 身份验证访问设备阴影;它与 AWS IoT JavaScript SDK for Embedded Devices 中的温度控制示例程序协同工作。
aws iOS SDK 压缩文件包含 DocSets 格式的文档,您可以在 Xcode 中查看。安装文档最简单的方法是使用 Mac OS X 终端。
打开 Mac OS X 终端,然后转到包含展开存档的目录。例如
$ cd ~/Downloads/aws-ios-sdk-2.0.0
注意:请记得将上面的示例中的 2.0.0 替换为您下载的实际 AWS SDK for iOS 版本号。
创建一个名为 ~/Library/Developer/Shared/Documentation/DocSets
的目录
$ mkdir -p ~/Library/Developer/Shared/Documentation/DocSets
将 Documentation/com.amazon.aws.ios.docset
从 SDK 安装文件复制(或移动)到您在上一步中创建的目录
$ mv Documentation/com.amazon.aws.ios.docset ~/Library/Developer/Shared/Documentation/DocSets/
如果在进行此过程时 Xcode 已在运行,请重新启动 Xcode。要浏览文档,请转到 帮助,点击 文档和API参考,然后选择 AWS SDK for iOS v2.0 文档(这里的 '2.0' 是适当的版本号)。
访问我们的 GitHub 问题,留下反馈并与 SDK 的其他用户建立联系。
亚马逊网络服务
AWS Mobile SDK for iOS 在 Apache 许可证下可用。有关更多信息,请参阅 LICENSE 文件。