Skip to content

Haze-Development/AFNetworking

Repository files navigation

AFNetworking

AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of NSURLConnection, NSOperation, and other familiar Foundation technologies. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use. For example, here's how easy it is to get JSON from a URL:

NSURL *url = [NSURLURLWithString:@"https://alpha-api.app.net/stream/0/posts/stream/global"]; NSURLRequest *request = [NSURLRequestrequestWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){NSLog(@"App.net Global Stream: %@", JSON)} failure:nil]; [operation start];

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did!

How To Get Started

Overview

AFNetworking Architecture Diagram

AFNetworking is architected to be as small and modular as possible, in order to make it simple to use and extend.

Core
AFURLConnectionOperationAn NSOperation that implements the NSURLConnection delegate methods.
HTTP Requests
AFHTTPRequestOperationA subclass of AFURLConnectionOperation for requests using the HTTP or HTTPS protocols. It encapsulates the concept of acceptable status codes and content types, which determine the success or failure of a request.
AFJSONRequestOperationA subclass of AFHTTPRequestOperation for downloading and working with JSON response data.
AFXMLRequestOperationA subclass of AFHTTPRequestOperation for downloading and working with XML response data.
AFPropertyListRequestOperationA subclass of AFHTTPRequestOperation for downloading and deserializing objects with property list response data.
HTTP Client
AFHTTPClient Captures the common patterns of communicating with an web application over HTTP, including:
 <ul> <li>Making requests from relative paths of a base URL</li> <li>Setting HTTP headers to be added automatically to requests</li> <li>Authenticating requests with HTTP Basic credentials or an OAuth token</li> <li>Managing an <tt>NSOperationQueue</tt> for requests made by the client</li> <li>Generating query strings or HTTP bodies from an <tt>NSDictionary</tt></li> <li>Constructing multipart form requests</li> <li>Automatically parsing HTTP response data into its corresponding object representation</li> <li>Monitoring and responding to changes in network reachability</li> </ul> </td> 
Images
AFImageRequestOperationA subclass of AFHTTPRequestOperation for downloading and processing images.
UIImageView+AFNetworkingAdds methods to UIImageView for loading remote images asynchronously from a URL.

Example Usage

XML Request

NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://api.flickr.com/services/rest/?method=flickr.groups.browse&api_key=b6300e17ad3c506e706cb0072175d047&cat_id=34427469792%40N01&format=rest"]]; AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser){XMLParser.delegate = self; [XMLParser parse]} failure:nil]; [operation start];

Image Request

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)]; [imageView setImageWithURL:[NSURLURLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];

API Client Request

// AFAppDotNetAPIClient is a subclass of AFHTTPClient, which defines the base URL and default HTTP headers for NSURLRequests it creates [[AFAppDotNetAPIClient sharedClient] getPath:@"stream/0/posts/stream/global"parameters:nilsuccess:^(AFHTTPRequestOperation *operation, id JSON){NSLog(@"App.net Global Stream: %@", JSON)} failure:nil];

File Upload with Progress Callback

NSURL *url = [NSURLURLWithString:@"http://api-base-url.com"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5); NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST"path:@"/upload"parameters:nilconstructingBodyWithBlock: ^(id <AFMultipartFormData>formData){[formData appendPartWithFileData:imageData name:@"avatar"fileName:@"avatar.jpg"mimeType:@"image/jpeg"]}]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setUploadProgressBlock:^(NSUInteger bytesWritten, longlong totalBytesWritten, longlong totalBytesExpectedToWrite){NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite)}]; [httpClient enqueueHTTPRequestOperation:operation];

Streaming Request

NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://localhost:8080/encode"]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.inputStream = [NSInputStreaminputStreamWithFileAtPath:[[NSBundlemainBundle] pathForResource:@"large-image"ofType:@"tiff"]]; operation.outputStream = [NSOutputStreamoutputStreamToMemory]; [operation start];

Requirements

AFNetworking 1.0 and higher requires either iOS 5.0 and above, or Mac OS 10.7 (64-bit with modern Cocoa runtime) and above.

For compatibility with iOS 4.3, use the latest 0.10.x release.

ARC

AFNetworking uses ARC as of its 1.0 release.

If you are using AFNetworking 1.0 in your non-arc project, you will need to set a -fobjc-arc compiler flag on all of the AFNetworking source files. Conversely, if you are adding a pre-1.0 version of AFNetworking, you will need to set a -fno-objc-arc compiler flag.

To set a compiler flag in Xcode, go to your active target and select the "Build Phases" tab. Now select all AFNetworking source files, press Enter, insert -fobjc-arc or -fno-objc-arc and then "Done" to enable or disable ARC for AFNetworking.

Credits

AFNetworking was created by Scott Raymond and Mattt Thompson in the development of Gowalla for iPhone.

AFNetworking's logo was designed by Alan Defibaugh.

And most of all, thanks to AFNetworking's growing list of contributors.

Contact

Follow AFNetworking on Twitter (@AFNetworking)

Creators

Mattt Thompson
@mattt

Scott Raymond
@sco

License

AFNetworking is available under the MIT license. See the LICENSE file for more info.

About

A delightful iOS and OS X networking framework

Resources

License

Stars

Watchers

Forks

Packages

No packages published