Ben Copsey

Refactor: move multipart form stuff into subclass

Added iphone example
//
// ASIFormDataRequest.h
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import "ASIHTTPRequest.h"
@interface ASIFormDataRequest : ASIHTTPRequest {
//Parameters that will be POSTed to the url
NSMutableDictionary *postData;
//Files that will be POSTed to the url
NSMutableDictionary *fileData;
}
#pragma mark setup request
//Add a POST variable to the request
- (void)setPostValue:(id)value forKey:(NSString *)key;
//Add the contents of a local file as a POST variable to the request
- (void)setFile:(NSString *)filePath forKey:(NSString *)key;
@end
... ...
//
// ASIFormDataRequest.m
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import "ASIFormDataRequest.h"
@implementation ASIFormDataRequest
#pragma mark init / dealloc
- (id)initWithURL:(NSURL *)newURL
{
self = [super initWithURL:newURL];
postData = nil;
fileData = nil;
return self;
}
- (void)dealloc
{
[postData release];
[fileData release];
[super dealloc];
}
#pragma mark setup request
- (void)setPostValue:(id)value forKey:(NSString *)key
{
if (!postData) {
postData = [[NSMutableDictionary alloc] init];
}
[postData setValue:value forKey:key];
}
- (void)setFile:(NSString *)filePath forKey:(NSString *)key
{
if (!fileData) {
fileData = [[NSMutableDictionary alloc] init];
}
[fileData setValue:filePath forKey:key];
}
#pragma mark request logic
// Create the request
- (void)main
{
// If the user didn't specify post data, we will let ASIHTTPRequest use the value of postBody
if ([postData count] == 0 && [fileData count] == 0) {
[super main];
return;
}
//Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.
NSString *stringBoundary = @"0xKhTmLbOuNdArY";
if ([fileData count] > 0) {
//We need to use multipart/form-data when using file upload
[self addRequestHeader:@"Content-Type" value:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]];
}
//Since we've got post data, let's set the post body to an empty NSMutableData object
[self setPostBody:[NSMutableData data]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//Adds post data
NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding];
NSEnumerator *e = [postData keyEnumerator];
NSString *key;
int i=0;
while (key = [e nextObject]) {
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]];
i++;
if (i != [postData count] || [fileData count] > 0) { //Only add the boundary if this is not the last item in the post body
[postBody appendData:endItemBoundary];
}
}
//Adds files to upload
NSData *contentTypeHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding];
e = [fileData keyEnumerator];
i=0;
while (key = [e nextObject]) {
NSString *filePath = [fileData objectForKey:key];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:contentTypeHeader];
[postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]];
i++;
if (i != [fileData count]) { //Only add the boundary if this is not the last item in the post body
[postBody appendData:endItemBoundary];
}
}
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//Now we've created our post data, construct the request
[super main];
}
@end
... ...
... ... @@ -10,11 +10,9 @@
// Portions are based on the ImageClient example from Apple:
// See: http://developer.apple.com/samplecode/ImageClient/listing37.html
#import <Cocoa/Cocoa.h>
#import "ASIProgressDelegate.h"
@interface ASIHTTPRequest : NSOperation {
//The url for this operation, should include GET params in the query string where appropriate
... ... @@ -23,11 +21,11 @@
//The delegate, you need to manage setting and talking to your delegate in your subclasses
id delegate;
//Parameters that will be POSTed to the url
NSMutableDictionary *postData;
//HTTP method to use (GET / POST / PUT / DELETE). Defaults to GET
NSString *requestMethod;
//Files that will be POSTed to the url
NSMutableDictionary *fileData;
//Request body
NSMutableData *postBody;
//Dictionary for custom HTTP request headers
NSMutableDictionary *requestHeaders;
... ... @@ -138,11 +136,6 @@
//Add a custom header to the request
- (void)addRequestHeader:(NSString *)header value:(NSString *)value;
//Add a POST variable to the request
- (void)setPostValue:(id)value forKey:(NSString *)key;
//Add the contents of a local file as a POST variable to the request
- (void)setFile:(NSString *)filePath forKey:(NSString *)key;
#pragma mark get information about this request
... ... @@ -259,4 +252,6 @@
@property (retain) NSMutableData *receivedData;
@property (retain) NSDate *lastActivityTime;
@property (assign) NSTimeInterval timeOutSeconds;
@property (retain) NSString *requestMethod;
@property (retain) NSMutableData *postBody;
@end
... ...
... ... @@ -38,10 +38,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
- (id)initWithURL:(NSURL *)newURL
{
[super init];
self = [super init];
[self setRequestMethod:@"GET"];
lastBytesSent = 0;
postData = nil;
fileData = nil;
username = nil;
password = nil;
requestHeaders = nil;
... ... @@ -72,19 +71,24 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
CFRelease(request);
}
[self cancelLoad];
[postBody release];
[requestCredentials release];
[error release];
[postData release];
[fileData release];
[requestHeaders release];
[requestCookies release];
[downloadDestinationPath release];
[outputStream release];
[username release];
[password release];
[domain release];
[authenticationRealm release];
[url release];
[authenticationLock release];
[lastActivityTime release];
[responseCookies release];
[receivedData release];
[responseHeaders release];
[requestMethod release];
[super dealloc];
}
... ... @@ -100,23 +104,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
}
- (void)setPostValue:(id)value forKey:(NSString *)key
{
if (!postData) {
postData = [[NSMutableDictionary alloc] init];
}
[postData setValue:value forKey:key];
}
- (void)setFile:(NSString *)filePath forKey:(NSString *)key
{
if (!fileData) {
fileData = [[NSMutableDictionary alloc] init];
}
[fileData setValue:filePath forKey:key];
}
#pragma mark get information about this request
- (BOOL)isFinished
... ... @@ -145,15 +132,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
- (void)main
{
complete = NO;
// We'll make a post request only if the user specified post data
NSString *method = @"GET";
if ([postData count] > 0 || [fileData count] > 0) {
method = @"POST";
}
// Create a new HTTP request.
request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)method, (CFURLRef)url, kCFHTTPVersion1_1);
request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)requestMethod, (CFURLRef)url, kCFHTTPVersion1_1);
if (!request) {
[self failWithProblem:[NSString stringWithFormat:@"Unable to create request for: %@",url]];
return;
... ... @@ -166,9 +147,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
[ASIHTTPRequest setSessionCredentials:nil];
}
}
//Set your own boundary string only if really obsessive. We don't bother to check if post data contains the boundary, since it's pretty unlikely that it does.
NSString *stringBoundary = @"0xKhTmLbOuNdArY";
//Add cookies from the persistant (mac os global) store
if (useCookiePersistance) {
... ... @@ -200,48 +178,11 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
for (header in requestHeaders) {
CFHTTPMessageSetHeaderFieldValue(request, (CFStringRef)header, (CFStringRef)[requestHeaders objectForKey:header]);
}
CFHTTPMessageSetHeaderFieldValue(request, (CFStringRef)@"Content-Type", (CFStringRef)[NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]);
if ([postData count] > 0 || [fileData count] > 0) {
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//Adds post data
NSData *endItemBoundary = [[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding];
NSEnumerator *e = [postData keyEnumerator];
NSString *key;
int i=0;
while (key = [e nextObject]) {
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[postData objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]];
i++;
if (i != [postData count] || [fileData count] > 0) { //Only add the boundary if this is not the last item in the post body
[postBody appendData:endItemBoundary];
}
}
//Adds files to upload
NSData *contentTypeHeader = [[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding];
e = [fileData keyEnumerator];
i=0;
while (key = [e nextObject]) {
NSString *filePath = [fileData objectForKey:key];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",key,[filePath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:contentTypeHeader];
[postBody appendData:[NSData dataWithContentsOfMappedFile:filePath]];
i++;
if (i != [fileData count]) { //Only add the boundary if this is not the last item in the post body
[postBody appendData:endItemBoundary];
}
}
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
// Set the body.
//If this is a post request and we have data to send, add it to the request
if ([self postBody]) {
CFHTTPMessageSetBody(request, (CFDataRef)postBody);
postLength = [postBody length];
}
... ... @@ -887,4 +828,6 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy
@synthesize receivedData;
@synthesize lastActivityTime;
@synthesize timeOutSeconds;
@synthesize requestMethod;
@synthesize postBody;
@end
... ...
... ... @@ -5,7 +5,6 @@
// Copyright 2008 All-Seeing Interactive. All rights reserved
//
#import <Cocoa/Cocoa.h>
@protocol ASIProgressDelegate
... ...
... ... @@ -5,7 +5,6 @@
// Copyright 2008 All-Seeing Interactive Ltd. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@class ASIHTTPRequest;
@interface AppDelegate : NSObject {
... ...
... ... @@ -7,6 +7,7 @@
#import "AppDelegate.h"
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
@implementation AppDelegate
... ... @@ -26,7 +27,7 @@
- (IBAction)simpleURLFetch:(id)sender
{
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://asi/"]] autorelease];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/"]] autorelease];
//Customise our user agent, for no real reason
[request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"];
... ... @@ -165,7 +166,7 @@
[networkQueue cancelAllOperations];
[progressIndicator setDoubleValue:0];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease];
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease];
[request setDelegate:self];
[request setUploadProgressDelegate:progressIndicator];
[request setPostValue:@"test" forKey:@"value1"];
... ...
//
// FirstViewController.h
// tabtest
//
// Created by Ben Copsey on 07/11/2008.
// Copyright All-Seeing Interactive 2008. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
}
@end
... ...
//
// FirstViewController.m
// tabtest
//
// Created by Ben Copsey on 07/11/2008.
// Copyright All-Seeing Interactive 2008. All rights reserved.
//
#import "FirstViewController.h"
@implementation FirstViewController
/*
// Override initWithNibName:bundle: to load the view using a nib file then perform additional customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
*/
/*
// Implement loadView to create a view hierarchy programmatically.
- (void)loadView {
}
*/
/*
// Implement viewDidLoad to do additional setup after loading the view.
- (void)viewDidLoad {
[super viewDidLoad];
}
*/
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
- (void)dealloc {
[super dealloc];
}
@end
... ...
//
// main.m
// Mac-Os-Sample-main.m
// asi-http-request
//
// Created by Ben Copsey on 09/07/2008.
... ...
... ... @@ -6,7 +6,6 @@
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface NSHTTPCookie (ValueEncodingAdditions)
... ...
//
// QueueViewController.h
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface QueueViewController : UIViewController {
NSOperationQueue *networkQueue;
IBOutlet UIImageView *imageView1;
IBOutlet UIImageView *imageView2;
IBOutlet UIImageView *imageView3;
IBOutlet UIProgressView *progressIndicator;
}
- (IBAction)fetchThreeImages:(id)sender;
@end
... ...
//
// QueueViewController.m
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import "QueueViewController.h"
#import "ASIHTTPRequest.h"
@implementation QueueViewController
- (void)awakeFromNib
{
networkQueue = [[NSOperationQueue alloc] init];
}
- (IBAction)fetchThreeImages:(id)sender
{
[imageView1 setImage:nil];
[imageView2 setImage:nil];
[imageView3 setImage:nil];
[networkQueue cancelAllOperations];
[progressIndicator setProgress:0];
ASIHTTPRequest *request;
request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/logo.png"]] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(imageFetchComplete:)];
[networkQueue addOperation:request];
request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/trailsnetwork.png"]] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(imageFetchComplete:)];
[networkQueue addOperation:request];
request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/i/sharedspace20.png"]] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(imageFetchComplete:)];
[networkQueue addOperation:request];
}
- (void)imageFetchComplete:(ASIHTTPRequest *)request
{
UIImage *img = [UIImage imageWithData:[request receivedData]];
if (img) {
if ([imageView1 image]) {
if ([imageView2 image]) {
[imageView3 setImage:img];
} else {
[imageView2 setImage:img];
}
} else {
[imageView1 setImage:img];
}
}
[progressIndicator setProgress:[progressIndicator progress]+0.3333];
}
- (void)dealloc {
[networkQueue release];
[super dealloc];
}
@end
... ...
To do:
Rest unit tests (get / post / put /delete)
Changes for release notes:
* Set request method (get,post,delete,put)
* Fixed a few memory leaks (thanks clang static analyser!)
* Split ASIHTTPRequest in two
[NEW!] Documentation is available at: http://allseeing-i.com/asi-http-request
ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier.
... ...
//
// SynchronousViewController.h
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface SynchronousViewController : UIViewController {
IBOutlet UITextView *htmlSource;
}
- (IBAction)simpleURLFetch:(id)sender;
@end
... ...
//
// SynchronousViewController.m
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright 2008 All-Seeing Interactive. All rights reserved.
//
#import "SynchronousViewController.h"
#import "ASIHTTPRequest.h"
@implementation SynchronousViewController
- (IBAction)simpleURLFetch:(id)sender
{
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/"]] autorelease];
//Customise our user agent, for no real reason
[request addRequestHeader:@"User-Agent" value:@"ASIHTTPRequest"];
[request start];
if ([request dataString]) {
[htmlSource setText:[request dataString]];
}
}
@end
... ...
... ... @@ -267,9 +267,10 @@
<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
<array>
<string>29B97314FDCFA39411CA2CEA</string>
<string>B5CFFBCA0EC46DF0009ADE56</string>
<string>B5CFFBC70EC46DDE009ADE56</string>
<string>B5731AF70E430B020008024F</string>
<string>080E96DDFE201D6D7F000001</string>
<string>29B97315FDCFA39411CA2CEA</string>
<string>29B97317FDCFA39411CA2CEA</string>
<string>29B97323FDCFA39411CA2CEA</string>
<string>1058C7A0FEA54F0111CA2CBB</string>
... ... @@ -279,8 +280,8 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>11</integer>
<integer>5</integer>
<integer>21</integer>
<integer>19</integer>
<integer>0</integer>
</array>
</array>
... ... @@ -304,7 +305,7 @@
<real>312</real>
</array>
<key>RubberWindowFrame</key>
<string>227 156 1432 976 0 0 1920 1178 </string>
<string>238 198 1432 976 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
... ... @@ -322,7 +323,7 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20306471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>ASIHTTPRequest.m</string>
<string>NSHTTPCookieAdditions.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
... ... @@ -330,31 +331,41 @@
<key>PBXProjectModuleGUID</key>
<string>1CE0B20406471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
<string>ASIHTTPRequest.m</string>
<string>NSHTTPCookieAdditions.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>B5B297440E7BCD91000B04CD</string>
<string>B5F4C35B0EC47BB200D4F31C</string>
<key>history</key>
<array>
<string>B5731B8B0E4310180008024F</string>
<string>B5731BBE0E4319180008024F</string>
<string>B5731BEE0E431A050008024F</string>
<string>B5731BEF0E431A050008024F</string>
<string>B5F3B7370E43683600E001FD</string>
<string>B567EF5C0E4EE4FC001E238F</string>
<string>B567EF5D0E4EE4FC001E238F</string>
<string>B500B54C0E635A3200744D82</string>
<string>B5CF35640E7A7B2C0050CBA7</string>
<string>B5B2969F0E7BC6C7000B04CD</string>
<string>B5B296BC0E7BC7E3000B04CD</string>
<string>B5B296CC0E7BC846000B04CD</string>
<string>B5B297010E7BCA3D000B04CD</string>
<string>B5B297120E7BCB58000B04CD</string>
<string>B5B297340E7BCD41000B04CD</string>
<string>B5B297350E7BCD41000B04CD</string>
<string>B5B2973E0E7BCD91000B04CD</string>
<string>B5B2973F0E7BCD91000B04CD</string>
<string>B5CFFA620EC46252009ADE56</string>
<string>B5CFFA680EC46252009ADE56</string>
<string>B5CFFAF30EC46616009ADE56</string>
<string>B5CFFB6B0EC468F5009ADE56</string>
<string>B5CFFB6C0EC468F5009ADE56</string>
<string>B5CFFBDB0EC46E83009ADE56</string>
<string>B5F4C1F40EC4725B00D4F31C</string>
<string>B5F4C1F60EC4725B00D4F31C</string>
<string>B5F4C1F70EC4725B00D4F31C</string>
<string>B5F4C1F90EC4725B00D4F31C</string>
<string>B5F4C2270EC473B300D4F31C</string>
<string>B5F4C2AB0EC4778E00D4F31C</string>
<string>B5F4C2AC0EC4778E00D4F31C</string>
<string>B5F4C2AD0EC4778E00D4F31C</string>
<string>B5F4C3120EC479AB00D4F31C</string>
<string>B5F4C3130EC479AB00D4F31C</string>
<string>B5F4C32E0EC47A2500D4F31C</string>
<string>B5F4C3510EC47B3A00D4F31C</string>
<string>B5F4C3520EC47B3A00D4F31C</string>
<string>B5F4C3530EC47B3A00D4F31C</string>
<string>B5F4C3540EC47B3A00D4F31C</string>
<string>B5CFFAEF0EC46616009ADE56</string>
</array>
<key>prevStack</key>
<array>
... ... @@ -371,59 +382,136 @@
<string>B5731BC00E4319180008024F</string>
<string>B5731BF60E431A050008024F</string>
<string>B5731D9B0E433A750008024F</string>
<string>B5F3B7390E43683600E001FD</string>
<string>B567EF630E4EE4FC001E238F</string>
<string>B5B3BC690E62DA0E0071D39F</string>
<string>B5B3BC6C0E62DA0E0071D39F</string>
<string>B5CF356D0E7A7B2C0050CBA7</string>
<string>B5B296A40E7BC6C7000B04CD</string>
<string>B5B296A50E7BC6C7000B04CD</string>
<string>B5B296A60E7BC6C7000B04CD</string>
<string>B5B296A70E7BC6C7000B04CD</string>
<string>B5B296A80E7BC6C7000B04CD</string>
<string>B5B296A90E7BC6C7000B04CD</string>
<string>B5B296AA0E7BC6C7000B04CD</string>
<string>B5B296AB0E7BC6C7000B04CD</string>
<string>B5B296AC0E7BC6C7000B04CD</string>
<string>B5B296AD0E7BC6C7000B04CD</string>
<string>B5B296AE0E7BC6C7000B04CD</string>
<string>B5B296AF0E7BC6C7000B04CD</string>
<string>B5B296B00E7BC6C7000B04CD</string>
<string>B5B296B10E7BC6C7000B04CD</string>
<string>B5B296B20E7BC6C7000B04CD</string>
<string>B5B296BF0E7BC7E3000B04CD</string>
<string>B5B296C00E7BC7E3000B04CD</string>
<string>B5B296C10E7BC7E3000B04CD</string>
<string>B5B296C20E7BC7E3000B04CD</string>
<string>B5B296C30E7BC7E3000B04CD</string>
<string>B5B296C40E7BC7E3000B04CD</string>
<string>B5B296CF0E7BC846000B04CD</string>
<string>B5B296D00E7BC846000B04CD</string>
<string>B5B296D10E7BC846000B04CD</string>
<string>B5B296D20E7BC846000B04CD</string>
<string>B5B296E00E7BC8BA000B04CD</string>
<string>B5B296E10E7BC8BA000B04CD</string>
<string>B5B296E20E7BC8BA000B04CD</string>
<string>B5B296E30E7BC8BA000B04CD</string>
<string>B5B296E40E7BC8BA000B04CD</string>
<string>B5B296EC0E7BC92D000B04CD</string>
<string>B5B296ED0E7BC92D000B04CD</string>
<string>B5B297030E7BCA3D000B04CD</string>
<string>B5B297040E7BCA3D000B04CD</string>
<string>B5B297050E7BCA3D000B04CD</string>
<string>B5B297060E7BCA3D000B04CD</string>
<string>B5B297140E7BCB58000B04CD</string>
<string>B5B297150E7BCB58000B04CD</string>
<string>B5B297280E7BCC8B000B04CD</string>
<string>B5B297370E7BCD41000B04CD</string>
<string>B5B297380E7BCD41000B04CD</string>
<string>B5B297390E7BCD41000B04CD</string>
<string>B5B2973A0E7BCD41000B04CD</string>
<string>B5B2973B0E7BCD41000B04CD</string>
<string>B5B297400E7BCD91000B04CD</string>
<string>B5B297410E7BCD91000B04CD</string>
<string>B5B297420E7BCD91000B04CD</string>
<string>B5B297430E7BCD91000B04CD</string>
<string>B5CFFA6C0EC46252009ADE56</string>
<string>B5CFFA6F0EC46252009ADE56</string>
<string>B5CFFB7B0EC468F5009ADE56</string>
<string>B5CFFBE00EC46E83009ADE56</string>
<string>B5F4C1E10EC471D500D4F31C</string>
<string>B5F4C1E20EC471D500D4F31C</string>
<string>B5F4C1FC0EC4725B00D4F31C</string>
<string>B5F4C1FD0EC4725B00D4F31C</string>
<string>B5F4C1FE0EC4725B00D4F31C</string>
<string>B5F4C1FF0EC4725B00D4F31C</string>
<string>B5F4C2000EC4725B00D4F31C</string>
<string>B5F4C2010EC4725B00D4F31C</string>
<string>B5F4C2020EC4725B00D4F31C</string>
<string>B5F4C2030EC4725B00D4F31C</string>
<string>B5F4C2040EC4725B00D4F31C</string>
<string>B5F4C2050EC4725B00D4F31C</string>
<string>B5F4C2060EC4725B00D4F31C</string>
<string>B5F4C2070EC4725B00D4F31C</string>
<string>B5F4C2080EC4725B00D4F31C</string>
<string>B5F4C2090EC4725B00D4F31C</string>
<string>B5F4C20A0EC4725B00D4F31C</string>
<string>B5F4C20B0EC4725B00D4F31C</string>
<string>B5F4C20C0EC4725B00D4F31C</string>
<string>B5F4C20D0EC4725B00D4F31C</string>
<string>B5F4C20E0EC4725B00D4F31C</string>
<string>B5F4C20F0EC4725B00D4F31C</string>
<string>B5F4C2100EC4725B00D4F31C</string>
<string>B5F4C2110EC4725B00D4F31C</string>
<string>B5F4C21B0EC4729300D4F31C</string>
<string>B5F4C21C0EC4729300D4F31C</string>
<string>B5F4C21D0EC4729300D4F31C</string>
<string>B5F4C22A0EC473B300D4F31C</string>
<string>B5F4C22B0EC473B300D4F31C</string>
<string>B5F4C22C0EC473B300D4F31C</string>
<string>B5F4C22D0EC473B300D4F31C</string>
<string>B5F4C22E0EC473B300D4F31C</string>
<string>B5F4C22F0EC473B300D4F31C</string>
<string>B5F4C2440EC4748700D4F31C</string>
<string>B5F4C2450EC4748700D4F31C</string>
<string>B5F4C2460EC4748700D4F31C</string>
<string>B5F4C2470EC4748700D4F31C</string>
<string>B5F4C2480EC4748700D4F31C</string>
<string>B5F4C2490EC4748700D4F31C</string>
<string>B5F4C24A0EC4748700D4F31C</string>
<string>B5F4C24B0EC4748700D4F31C</string>
<string>B5F4C24C0EC4748700D4F31C</string>
<string>B5F4C24D0EC4748700D4F31C</string>
<string>B5F4C24E0EC4748700D4F31C</string>
<string>B5F4C24F0EC4748700D4F31C</string>
<string>B5F4C2500EC4748700D4F31C</string>
<string>B5F4C2510EC4748700D4F31C</string>
<string>B5F4C2520EC4748700D4F31C</string>
<string>B5F4C2530EC4748700D4F31C</string>
<string>B5F4C25B0EC474B100D4F31C</string>
<string>B5F4C25C0EC474B100D4F31C</string>
<string>B5F4C25D0EC474B100D4F31C</string>
<string>B5F4C25E0EC474B100D4F31C</string>
<string>B5F4C25F0EC474B100D4F31C</string>
<string>B5F4C2600EC474B100D4F31C</string>
<string>B5F4C2610EC474B100D4F31C</string>
<string>B5F4C2620EC474B100D4F31C</string>
<string>B5F4C2630EC474B100D4F31C</string>
<string>B5F4C2640EC474B100D4F31C</string>
<string>B5F4C26D0EC474E200D4F31C</string>
<string>B5F4C2740EC4755300D4F31C</string>
<string>B5F4C2810EC4758800D4F31C</string>
<string>B5F4C2820EC4758800D4F31C</string>
<string>B5F4C28B0EC475C200D4F31C</string>
<string>B5F4C28C0EC475C200D4F31C</string>
<string>B5F4C2910EC475D400D4F31C</string>
<string>B5F4C2920EC475D400D4F31C</string>
<string>B5F4C2970EC475F200D4F31C</string>
<string>B5F4C2B30EC4778E00D4F31C</string>
<string>B5F4C2B40EC4778E00D4F31C</string>
<string>B5F4C2B50EC4778E00D4F31C</string>
<string>B5F4C2B60EC4778E00D4F31C</string>
<string>B5F4C2B70EC4778E00D4F31C</string>
<string>B5F4C2B80EC4778E00D4F31C</string>
<string>B5F4C2B90EC4778E00D4F31C</string>
<string>B5F4C2BA0EC4778E00D4F31C</string>
<string>B5F4C2BB0EC4778E00D4F31C</string>
<string>B5F4C2BC0EC4778E00D4F31C</string>
<string>B5F4C2BD0EC4778E00D4F31C</string>
<string>B5F4C2BE0EC4778E00D4F31C</string>
<string>B5F4C2BF0EC4778E00D4F31C</string>
<string>B5F4C2C00EC4778E00D4F31C</string>
<string>B5F4C2C10EC4778E00D4F31C</string>
<string>B5F4C2C20EC4778E00D4F31C</string>
<string>B5F4C2C30EC4778E00D4F31C</string>
<string>B5F4C2C40EC4778E00D4F31C</string>
<string>B5F4C2C50EC4778E00D4F31C</string>
<string>B5F4C2C60EC4778E00D4F31C</string>
<string>B5F4C2C70EC4778E00D4F31C</string>
<string>B5F4C2C80EC4778E00D4F31C</string>
<string>B5F4C2C90EC4778E00D4F31C</string>
<string>B5F4C2CE0EC477C900D4F31C</string>
<string>B5F4C2DA0EC4784000D4F31C</string>
<string>B5F4C2DB0EC4784000D4F31C</string>
<string>B5F4C2DC0EC4784000D4F31C</string>
<string>B5F4C2E90EC478DD00D4F31C</string>
<string>B5F4C2EA0EC478DD00D4F31C</string>
<string>B5F4C2EB0EC478DD00D4F31C</string>
<string>B5F4C2EC0EC478DD00D4F31C</string>
<string>B5F4C2ED0EC478DD00D4F31C</string>
<string>B5F4C2EE0EC478DD00D4F31C</string>
<string>B5F4C2FB0EC4791600D4F31C</string>
<string>B5F4C3050EC4793B00D4F31C</string>
<string>B5F4C3060EC4793B00D4F31C</string>
<string>B5F4C3070EC4793B00D4F31C</string>
<string>B5F4C3080EC4793B00D4F31C</string>
<string>B5F4C3170EC479AB00D4F31C</string>
<string>B5F4C3180EC479AB00D4F31C</string>
<string>B5F4C3190EC479AB00D4F31C</string>
<string>B5F4C31A0EC479AB00D4F31C</string>
<string>B5F4C31B0EC479AB00D4F31C</string>
<string>B5F4C3270EC47A0800D4F31C</string>
<string>B5F4C3280EC47A0800D4F31C</string>
<string>B5F4C3290EC47A0800D4F31C</string>
<string>B5F4C32A0EC47A0800D4F31C</string>
<string>B5F4C32F0EC47A2500D4F31C</string>
<string>B5F4C3360EC47A4500D4F31C</string>
<string>B5F4C3370EC47A4500D4F31C</string>
<string>B5F4C3550EC47B3A00D4F31C</string>
<string>B5F4C3560EC47B3A00D4F31C</string>
<string>B5F4C3570EC47B3A00D4F31C</string>
<string>B5F4C3580EC47B3A00D4F31C</string>
</array>
</dict>
<key>SplitCount</key>
... ... @@ -437,7 +525,7 @@
<key>Frame</key>
<string>{{0, 0}, {1098, 836}}</string>
<key>RubberWindowFrame</key>
<string>227 156 1432 976 0 0 1920 1178 </string>
<string>238 198 1432 976 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
... ... @@ -457,7 +545,7 @@
<key>Frame</key>
<string>{{0, 841}, {1098, 94}}</string>
<key>RubberWindowFrame</key>
<string>227 156 1432 976 0 0 1920 1178 </string>
<string>238 198 1432 976 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
... ... @@ -481,9 +569,9 @@
</array>
<key>TableOfContents</key>
<array>
<string>B5B296B40E7BC6C7000B04CD</string>
<string>B5F4C1E40EC471D500D4F31C</string>
<string>1CE0B1FE06471DED0097A5F4</string>
<string>B5B296B50E7BC6C7000B04CD</string>
<string>B5F4C1E50EC471D500D4F31C</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
... ... @@ -617,16 +705,16 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>B5B296C70E7BC7E3000B04CD</string>
<string>B5B296C80E7BC7E3000B04CD</string>
<string>1C530D57069F1CE1000CFCEE</string>
<string>B5F4C2550EC4748700D4F31C</string>
<string>B5F4C2560EC4748700D4F31C</string>
<string>B5ABC8410E24CDE70072F422</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>1C78EAAD065D492600B07095</string>
<string>1C530D57069F1CE1000CFCEE</string>
<string>1CD10A99069EF8BA00B06720</string>
<string>/Users/ben/asi-http-request/asi-http-request.xcodeproj</string>
</array>
<key>WindowString</key>
<string>227 156 1432 976 0 0 1920 1178 </string>
<string>238 198 1432 976 0 0 1920 1178 </string>
<key>WindowToolsV3</key>
<array>
<dict>
... ... @@ -656,7 +744,7 @@
<key>Frame</key>
<string>{{0, 0}, {1279, 533}}</string>
<key>RubberWindowFrame</key>
<string>205 95 1279 815 0 0 1920 1178 </string>
<string>503 131 1279 815 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
... ... @@ -682,7 +770,7 @@
<key>Frame</key>
<string>{{0, 538}, {1279, 236}}</string>
<key>RubberWindowFrame</key>
<string>205 95 1279 815 0 0 1920 1178 </string>
<string>503 131 1279 815 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
... ... @@ -705,18 +793,18 @@
<key>TableOfContents</key>
<array>
<string>B5ABC8410E24CDE70072F422</string>
<string>B5B2969B0E7BC6B2000B04CD</string>
<string>B5F4C1E60EC471D500D4F31C</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.buildV3</string>
<key>WindowString</key>
<string>205 95 1279 815 0 0 1920 1178 </string>
<string>503 131 1279 815 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>B5ABC8410E24CDE70072F422</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>FirstTimeWindowDisplayed</key>
... ... @@ -799,10 +887,10 @@
<key>Frame</key>
<string>{{684, 0}, {817, 397}}</string>
<key>RubberWindowFrame</key>
<string>63 130 1501 786 0 0 1920 1178 </string>
<string>160 76 1501 786 0 0 1920 1178 </string>
</dict>
<key>RubberWindowFrame</key>
<string>63 130 1501 786 0 0 1920 1178 </string>
<string>160 76 1501 786 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>PBXDebugSessionModule</string>
... ... @@ -825,18 +913,18 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
<string>B5B2968F0E7BC60E000B04CD</string>
<string>B5F4C1E70EC471D500D4F31C</string>
<string>1C162984064C10D400B95A72</string>
<string>B5B296900E7BC60E000B04CD</string>
<string>B5B296910E7BC60E000B04CD</string>
<string>B5B296920E7BC60E000B04CD</string>
<string>B5B296930E7BC60E000B04CD</string>
<string>B5B296940E7BC60E000B04CD</string>
<string>B5F4C1E80EC471D500D4F31C</string>
<string>B5F4C1E90EC471D500D4F31C</string>
<string>B5F4C1EA0EC471D500D4F31C</string>
<string>B5F4C1EB0EC471D500D4F31C</string>
<string>B5F4C1EC0EC471D500D4F31C</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
<key>WindowString</key>
<string>63 130 1501 786 0 0 1920 1178 </string>
<string>160 76 1501 786 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>1CD10A99069EF8BA00B06720</string>
<key>WindowToolIsVisible</key>
... ... @@ -858,12 +946,14 @@
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>1CDD528C0622207200134675</string>
<key>PBXProjectModuleLabel</key>
<string>ASIHTTPRequest.m</string>
<string>AppDelegate.m</string>
<key>StatusBarVisibility</key>
<true/>
</dict>
... ... @@ -884,8 +974,6 @@
<string>212pt</string>
</dict>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
... ... @@ -921,8 +1009,8 @@
<key>TableOfContents</key>
<array>
<string>1C530D57069F1CE1000CFCEE</string>
<string>B5B297300E7BCD05000B04CD</string>
<string>B5B297310E7BCD05000B04CD</string>
<string>B5F4C3440EC47AED00D4F31C</string>
<string>B5F4C3450EC47AED00D4F31C</string>
<string>1CDD528C0622207200134675</string>
<string>1CD0528E0623707200166675</string>
</array>
... ... @@ -931,7 +1019,7 @@
<key>WindowToolGUID</key>
<string>1C530D57069F1CE1000CFCEE</string>
<key>WindowToolIsVisible</key>
<true/>
<false/>
</dict>
<dict>
<key>Identifier</key>
... ... @@ -987,7 +1075,7 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
<string>B5B296B60E7BC6C7000B04CD</string>
<string>B5F4C1ED0EC471D500D4F31C</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
... ... @@ -1325,22 +1413,40 @@
<string>538 42 401 187 0 0 1280 1002 </string>
</dict>
<dict>
<key>FirstTimeWindowDisplayed</key>
<false/>
<key>Identifier</key>
<string>windowTool.projectFormatConflicts</string>
<key>IsVertical</key>
<true/>
<key>Layout</key>
<array>
<dict>
<key>Dock</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>B5CFFB040EC46616009ADE56</string>
</dict>
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {472, 302}}</string>
<key>RubberWindowFrame</key>
<string>268 833 472 322 0 0 1920 1178 </string>
</dict>
<key>Module</key>
<string>XCProjectFormatConflictsModule</string>
<key>Proportion</key>
<string>100%</string>
<string>302pt</string>
</dict>
</array>
<key>Proportion</key>
<string>100%</string>
<string>302pt</string>
</dict>
</array>
<key>Name</key>
... ... @@ -1350,11 +1456,21 @@
<string>XCProjectFormatConflictsModule</string>
</array>
<key>StatusbarIsVisible</key>
<integer>0</integer>
<false/>
<key>TableOfContents</key>
<array>
<string>B5CFFB050EC46616009ADE56</string>
<string>B5CFFB060EC46616009ADE56</string>
<string>B5CFFB040EC46616009ADE56</string>
</array>
<key>WindowContentMinSize</key>
<string>450 300</string>
<key>WindowString</key>
<string>50 850 472 307 0 0 1440 877</string>
<string>268 833 472 322 0 0 1920 1178 </string>
<key>WindowToolGUID</key>
<string>B5CFFB050EC46616009ADE56</string>
<key>WindowToolIsVisible</key>
<true/>
</dict>
<dict>
<key>Identifier</key>
... ...
This diff could not be displayed because it is too large.
This diff was suppressed by a .gitattributes entry.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSMainNibFile</key>
<string>MainWindow</string>
</dict>
</plist>
... ...
//
// Prefix header for all source files of the 'asi-http-request' target in the 'asi-http-request' project
//
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <CFNetwork/CFNetwork.h>
#import <UIKit/UIKit.h>
#endif
... ...
//
// iPhone-Sample-main.m
// asi-http-request
//
// Created by Ben Copsey on 09/07/2008.
// Copyright __MyCompanyName__ 2008. All rights reserved.
//
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
... ...
//
// iPhoneSampleAppDelegate.h
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright All-Seeing Interactive 2008. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface iPhoneSampleAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
... ...
//
// iPhoneSampleAppDelegate.m
// asi-http-request
//
// Created by Ben Copsey on 07/11/2008.
// Copyright All-Seeing Interactive 2008. All rights reserved.
//
#import "iPhoneSampleAppDelegate.h"
#import "ASIHTTPRequest.h"
@implementation iPhoneSampleAppDelegate
@synthesize window;
@synthesize tabBarController;
- (void)dealloc {
[tabBarController release];
[window release];
[super dealloc];
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Add the tab bar controller's current view as a subview of the window
[window addSubview:tabBarController.view];
}
@end
... ...
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
<data>
<int key="IBDocument.SystemTarget">528</int>
<string key="IBDocument.SystemVersion">9F33</string>
<string key="IBDocument.InterfaceBuilderVersion">672</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="106"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
</object>
<object class="IBProxyObject" id="532797962">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
</object>
<object class="IBUICustomObject" id="664661524"/>
<object class="IBUIWindow" id="380026005">
<nil key="NSNextResponder"/>
<int key="NSvFlags">1316</int>
<object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrameSize">{320, 480}</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<bool key="IBUIVisibleAtLaunch">YES</bool>
</object>
<object class="IBUITabBarController" id="1034742383">
<object class="IBUISimulatedTabBarMetrics" key="IBUISimulatedBottomBarMetrics"/>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<object class="IBUIViewController" key="IBUISelectedViewController" id="268481961">
<object class="IBUITabBarItem" key="IBUITabBarItem" id="807309489">
<string key="IBUITitle">Queue</string>
<reference key="IBUITabBar"/>
</object>
<reference key="IBUIParentViewController" ref="1034742383"/>
<string key="IBUINibName">Queue</string>
</object>
<object class="NSMutableArray" key="IBUIViewControllers">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUIViewController" id="1024858337">
<object class="IBUITabBarItem" key="IBUITabBarItem" id="765670903">
<string key="IBUITitle">Synchronous</string>
<reference key="IBUITabBar"/>
</object>
<reference key="IBUIParentViewController" ref="1034742383"/>
<string key="IBUINibName">Synchronous</string>
</object>
<reference ref="268481961"/>
</object>
<object class="IBUITabBar" key="IBUITabBar" id="795333663">
<nil key="NSNextResponder"/>
<int key="NSvFlags">266</int>
<string key="NSFrame">{{129, 330}, {163, 49}}</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MCAwAA</bytes>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="380026005"/>
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="664661524"/>
</object>
<int key="connectionID">99</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tabBarController</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="1034742383"/>
</object>
<int key="connectionID">113</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="957960031">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="380026005"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="957960031"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="664661524"/>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">106</int>
<reference key="object" ref="1034742383"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="795333663"/>
<reference ref="1024858337"/>
<reference ref="268481961"/>
</object>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">107</int>
<reference key="object" ref="795333663"/>
<reference key="parent" ref="1034742383"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">108</int>
<reference key="object" ref="1024858337"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="765670903"/>
</object>
<reference key="parent" ref="1034742383"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">109</int>
<reference key="object" ref="268481961"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="807309489"/>
</object>
<reference key="parent" ref="1034742383"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">110</int>
<reference key="object" ref="807309489"/>
<reference key="parent" ref="268481961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">111</int>
<reference key="object" ref="765670903"/>
<reference key="parent" ref="1024858337"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="532797962"/>
<reference key="parent" ref="957960031"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>106.IBEditorWindowLastContentRect</string>
<string>106.IBPluginDependency</string>
<string>107.IBPluginDependency</string>
<string>108.CustomClassName</string>
<string>108.IBPluginDependency</string>
<string>109.CustomClassName</string>
<string>109.IBPluginDependency</string>
<string>110.IBPluginDependency</string>
<string>111.IBPluginDependency</string>
<string>2.IBAttributePlaceholdersKey</string>
<string>2.IBEditorWindowLastContentRect</string>
<string>2.IBPluginDependency</string>
<string>3.CustomClassName</string>
<string>3.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIApplication</string>
<string>UIResponder</string>
<string>{{391, 355}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>SynchronousViewController</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>QueueViewController</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<object class="NSMutableDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<string>{{229, 373}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>iPhoneSampleAppDelegate</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">123</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">QueueViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">fetchThreeImages:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>imageView1</string>
<string>imageView2</string>
<string>imageView3</string>
<string>progressIndicator</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIImageView</string>
<string>UIImageView</string>
<string>UIImageView</string>
<string>UIProgressView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">QueueViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SynchronousViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">simpleURLFetch:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">htmlSource</string>
<string key="NS.object.0">UITextView</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">SynchronousViewController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">iPhoneSampleAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>tabBarController</string>
<string>window</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UITabBarController</string>
<string>UIWindow</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">iPhoneSampleAppDelegate.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
<data>
<int key="IBDocument.SystemTarget">528</int>
<string key="IBDocument.SystemVersion">9F33</string>
<string key="IBDocument.InterfaceBuilderVersion">672</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="372490531">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
</object>
<object class="IBProxyObject" id="263589821">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
</object>
<object class="IBUIView" id="191373211">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUILabel" id="602749642">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 20}, {280, 46}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string key="IBUIText">Demonstrates a fetching 3 items at once, using an NSOperationQueue.</string>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica</string>
<double key="NSSize">1.400000e+01</double>
<int key="NSfFlags">16</int>
</object>
<object class="NSColor" key="IBUITextColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<nil key="IBUIHighlightedColor"/>
<int key="IBUIBaselineAdjustment">1</int>
<float key="IBUIMinimumFontSize">1.000000e+01</float>
<int key="IBUINumberOfLines">0</int>
</object>
<object class="IBUIButton" id="963091686">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 74}, {72, 37}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">1.500000e+01</double>
<int key="NSfFlags">16</int>
</object>
<int key="IBUIButtonType">1</int>
<string key="IBUIHighlightedTitle">Go!</string>
<string key="IBUIDisabledTitle">Go!</string>
<string key="IBUISelectedTitle">Go!</string>
<string key="IBUINormalTitle">Go!</string>
<object class="NSColor" key="IBUIHighlightedTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
</object>
</object>
<object class="IBUIImageView" id="512691955">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 124}, {135, 87}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIImageView" id="496427125">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 219}, {135, 87}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIImageView" id="393184766">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{163, 124}, {137, 87}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentMode">1</int>
<bool key="IBUIUserInteractionEnabled">NO</bool>
</object>
<object class="IBUIProgressView" id="138477738">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 325}, {280, 9}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIMultipleTouchEnabled">YES</bool>
</object>
</object>
<string key="NSFrameSize">{320, 460}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="191373211"/>
</object>
<int key="connectionID">3</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView1</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="512691955"/>
</object>
<int key="connectionID">15</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView2</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="393184766"/>
</object>
<int key="connectionID">16</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">imageView3</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="496427125"/>
</object>
<int key="connectionID">17</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">progressIndicator</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="138477738"/>
</object>
<int key="connectionID">18</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">fetchThreeImages:</string>
<reference key="source" ref="963091686"/>
<reference key="destination" ref="372490531"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">20</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="360949347">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="191373211"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="602749642"/>
<reference ref="496427125"/>
<reference ref="393184766"/>
<reference ref="138477738"/>
<reference ref="963091686"/>
<reference ref="512691955"/>
</object>
<reference key="parent" ref="360949347"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="372490531"/>
<reference key="parent" ref="360949347"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="263589821"/>
<reference key="parent" ref="360949347"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">8</int>
<reference key="object" ref="602749642"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">9</int>
<reference key="object" ref="963091686"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">11</int>
<reference key="object" ref="512691955"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">12</int>
<reference key="object" ref="496427125"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">13</int>
<reference key="object" ref="393184766"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">14</int>
<reference key="object" ref="138477738"/>
<reference key="parent" ref="191373211"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>1.IBEditorWindowLastContentRect</string>
<string>1.IBPluginDependency</string>
<string>11.IBPluginDependency</string>
<string>12.IBPluginDependency</string>
<string>13.IBPluginDependency</string>
<string>14.IBPluginDependency</string>
<string>8.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>QueueViewController</string>
<string>UIResponder</string>
<string>{{901, 368}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">20</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">QueueViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">fetchThreeImages:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>imageView1</string>
<string>imageView2</string>
<string>imageView3</string>
<string>progressIndicator</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIImageView</string>
<string>UIImageView</string>
<string>UIImageView</string>
<string>UIProgressView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">QueueViewController.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
<data>
<int key="IBDocument.SystemTarget">528</int>
<string key="IBDocument.SystemVersion">9F33</string>
<string key="IBDocument.InterfaceBuilderVersion">672</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="1"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="372490531">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
</object>
<object class="IBProxyObject" id="263589821">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
</object>
<object class="IBUIView" id="191373211">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUILabel" id="602749642">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 20}, {280, 146}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIUserInteractionEnabled">NO</bool>
<string type="base64-UTF8" key="IBUIText">RGVtb25zdHJhdGVzIGZldGNoaW5nIGEgd2ViIHBhZ2Ugc3luY2hyb25vdXNseSwgdGhlIEhUTUwgc291
cmNlIHdpbGwgYXBwZWFyIGluIHRoZSBib3ggYmVsb3cgd2hlbiB0aGUgZG93bmxvYWQgaXMgY29tcGxl
dGUuIEluIHRoaXMgZXhhbXBsZSwgaXQgd2lsbCBydW4gaW4gdGhlIG1haW4gcnVuIGxvb3AsIHNvIHRo
ZSBpbnRlcmZhY2Ugd2lsbCBsb2NrIHVudGlsIHRoZSBkb3dubG9hZCBpcyBjb21wbGV0ZS4gSW4gcmVh
bCB3b3JsZCBzaXR1YXRpb25zLCB5b3UnZCBiZSBtb3JlIGxpa2VseSB0byBydW4gdGhpcyBpbiBhIHRo
cmVhZC4</string>
<object class="NSFont" key="IBUIFont" id="467718481">
<string key="NSName">Helvetica</string>
<double key="NSSize">1.400000e+01</double>
<int key="NSfFlags">16</int>
</object>
<object class="NSColor" key="IBUITextColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
<nil key="IBUIHighlightedColor"/>
<int key="IBUIBaselineAdjustment">1</int>
<float key="IBUIMinimumFontSize">1.000000e+01</float>
<int key="IBUINumberOfLines">0</int>
</object>
<object class="IBUIButton" id="963091686">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 174}, {72, 37}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<int key="IBUIContentHorizontalAlignment">0</int>
<int key="IBUIContentVerticalAlignment">0</int>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">1.500000e+01</double>
<int key="NSfFlags">16</int>
</object>
<int key="IBUIButtonType">1</int>
<string key="IBUIHighlightedTitle">Go!</string>
<string key="IBUIDisabledTitle">Go!</string>
<string key="IBUISelectedTitle">Go!</string>
<string key="IBUINormalTitle">Go!</string>
<object class="NSColor" key="IBUIHighlightedTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<object class="NSColor" key="IBUINormalTitleColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA</bytes>
</object>
</object>
<object class="IBUITextView" id="251778509">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 219}, {280, 152}}</string>
<reference key="NSSuperview" ref="191373211"/>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
<bool key="IBUIMultipleTouchEnabled">YES</bool>
<bool key="IBUIShowsHorizontalScrollIndicator">NO</bool>
<int key="IBUIIndicatorStyle">1</int>
<bool key="IBUIDelaysContentTouches">NO</bool>
<bool key="IBUICanCancelContentTouches">NO</bool>
<bool key="IBUIBouncesZoom">NO</bool>
<bool key="IBUIEditable">NO</bool>
<string key="IBUIText"/>
<reference key="IBUIFont" ref="467718481"/>
</object>
</object>
<string key="NSFrameSize">{320, 460}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="191373211"/>
</object>
<int key="connectionID">3</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">simpleURLFetch:</string>
<reference key="source" ref="963091686"/>
<reference key="destination" ref="372490531"/>
<int key="IBEventType">7</int>
</object>
<int key="connectionID">12</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">htmlSource</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="251778509"/>
</object>
<int key="connectionID">13</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="360949347">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1</int>
<reference key="object" ref="191373211"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="602749642"/>
<reference ref="251778509"/>
<reference ref="963091686"/>
</object>
<reference key="parent" ref="360949347"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="372490531"/>
<reference key="parent" ref="360949347"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="263589821"/>
<reference key="parent" ref="360949347"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">8</int>
<reference key="object" ref="602749642"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">9</int>
<reference key="object" ref="963091686"/>
<reference key="parent" ref="191373211"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10</int>
<reference key="object" ref="251778509"/>
<reference key="parent" ref="191373211"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>1.IBEditorWindowLastContentRect</string>
<string>1.IBPluginDependency</string>
<string>10.IBPluginDependency</string>
<string>8.IBPluginDependency</string>
<string>9.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>SynchronousViewController</string>
<string>UIResponder</string>
<string>{{714, 372}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">13</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">SynchronousViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">simpleURLFetch:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">htmlSource</string>
<string key="NS.object.0">UITextView</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">SynchronousViewController.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">../asi-http-request.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>
... ...