UAAWSSDK 0.6.3

UAAWSSDK 0.6.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released 最后发布2014年12月

Rob Amos维护。



UAAWSSDK 0.6.3

  • 未签名应用程序

AWS SDK for iOS(未签名应用程序版)

这是 AWS iOS SDK for PHP 的 Objective-C 版本移植。它旨在扩大官方 AWS SDK for iOS 的功能覆盖面(最终),并改进响应处理的队列和块的使用。

注意:这是预发布软件,因此可能会做出可能破坏向后兼容性的更改。尤其是,尚未为 EC2 相关对象设置所有枚举。

优势

与官方 AWS SDK for iOS 相比,未签名应用程序版具有以下优势

  • 完全异步,开箱即用。
  • 使用完成块来处理响应和错误,而不是使用代理模式。
  • 强类型 枚举适用于适当的位置,而不是字符串。
  • 整个模型是由 Mantle 衍生物构成的,因此与 NSCopying 和 NSCoding 兼容,并可以轻松地将 JSON 序列化到/从其中。
  • 使用 KissXMLMantleXMLAdapter 的变种,因此可以轻松地将 XML 序列化到/从其中。
  • 基于 NSOperationQueue 和 NSURLSessions 构建,因此您可以使用熟悉的工具控制与 AWS 的通信。

AWS 覆盖范围

目前,我们支持以下 AWS 服务

  • 自动扩展
  • 云监控
  • EC2
  • ELB
  • IAM(官方 SDK 不支持)
  • SNS
  • SQS
  • VPC(官方 SDK 不支持)

我们的目标是支持完整的AWS服务,或者至少如 AWS SDK for PHP 支持,因为所有代码都是从它们的服务定义中生成的。

文档

目前文档很稀少,但将随着时间的推移而完善(也就是说,一旦我们能够找到一种简单的自动化方法)。在此期间,您可以使用官方的 AWS API 文档。

例如,可以找到关于 UAEC2DescribeInstances 用法的文档,在相应的 EC2 API 页面 DescribeInstances 上。使用符号浏览器或自动完成功能查找一些细微的命名差异。

安装

此SDK目前仅支持iOS 7.0以上版本!

您可以选择使用CocoaPods(搜索UAAWSSDK)进行安装,或者将其克隆到您自己的工作区。

建议您仅导入您想使用的服务,而不是整个SDK。

#import <UAAWSSDK/UAAutoScaling.h>
#import <UAAWSSDK/UACloudWatch.h>
#import <UAAWSSDK/UAEC2.h>
#import <UAAWSSDK/UAELB.h>
#import <UAAWSSDK/UAIAM.h>
#import <UAAWSSDK/UASNS.h>

当然,如果您喜欢,也可以导入全部

#import <UAAWSSDK/UAAWSSDK.h>

通过CocoaPods安装时,您可以使用子规范将安装限制为特定服务

platform :ios, '7.0'

pod 'UAAWSSDK/EC2'
pod 'UAAWSSDK/CW'

身份验证和区域选择

与以往一样,您需要知道您的访问密钥和秘密密钥才能使用此SDK。同样,您需要选择一个区域来定位您的请求(否则我们默认为US-East-1)。您可以按请求提供它们

UAEC2DescribeInstancesRequest *request = [[UAEC2DescribeInstancesRequest alloc] init];
[request setUA_Credentials:[[UAAWSCredentials alloc] initWithAccessKey:@"xxx" secretKey:@"yyy"]];
[request setUA_Region:UAAWSRegionAPSoutheast2];

或者,创建一个小型身份验证代理并向UAAWSOperationQueue提供

MyAuthProvider.h

#import <UAAWSSDK/UAAWSOperationAuthenticationDelegate.h>

@interface MyAuthProvider : NSObject <UAAWSOperationAuthenticationDelegate>

@end

MyAuthProvider.m

#import "MyAuthProvider.h"

@implementation MyAuthProvider

- (UAAWSCredentials *)credentialsForRequest:(UAAWSRequest *)request
{
    return [[UAAWSCredentials alloc] initWithAccessKey:@"xxx" secretKey:@"yyy"];
}

- (UAAWSRegion)regionForRequest:(UAAWSRequest *)request
{
    return UAAWSRegionAPNortheast1;
}

@end

然后在您的代码中

[[UAAWSOperationQueue sharedInstance] setDelegate:[[MyAuthProvider alloc] init]];

UAAWSOperationQueue会强引用其身份验证代理,因此您不需要这样做。

执行请求

要针对AWS API执行请求,您只需创建它们,然后调用它们即可。

UAEC2DescribeInstancesRequest *request = [[UAEC2DescribeInstancesRequest alloc] init];
[request invoke];

当然,这样会丢弃输出,您将不知道发生了什么。首选的方法是使用所有者和完成块调用

UAEC2DescribeInstancesRequest *request = [[UAEC2DescribeInstancesRequest alloc] init];
[request invokeWithOwner:self completionBlock:^(UAEC2DescribeInstancesResponse *response, NSError *error) {
    if (error != nil) {
        // your error handling here.
    }
    else {
        // success code.
    }
}];

一切都是强类型的,因此响应对象上的属性将正好是API返回的内容。有关所有者参数的说明,请参阅以下注意事项。

当然,如果您想要完全控制,还有一个执行请求的最终方法。如果您检查每个请求对象,例如UAEC2DescribeInstancesRequest,则继承看起来像这样:UAEC2DescribeInstancesRequest > UAEC2Request > UAAWSRequest > NSOperation。

所有请求都将扩展NSOperation,因此您可以将其直接添加到此SDK提供的单例队列

[[UAAWSOperationQueue sharedInstance] addRequest:request];

或添加到您自己的NSOperationQueue中,如果您愿意。 注意:虽然从理论上讲这是可能的,但它大部分未经测试。UAAWSRequest类依赖于UAAWSOperationQueue实例的一些功能。

请求所有权

对AWS API的一些请求可能持续时间较长,或需要时间才能执行。我们建议为每个请求指定所有者对象,通过-setUA_Owner:或-invokeWithOwner:completionBlock:。

将维护请求所有者的弱引用,并允许您取消不再需要的操作

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[UAAWSOperationQueue sharedInstance] cancelAllRequestsForOwner:self];
}

这在取消活跃请求特别有效,当您的视图控制器不再可用以使用它们时,或在许多其他对象的-dealloc中。

等待器

AWS SDK for PHP的一个出色功能是等待器概念。在此SDK中,等待器是一个将在特定条件发生之前等待并通知您的完成块的请求。

通过API在AWS中进行的所有更改都不会立即发生。例如,停止EC2实例或创建实例的EC2镜像需要时间。在此SDK中,您可以使用-waitWithOwner:untilValueAtKeyPath:isInArray:completionBlock:让SDK为您轮询API,直到满足条件。注意:等待请求不会阻塞其他请求,将创建副本并将其传递给主线程的NSTimer,以在配置的间隔将其重新插入队列。

例如,在响应一个UAEC2StartInstancesRequest请求时,您可以使用UAEC2DescribeInstancesRequest等待该实例达到“运行”状态。

UAEC2DescribeInstancesRequest *request = [[UAEC2DescribeInstancesRequest alloc] init];
[request addInstanceID:@"i-12345678"];
[request waitWithOwner:self
   untilValueAtKeyPath:@"[email protected][email protected]"
             isInArray:@[ @(UAEC2InstanceStateRunning) ]
       completionBlock:^(UAEC2DescribeInstancesResponse *response, NSError *error)
{
    if (error != nil) {
        // do something with the error
    }
    else {
        // do something with the instance
    }
}];

请求将应用指定的keyPath到UAEC2DescribeInstancesResponse对象上,并将结果与提供的NSArray进行比较。如果keyPath返回的任何值在NSArray中发现,或在任何时刻发生错误,它将调用completionBlock当前响应。

您还可以直接在请求上设置UA_ShouldContinueWaiting属性,并提供一个自行定义的block来确定请求是否应该等待或不等待(返回YES继续等待,NO完成)。

请求属性

UAAWSRequest上有很多属性,您可以在请求中设置

UA_Owner

拥有此请求的对象。它也可以通过-invokeWithOwner:completionBlock:-waitWithOwner:untilValueAtKeyPath:isInArray:completionBlock:来设置。维持对象的一个弱引用。

您可以使用所有者通过[[UAAWSOperationQueue sharedInstance] cancelAllRequestsWithOwner:obj]取消特定批次请求。更多信息请参见请求所有权部分。

UA_Credentials

用于对AWS API请求进行签名的凭据。将其设置为UAAWSCredentials实例以设置特定请求的凭据。

如果UA_Credentials为nil,当UAAWSOperationQueue尝试连接时,它会询问其delegate凭据。委托应实现<UAAWSOperationAuthenticationDelegate>

UA_Region

您想为此请求连接的区域。将其设置为UAAWSRegion枚举值之一。

如果UA_Region设置为UAAWSRegionUnknown,当UAAWSOperationsQueue尝试连接时,它会询问其delegate区域。委托应实现<UAAWSOperationAuthenticationDelegate>

注意:一些服务(如IAM)是全球性的,而不是特定区域性的。对于这些服务,SDK将忽略UA_Region的值,并将连接默认回UAAWSRegionUSEast1

UA_RequestCompletionBlock

当操作完成时将被执行的block。通常通过-invokeWithOwner:completionBlock:-waitWithOwner:untilValueAtKeyPath:isInArray:completionBlock:设置,但如果您的代码直接将请求添加到NSOperationQueue,则您可能希望显式地在该请求上设置它。

UAAWSOperationCompletionBlock(及其同类)有两个参数:一个UAAWSResponse子类(response)和一个NSError(error)。在成功请求的情况下,response参数将非nil,而error为nil。如果发生错误,则response将nil且error非nil。

块不应该返回任何内容。

UA_ShouldContinueWaiting

用于确定此请求是否应继续等待的block。

UAAWSOperationQueueShouldContinueWaitingBlock(及其同类)有两个参数:一个UAAWSResponse子类(response)和一个NSError(error)。在成功请求的情况下,response参数将非nil,而error为nil。如果发生错误,则response将nil且error非nil。

块应该返回YES以继续等待请求,否则返回NO

支持

AWS SDK for iOS(未签名应用版)以开源方式提供,不提供任何保证和支持。尽最大努力处理在GitHub(https://github.com/unsignedapps/ua-aws-sdk-ios/issues)上提出的问题

您可以发送邮件至作者github username.com。其中github username应从本仓库的URL中获知(https://github.com/unsignedapps/ua-aws-sdk-ios)。

贡献

欢迎所有贡献并深表感激。值得注意的是,SDK中有99%是代码生成的,而生成器尚未成为本仓库的一部分。如果您发现需要修复的项目,可能更容易由我修复生成器并重新生成,至少直到生成器在GitHub上发布。

许可

AWS SDK for iOS在MIT许可下发布。详见LICENSE文件。