Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here

AFNetworking

A delightful networking framework for iOS, macOS, watchOS, and tvOS.

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402 (1 ratings)
Rated 5.0 out of 5
Subscribe to updates I use AFNetworking


Statistics on AFNetworking

Number of watchers on Github 32884
Number of open issues 23
Average time to close an issue 13 days
Main language Objective-C
Average time to merge a PR 11 days
Open pull requests 146+
Closed pull requests 81+
Last commit 21 days ago
Repo Created about 9 years ago
Repo Last Updated 16 days ago
Size 5.68 MB
Homepage http://afnetworki...
Organization / Authorafnetworking
Latest Release4.0.1
Contributors254
Page Updated
Do you use AFNetworking? Leave a review!
View open issues (23)
View AFNetworking activity
View TODOs for AFNetworking (2)
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating AFNetworking for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

AFNetworking

Build Status CocoaPods Compatible Carthage Compatible Platform Twitter

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

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.

How To Get Started

Communication

  • If you need help, use Stack Overflow. (Tag 'afnetworking')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, and can provide steps to reliably reproduce it, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

AFNetworking supports multiple methods for installing the library in a project.

Installation with CocoaPods

To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'AFNetworking', '~> 4.0'

Installation with Swift Package Manager

Once you have your Swift package set up, adding AFNetworking as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/AFNetworking/AFNetworking.git", .upToNextMajor(from: "4.0.0"))
]

Note: AFNetworking's Swift package does not include it's UIKit extensions.

Installation with Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate AFNetworking, add the following to your Cartfile.

github "AFNetworking/AFNetworking" ~> 4.0

Requirements

AFNetworking Version Minimum iOS Target Minimum macOS Target Minimum watchOS Target Minimum tvOS Target Notes
4.x iOS 9 macOS 10.10 watchOS 2.0 tvOS 9.0 Xcode 11+ is required.
3.x iOS 7 OS X 10.9 watchOS 2.0 tvOS 9.0 Xcode 7+ is required. NSURLConnectionOperation support has been removed.
2.6 -> 2.6.3 iOS 7 OS X 10.9 watchOS 2.0 n/a Xcode 7+ is required.
2.0 -> 2.5.4 iOS 6 OS X 10.8 n/a n/a Xcode 5+ is required. NSURLSession subspec requires iOS 7 or OS X 10.9.
1.x iOS 5 Mac OS X 10.7 n/a n/a
0.10.x iOS 4 Mac OS X 10.6 n/a n/a

(macOS projects must support 64-bit with modern Cocoa runtime).

Programming in Swift? Try Alamofire for a more conventional set of APIs.

Architecture

NSURLSession

  • AFURLSessionManager
  • AFHTTPSessionManager

Serialization

  • <AFURLRequestSerialization>
    • AFHTTPRequestSerializer
    • AFJSONRequestSerializer
    • AFPropertyListRequestSerializer
  • <AFURLResponseSerialization>
    • AFHTTPResponseSerializer
    • AFJSONResponseSerializer
    • AFXMLParserResponseSerializer
    • AFXMLDocumentResponseSerializer (macOS)
    • AFPropertyListResponseSerializer
    • AFImageResponseSerializer
    • AFCompoundResponseSerializer

Additional Functionality

  • AFSecurityPolicy
  • AFNetworkReachabilityManager

Usage

AFURLSessionManager

AFURLSessionManager creates and manages an NSURLSession object based on a specified NSURLSessionConfiguration object, which conforms to <NSURLSessionTaskDelegate>, <NSURLSessionDataDelegate>, <NSURLSessionDownloadDelegate>, and <NSURLSessionDelegate>.

Creating a Download Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];

Creating an Upload Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Success: %@ %@", response, responseObject);
    }
}];
[uploadTask resume];

Creating an Upload Task for a Multi-Part Request, with Progress

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
    } error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      //Update the progress view
                      [progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                  }
              }];

[uploadTask resume];

Creating a Data Task

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:@"http://httpbin.org/get"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];

Request Serialization

Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.

NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};

Query String Parameter Encoding

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3

URL Form Parameter Encoding

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/x-www-form-urlencoded

foo=bar&baz[]=1&baz[]=2&baz[]=3

JSON Parameter Encoding

[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/json

{"foo": "bar", "baz": [1,2,3]}

Network Reachability Manager

AFNetworkReachabilityManager monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces.

  • Do not use Reachability to determine if the original request should be sent.
    • You should try to send it.
  • You can use Reachability to determine when a request should be automatically retried.
    • Although it may still fail, a Reachability notification that the connectivity is available is a good time to retry something.
  • Network reachability is a useful tool for determining why a request might have failed.
    • After a network request has failed, telling the user they're offline is better than giving them a more technical but accurate error, such as request timed out.

See also WWDC 2012 session 706, Networking Best Practices..

Shared Network Reachability

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

Security Policy

AFSecurityPolicy evaluates server trust against pinned X.509 certificates and public keys over secure connections.

Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.

Allowing Invalid SSL Certificates

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production

Unit Tests

AFNetworking includes a suite of unit tests within the Tests subdirectory. These tests can be run simply be executed the test action on the platform framework you would like to test.

Credits

AFNetworking is owned and maintained by the Alamofire Software Foundation.

AFNetworking was originally 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.

Security Disclosure

If you believe you have identified a security vulnerability with AFNetworking, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.

License

AFNetworking is released under the MIT license. See LICENSE for details.

AFNetworking open issues Ask a question     (View All Issues)
  • over 3 years App crashes at [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)] function
  • over 3 years Why this networking framework can't support the request of synchronous?
  • over 3 years The operation couldn’t be completed. (NSURLErrorDomain error -1004.)
  • over 3 years Images are not removed from disk after clearing cache
  • almost 4 years Add support for NSURLSessionTaskMetrics?
  • almost 4 years Do not save downloaded file upon failure response
  • almost 4 years you are great!!
  • almost 4 years about response json value
  • almost 4 years response: cache the post response
  • almost 4 years An instance of class __NSCFBackgroundDownloadTask was deallocated while KVO still registered with it
  • almost 4 years Request: disclose release plans
  • almost 4 years Huge memory leaks in AFJSONObjectByRemovingKeysWithNullValues method.
  • almost 4 years AFHTTPSessionManager.requestSerializer set HTTPHeaderField is invalid
  • almost 4 years why my request do not return error when no net state.
  • almost 4 years 'Invalid type in JSON write (_SwiftValue)
  • almost 4 years Error Domain=NSURLErrorDomain Code=-1009
  • almost 4 years pod install issues help
  • almost 4 years Implementing custom framework-"Undefined symbols for architecture x86_64:"
  • almost 4 years user Cellular request failed
  • almost 4 years MultipleForm Request Concurrency
  • almost 4 years how to clear cache in AFNetworking 3.0 ?
  • almost 4 years operationQueue property is misleading and should not be exposed public
  • almost 4 years EXC_BAD_ACCESS in not main thread
  • almost 4 years afnetworking reachability ios 10 simulator
  • almost 4 years In order to validate a domain name for self signed certificates, you MUST use pinning
  • almost 4 years CRASH - dispatch_async in AFURLSessionManager.m
  • almost 4 years Reference to 'AFSSLPinningModeCertificate' is ambiguous
  • almost 4 years Cookies are always empty in WatchOS 3
  • almost 4 years Crash on AFHTTPRequestSerializer
  • almost 4 years __NSCFBackgroundDownloadTask was deallocated while key value observers were still registered with it. Current observation info:
AFNetworking open pull requests (View All Pulls)
  • Fix spelling
  • Fixed image memory calculation
  • Resolved compiler warnings
  • Fixed issue where UIButton image downloading called wrong cancel method
  • Correct serizalization of NSArray of NSDictionary
  • Implemented image downloading progress on UIImageView+AFNetworking
  • Adding new appendPartWithFormData method with Content-Type parameter in AFMultipartFormData
  • Add image download progress on UIImageView+AFNetworking category
  • Tighten the description of the progress parameter
  • Fixed status code 204/205 handling
  • AFURLSessionManager Background upload Tests
  • Using thread safe NSFileManager objects instead of shared instance
  • Let app devs use taskDescription by using associated objects internally
  • Changed Accept-Language header to start with the locale with country code (with more tests)
  • Implemented Public Key Hash Pinning
  • Fix carthage support 2.x
  • Update documentation to match method names
  • AFImageResponseSerializer tests
  • Added synchronous methods to AFHTTPSessionManager
  • fixed crash sometimes
  • Improve AFAutoPurgingImageCache performance.
  • Use `NSKeyValueChangeNewKey` in change dictionary.
  • Master
  • Prevent AFImageDownloader crashing when passing invalid NSURLRequest (#3343)
  • Fix - Image Cache Tests
  • Fix for iOS 7 background upload tasks not updating progress
  • [WIP] Add Playground examples for iOS
  • Pinning failure better error
  • AF created file when http server return 404
  • Master
  • etag
  • Short-circuit unnecessary calls to SecTrustEvaluate() in pinning mode
  • Add simple GET and POST examples to readme
  • Feature Request: Support GIFs
  • extract the user agent generation from the requestSerialization init.
  • Reachability tests
  • #3503 Version defines
  • documenting the workaround to uploadTaskWithRequest:fromFile: bug
  • Change compile-time check to runtime check.
  • Added iPV6 support for ReachabilityManager in 2.x
  • Use dispatch queue for reachability callbacks
  • Fixed nullability errors
  • Update AFNetworkReachabilityManager.m
  • Update iOS Example
  • Fix for crashes due to dangerous NSMutableDictionary access in AFHTTPRequestSerialiser
  • Master
  • move [self didChangeValueForKey:@"currentState"]; into if scope
  • Fixed issue where response serializers did not inherit super class copying
  • Update Post.h
  • Fix crash around customizing NSURLCache size.
  • Validate server trust asynchronously
  • require app extension api only on watchOS
  • Remove KVO of progress in favor of using the NSURLSession delegate APIs
  • 添加了一个新功能
  • Fixed an issue where registering a UIProgessView to a task that was a…
  • Use copy for NSString NSDictionary NSSet NSArray properties.
  • Check return value before doing anything with error.
  • Fixed issue where NS_UNAVAILABLE is not reported
  • Master
  • change ipv6 condition in ReachabilityManager
  • Removing NULL objects within an Array
  • change bool value usage
  • update
  • Fix reachability tests
  • Removed ambiguous array creation in AFSecurityPolicy
  • Check data validation if nil not only length before parse response Object from NSJSONSerialization
  • Use `strongSelf` local variable
  • Add XMLParser/XMLDocument serializer tests
  • Search for default pinned certificates in the main bundle
  • Clarify documentation for supported encodings in AFJSONResponseSerializer
  • Feature Request: Support GIFs
  • Master
  • Added startRequestsImmediately to AFHTTPSessionManager
  • Merge pull request #1 from AFNetworking/master
  • Correct nullability
  • Fixed the bug of AFNetworkReachabilityManager default init do not have a current network status.
  • Support git feature.
  • Unwrap license text
  • delete it for support DNS
  • 去掉总量数据推断
  • Fixed a warning when linking from an app extension
  • Add sender object when posting AFNetworkingReachabilityDidChangeNotification
  • AFNetworking: fix warnings.
  • Fix imageRequestCancel bug.
  • just a test
  • Redirect response should return nullable NSURLRequest
  • is
  • test
  • none
  • Create benfranklin
  • test qu
  • UIImageView and UIButton setImageWithURL: internally uses requestSerializer
  • wgj Patch 4
  • test_test
  • remove duplicated setting of responseSerializer & refresh ssl certificate chain for security test case
  • Fix CHANGELOG formatting
  • test
  • Fix wrong delegate method in `AFURLSessionManager` annotation
  • Add support for "image/jp2" mime type
  • Add - Custom HTTPHeaderField remove method.
  • Fix objects array serialization
  • AFURLRequestSerialization: use dispatch_barrier_sync for header changes
  • fix AssociatedObject bug
  • AFJSONObjectByRemovingKeysWithNullValues use less memory
  • Xcode upgrade check
  • Add iOS 10 metrics to task complete notification
  • AFNetworking
  • Resolve memory leaks
  • The copy should be strong.
  • Fix urlquery
  • UIImageView+AFNetworking: Prevent stuck state for malformed urlRequest
  • Fix analyzer warning for upload task creation
  • Support for setting headers per request when using AFHTTPSessionManager.
  • fix #1825 bug. Because you call ``` [super encodeWithCoder:coder]; ``…
  • This might call some memory leaks
  • use Objective-C 2.0 subscripting
  • Fixed CLANG_ENABLE_CODE_COVERAGE flag so release can be made
  • [Thread Race] removeObjectForKey: in NSDictionary.
  • fix the bug of isReachable method is ineffective, by x5.
  • fix the bug of isReachable method is ineffective
  • Modifies AFJSONObjectByRemovingKeysWithNullValues to remove NSArray null objects
  • Exposes C function prototype
  • Allow extension api only
  • Fixed one issue which is:
  • fix memory leak issue
  • Adding tvOS User Agent
  • Change dataTaskWithHTTPMethod visibility to public
  • Add - Custom HTTPHeaderField remove method.
  • fix space used in Objective-C method (coding style)
  • Task created in a session that has been invalidate
  • Add Alamofire’s security policy test suite (including certificates) to AFNetworking’s
  • Update AFURLResponseSerialization.m
  • fixed memory leak on NSURLSession ("load" method in _AFURLSessionTask…
  • Fix AFURLSessionManager security weakness
  • fixed a bug when URLString like "https://www.google.com?"
  • Merge pull request #1 from AFNetworking/master
  • make it better!
  • 测试
  • Remove conflicting nullable specifier on init
  • Remove conflicting nullable specifier on init
  • Fix an error in the comment
  • Use low priority queue instead of background for SCNetworkReachabilityGetFlags()
  • replace block setter method parameter type with typedef type name
  • update
  • Add assistant files to xcode project (not target)
  • ignore https check if baseURL is not set
AFNetworking questions on Stackoverflow (View All Questions)
  • AFNetworking 3.0 setImageWithURLRequest download progress
  • AFNetworking cancel post request
  • AFNetworking 3.0 status code
  • Appending image in collectionView using AFNetworking
  • Make a progress bar for get the response with AFNetworking 3.0
  • Request failed: how to set content-type: application/json using AFNetworking 3.0
  • Pods install not installing all files in AFNetworking on existing project
  • AFNetworking with UIWebView issue
  • AFNetworking Json post image
  • AFNetworking 3.x multipart form upload
  • AFNetworking 3.0 multipart request
  • AFNetworking batch requests - canceling when first one fails
  • Request failed: unacceptable content-type: text/html using AFNetworking 2.0
  • What does registerHTTPOperationClass in AFNetworking actually do?
  • Set HTTP Body to AFNetworking instead of using native request
  • Swift AFNetworking POST error
  • Domain=NSCocoaErrorDomain Code=3840 error in afnetworking 2.0
  • Cocoa Error 3840 on AFNetworking
  • dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking
  • Using AFNetworking for Web Service data retrieval
  • Uploading image to server reached damaged using AFNetworking
  • How can I get the correct JSON text in AFNetworking in swift
  • AFNetworking without cocoa pods
  • AFNetworking - How to make POST request
  • Unit test for AFNetworking Post request
  • AFNetworking migration from 1.x to 3.x
  • SocketRocket and AFNetworking cookie sync
  • How to intercept the response of AFNetworking request in Objective-C?
  • AFNetworking accept content type error: {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
  • Why AFNetworking taking too much time(86sec) to upload image(2mb)
AFNetworking list of languages used
AFNetworking latest release notes
4.0.1 Fixes and Updates

Released on Sunday, April 19, 2020. All issues associated with this milestone can be found using this filter.

Updated

  • Project templates and integrations.
    • Implemented by Kaspik in #4531.
  • Various CocoaPods podspec settings.

Fixed

  • Crash during authentication delegate method.
  • SPM integration.
    • Implemented by jshier in #4554.
  • Improper update instead of replacement of header values.
    • Implemented by ElfSundae in #4550.
  • Nullability of some methods.
    • Implemented by ElfSundae in #4551.
  • Typos in CHANGELOG.
    • Implemented by ElfSundae in #4537.
  • Missing tvOS compatibility for some methods.
    • Implemented by ElfSundae in #4536.
  • Missing FOUNDATION_EXPORT for AFJSONObjectByRemovingKeysWithNullValues.
    • Implemented by ElfSundae in #4529.

Removed

  • Unused UIImage+AFNetworking.h file.
    • Implemented by ElfSundae in #4535.
4.0.0 A Long Time Coming

Released on Sunday, March 29, 2020. All issues associated with this milestone can be found using this filter.

Added

  • Notificate when a downloaded file has been moved successfully.
    • Implemented by xingheng in #4393.
  • Specific error for certificate pinning failure.
    • Implemented by 0xced in #3425.
  • WKWebView extensions.
    • Implemented by tjanela in #4439.
  • Automatic location of certificates in the main bundle for certificate pinning.
    • Implemented by 0xced in #3752.
  • User-Agent support for tvOS.
    • Implemented by ghking in #4014.
  • Ability for AFHTTPSessionManager to recreate its underlying NSURLSession.
    • Implemented by Kaspik in #4256.
  • Ability to set HTTP headers per request.
    • Implemented by stnslw in #4113.
  • Ability to capture NSURLSessionTaskMetrics.
    • Implemented by Caelink in #4237.

Updated

  • dataTaskWithHTTPMethod to be public.
    • Implemented by smartinspereira in #4007.
  • Reachability notification to include the instance which issued the notification.
    • Implemented by LMsgSendNilSelf in #4051.
  • AFJSONObjectByRemovingKeysWithNullValues to be public.
    • Implemented by ashfurrow in #4051.
  • AFJSONObjectByRemovingKeysWithNullValues to remove NSNull values from NSArrays.
    • Implemented by ashfurrow in #4052.

Changed

  • Automated CI to GitHub Actions.
    • Implemented by jshier in #4523.

Fixed

  • Explicit NSSecureCoding support.
    • Implemented by jshier in #4523.
  • Deprecated API usage on Catalyst.
    • Implemented by jshier in #4523.
  • Nullability annotations.
    • Implemented by jshier in #4523.
  • AFImageDownloader to more accurately cancel downloads.
    • Implemented by kinarobin in #4407.
  • Double KVO notifications in AFNetworkActivityManager.
    • Implemented by kinarobin in #4406.
  • Availability annotations around NSURLSessionTaskMetrics.
    • Implemented by ElfSundae in #4516.
  • Issues with associated_object and subclasses.
    • Implemented by welcommand in #3872.
  • Memory leak in example application.
    • Implemented by svoit in #4196.
  • Crashes in mulithreaded scenarios and dispatch_barrier.
    • Implemetned by streeter in #4474.
  • Issues with NSSecureCoding.
    • Implemented by ElfSudae in #4409.
  • Code style issues.
    • Implemented by svoit in #4200.
  • Race condition in AFImageDownloader.
    • Implemented by bbeversdorf in #4246.
  • Coding style issues.
    • Implemented by LeeHongHwa in #4002.

Removed

  • Support for iOS < 9, macOS < 10.10.
    • Implemented by jshier in #4523.
  • All previously deprecated APIs.
    • Implemented by jshier in #4523.
  • Unnecessary __block capture.
    • Implemented by kinarobin in #4526.
  • Workaround for NSURLSessionUploadTask creation on iOS 7.
    • Implemented by kinarobin in #4525.
  • Workaround for safe NSURLSessionTask creation on iOS < 8.
    • Implemented by kinarobin in #4401.
  • UIWebView extensions.
    • Implemented by tjanela in #4439.
2.7.0 2.7.0

Released on Tuesday, February 12, 2019. All issues associated with this milestone can be found using this filter.

Fixed

  • Update Podfile to work on modern CocoaPods
  • Add nullability specifiers to all id responseObject parameters
  • Fix empty content crash on AFHTTPSessionManager.post
Other projects in Objective-C