├── Tests ├── Resources │ ├── logo.png │ ├── SelfSigned │ │ ├── AltName.cer │ │ ├── NoDomains.cer │ │ └── foobar.com.cer │ ├── Google.com │ │ ├── google.com.cer │ │ ├── GeoTrust_Global_CA_Root.cer │ │ ├── GeoTrust_Global_CA-cross.cer │ │ ├── GoogleInternetAuthorityG2.cer │ │ ├── Equifax_Secure_Certificate_Authority_Root.cer │ │ ├── GoogleComServerTrustChainPath1 │ │ │ ├── googlecom_0.cer │ │ │ └── googlecom_1.cer │ │ └── GoogleComServerTrustChainPath2 │ │ │ ├── googlecom_0.cer │ │ │ ├── googlecom_1.cer │ │ │ └── googlecom_2.cer │ ├── HTTPBin.org │ │ ├── DST Root CA X3.cer │ │ ├── httpbinorg_04082019.cer │ │ ├── Let's Encrypt Authority X3.cer │ │ └── HTTPBinOrgServerTrustChain │ │ │ ├── httpbin_0.cer │ │ │ ├── httpbin_1.cer │ │ │ └── httpbin_2.cer │ └── ADN.net │ │ └── ADNNetServerTrustChain │ │ ├── adn_0.cer │ │ ├── adn_1.cer │ │ └── adn_2.cer ├── Tests-Prefix.pch ├── Info.plist └── Tests │ ├── AFTestCase.h │ ├── AFTestCase.m │ ├── AFPropertyListRequestSerializerTests.m │ ├── AFXMLParserResponseSerializerTests.m │ ├── AFUIWebViewTests.m │ ├── AFUIButtonTests.m │ ├── AFImageResponseSerializerTests.m │ ├── AFPropertyListResponseSerializerTests.m │ └── AFXMLDocumentResponseSerializerTests.m ├── Example ├── Certificates │ ├── adn.cer │ ├── root_ca.cer │ └── digicert_ca_3.cer ├── Assets.xcassets │ ├── Contents.json │ ├── AppIcon.appiconset │ │ ├── Icon-40.png │ │ ├── Icon-76.png │ │ ├── Icon-40@2x.png │ │ ├── Icon-40@3x.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ └── Contents.json │ └── profile-image-placeholder.imageset │ │ ├── profile-image-placeholder.png │ │ ├── profile-image-placeholder@2x.png │ │ └── Contents.json ├── tvOS Example │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ ├── App Icon - Large.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Middle.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── App Icon - Small.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Middle.imagestacklayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Top Shelf Image.imageset │ │ │ │ └── Contents.json │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── AFNetworking tvOS Example-Bridging-Header.h │ ├── Info.plist │ ├── ViewController.swift │ ├── AppDelegate.swift │ └── Gravatar.swift ├── watchOS Example Extension │ ├── Assets.xcassets │ │ └── README__ignoredByTemplate__ │ ├── ExtensionDelegate.h │ ├── Info.plist │ ├── InterfaceController.h │ ├── InterfaceController.m │ └── ExtensionDelegate.m ├── AFNetworking Example.entitlements ├── Prefix.pch ├── watchOS Example │ ├── Base.lproj │ │ └── Interface.storyboard │ ├── Info.plist │ └── Assets.xcassets │ │ └── AppIcon.appiconset │ │ └── Contents.json ├── AFNetworking watchOS │ ├── Base.lproj │ │ └── Interface.storyboard │ ├── Info.plist │ └── Assets.xcassets │ │ └── AppIcon.appiconset │ │ └── Contents.json ├── macOS Example │ ├── Info.plist │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── main.m │ ├── AppDelegate.h │ └── AppDelegate.m ├── Today Extension Example │ ├── TodayViewController.h │ ├── Info.plist │ └── TodayViewController.m ├── iOS Example │ ├── Controllers │ │ ├── GlobalTimelineViewController.h │ │ └── GlobalTimelineViewController.m │ ├── AppDelegate.h │ ├── Views │ │ ├── PostTableViewCell.h │ │ └── PostTableViewCell.m │ ├── Info.plist │ ├── AppDelegate.m │ └── Launchscreen.storyboard ├── Classes │ ├── Networking Extensions │ │ ├── AFAppDotNetAPIClient.h │ │ └── AFAppDotNetAPIClient.m │ └── Models │ │ ├── Post.h │ │ ├── User.h │ │ ├── Post.m │ │ └── User.m ├── main.m └── AFNetworking Example.xcodeproj │ └── xcshareddata │ └── xcschemes │ ├── iOS Example.xcscheme │ ├── tvOS Example.xcscheme │ └── macOS Example.xcscheme ├── fastlane ├── Fastfile ├── .env.ios12_xcode10 ├── .env.ios9_xcode7 ├── .env.ios10_xcode8 ├── .env.ios11_xcode9 ├── .env.ios11_xcode91 ├── .env.ios11_xcode92 ├── .env.ios11_xcode93 ├── .env.ios11_xcode94 ├── .env.ios8_xcode7 ├── .env.osx ├── .env.tvos12_xcode10 ├── .env ├── .env.default └── .env.deploy ├── Framework ├── module.modulemap ├── Info.plist └── AFNetworking.h ├── .cocoadocs.yml ├── AFNetworking.xcworkspace └── contents.xcworkspacedata ├── .gitignore ├── LICENSE ├── UIKit+AFNetworking ├── UIImage+AFNetworking.h ├── UIKit+AFNetworking.h ├── UIActivityIndicatorView+AFNetworking.h ├── UIRefreshControl+AFNetworking.h ├── UIProgressView+AFNetworking.h ├── UIWebView+AFNetworking.h ├── UIRefreshControl+AFNetworking.m └── UIActivityIndicatorView+AFNetworking.m ├── AFNetworking ├── AFNetworking.h └── AFCompatibilityMacros.h ├── .travis.yml ├── CONTRIBUTING_CH.md ├── AFNetworking.podspec ├── AFNetworking.xcodeproj └── xcshareddata │ └── xcschemes │ ├── AFNetworking watchOS.xcscheme │ └── AFNetworking macOS.xcscheme └── CONTRIBUTING.md /Tests/Resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/logo.png -------------------------------------------------------------------------------- /Example/Certificates/adn.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Certificates/adn.cer -------------------------------------------------------------------------------- /Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Certificates/root_ca.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Certificates/root_ca.cer -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | import_from_git( 2 | url: 'https://github.com/AFNetworking/fastlane.git', 3 | branch: '0.0.8' 4 | ) 5 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Certificates/digicert_ca_3.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Certificates/digicert_ca_3.cer -------------------------------------------------------------------------------- /Tests/Resources/SelfSigned/AltName.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/SelfSigned/AltName.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/google.com.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/google.com.cer -------------------------------------------------------------------------------- /Tests/Resources/SelfSigned/NoDomains.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/SelfSigned/NoDomains.cer -------------------------------------------------------------------------------- /Tests/Resources/SelfSigned/foobar.com.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/SelfSigned/foobar.com.cer -------------------------------------------------------------------------------- /fastlane/.env.ios12_xcode10: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=$AF_IOS_SDK 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/Assets.xcassets/README__ignoredByTemplate__: -------------------------------------------------------------------------------- 1 | Did you know that git does not support storing empty directories? 2 | -------------------------------------------------------------------------------- /fastlane/.env.ios9_xcode7: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 6s" 2 | SCAN_SDK=iphonesimulator9.3 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 6s" -------------------------------------------------------------------------------- /Framework/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module AFNetworking { 2 | umbrella header "AFNetworking.h" 3 | export * 4 | module * { export * } 5 | } -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/DST Root CA X3.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/DST Root CA X3.cer -------------------------------------------------------------------------------- /fastlane/.env.ios10_xcode8: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 7" 2 | SCAN_SDK="iphonesimulator10.3" 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 7" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios11_xcode9: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=iphonesimulator11.0 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios11_xcode91: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=iphonesimulator11.1 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios11_xcode92: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=iphonesimulator11.2 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios11_xcode93: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=iphonesimulator11.3 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios11_xcode94: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 8" 2 | SCAN_SDK=iphonesimulator11.4 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 4 | -------------------------------------------------------------------------------- /fastlane/.env.ios8_xcode7: -------------------------------------------------------------------------------- 1 | SCAN_DEVICE="iPhone 5" 2 | SCAN_SDK=iphonesimulator9.3 3 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 5,OS=8.1" -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/httpbinorg_04082019.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/httpbinorg_04082019.cer -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GeoTrust_Global_CA_Root.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GeoTrust_Global_CA_Root.cer -------------------------------------------------------------------------------- /fastlane/.env.osx: -------------------------------------------------------------------------------- 1 | SCAN_SCHEME=$AF_OSX_FRAMEWORK_SCHEME 2 | SCAN_SDK=$AF_OSX_SDK 3 | 4 | EXAMPLE_SCHEME=$AF_OSX_EXAMPLE_SCHEME 5 | EXAMPLE_DESTINATION="platform=macOS" -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_0.cer -------------------------------------------------------------------------------- /Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_1.cer -------------------------------------------------------------------------------- /Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_2.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/ADN.net/ADNNetServerTrustChain/adn_2.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GeoTrust_Global_CA-cross.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GeoTrust_Global_CA-cross.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleInternetAuthorityG2.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleInternetAuthorityG2.cer -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/Let's Encrypt Authority X3.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/Let's Encrypt Authority X3.cer -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_0.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_0.cer -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_1.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_1.cer -------------------------------------------------------------------------------- /Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_2.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/HTTPBin.org/HTTPBinOrgServerTrustChain/httpbin_2.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/Equifax_Secure_Certificate_Authority_Root.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/Equifax_Secure_Certificate_Authority_Root.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleComServerTrustChainPath1/googlecom_0.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleComServerTrustChainPath1/googlecom_0.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleComServerTrustChainPath1/googlecom_1.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleComServerTrustChainPath1/googlecom_1.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_0.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_0.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_1.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_1.cer -------------------------------------------------------------------------------- /Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_2.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Tests/Resources/Google.com/GoogleComServerTrustChainPath2/googlecom_2.cer -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /.cocoadocs.yml: -------------------------------------------------------------------------------- 1 | highlight-color: "#F89915" 2 | highlight-dark-color: "#E23B1B" 3 | darker-color: "#D8A688" 4 | darker-dark-color: "#E93D1C" 5 | background-color: "#E9DFDB" 6 | alt-link-color: "#E23B1B" 7 | warning-color: "#E23B1B" 8 | -------------------------------------------------------------------------------- /Example/Assets.xcassets/profile-image-placeholder.imageset/profile-image-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/profile-image-placeholder.imageset/profile-image-placeholder.png -------------------------------------------------------------------------------- /Example/Assets.xcassets/profile-image-placeholder.imageset/profile-image-placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/polydice/AFNetworking/master/Example/Assets.xcassets/profile-image-placeholder.imageset/profile-image-placeholder@2x.png -------------------------------------------------------------------------------- /fastlane/.env.tvos12_xcode10: -------------------------------------------------------------------------------- 1 | SCAN_SCHEME=$AF_TVOS_FRAMEWORK_SCHEME 2 | SCAN_DEVICE="Apple TV 4K" 3 | SCAN_SDK=$AF_TVOS_SDK 4 | 5 | EXAMPLE_SCHEME=$AF_TVOS_EXAMPLE_SCHEME 6 | EXAMPLE_DESTINATION="platform=tvOS Simulator,name=Apple TV 4K" 7 | -------------------------------------------------------------------------------- /Example/tvOS Example/AFNetworking tvOS Example-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | @import AFNetworking; -------------------------------------------------------------------------------- /Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #endif 10 | -------------------------------------------------------------------------------- /AFNetworking.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /fastlane/.env: -------------------------------------------------------------------------------- 1 | AF_WORKSPACE="AFNetworking.xcworkspace" 2 | 3 | AF_IOS_FRAMEWORK_SCHEME="AFNetworking iOS" 4 | AF_TVOS_FRAMEWORK_SCHEME="AFNetworking tvOS" 5 | AF_OSX_FRAMEWORK_SCHEME="AFNetworking macOS" 6 | 7 | AF_IOS_EXAMPLE_SCHEME="iOS Example" 8 | AF_TVOS_EXAMPLE_SCHEME="tvOS Example" 9 | AF_OSX_EXAMPLE_SCHEME="macOS Example" 10 | 11 | FASTLANE_EXPLICIT_OPEN_SIMULATOR=1 12 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Example/AFNetworking Example.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /fastlane/.env.default: -------------------------------------------------------------------------------- 1 | AF_IOS_SDK=iphonesimulator12.0 2 | AF_MAC_SDK=macosx10.14 3 | AF_TVOS_SDK=appletvsimulator12.0 4 | 5 | AF_CONFIGURATION=Release 6 | 7 | SCAN_WORKSPACE=$AF_WORKSPACE 8 | SCAN_SCHEME=$AF_IOS_FRAMEWORK_SCHEME 9 | SCAN_SDK=$AF_IOS_SDK 10 | SCAN_OUTPUT_DIRECTORY=fastlane/test-output 11 | 12 | EXAMPLE_WORKSPACE=$AF_WORKSPACE 13 | EXAMPLE_SCHEME=$AF_IOS_EXAMPLE_SCHEME 14 | EXAMPLE_DESTINATION="platform=iOS Simulator,name=iPhone 8" 15 | -------------------------------------------------------------------------------- /fastlane/.env.deploy: -------------------------------------------------------------------------------- 1 | DEPLOY_BRANCH=master 2 | DEPLOY_PLIST_PATH=Framework/Info.plist 3 | DEPLOY_PODSPEC=AFNetworking.podspec 4 | DEPLOY_REMOTE=origin 5 | 6 | DEPLOY_CHANGELOG_PATH=CHANGELOG.md 7 | DEPLOY_CHANGELOG_DELIMITER=--- 8 | 9 | # Used for CHANGELOG Generation and Github Release Management 10 | GITHUB_OWNER=AFNetworking 11 | GITHUB_REPOSITORY=AFNetworking 12 | # CI Should Provide GITHUB_API_TOKEN 13 | 14 | CARTHAGE_FRAMEWORK_NAME=AFNetworking -------------------------------------------------------------------------------- /Example/Assets.xcassets/profile-image-placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "profile-image-placeholder.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "profile-image-placeholder@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "landscape", 5 | "idiom" : "tv", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "11.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "tv", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "9.0", 15 | "scale" : "1x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | *.xcworkspace 13 | !default.xcworkspace 14 | xcuserdata 15 | profile 16 | *.moved-aside 17 | DerivedData 18 | .idea/ 19 | Tests/Pods 20 | Tests/Podfile.lock 21 | Tests/AFNetworking Tests.xcodeproj/xcshareddata/xcschemes/ 22 | AFNetworking.framework.zip 23 | 24 | # Fastlane 25 | /fastlane/report.xml 26 | /fastlane/.env*private* 27 | fastlane/test-output/* 28 | 29 | Carthage/Build 30 | 31 | fastlane/README.md 32 | -------------------------------------------------------------------------------- /Example/Prefix.pch: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #if __IPHONE_OS_VERSION_MIN_REQUIRED 4 | #ifndef __IPHONE_6_0 5 | #warning "This project uses features only available in iPhone SDK 6.0 and later." 6 | #endif 7 | 8 | #ifdef __OBJC__ 9 | #import 10 | #import 11 | #import 12 | #import 13 | #endif 14 | #else 15 | #ifdef __OBJC__ 16 | #import 17 | #import 18 | #import 19 | #import 20 | #endif 21 | #endif 22 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.alamofire.afnetworking.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/tvOS Example/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "size" : "1280x768", 5 | "idiom" : "tv", 6 | "filename" : "App Icon - Large.imagestack", 7 | "role" : "primary-app-icon" 8 | }, 9 | { 10 | "size" : "400x240", 11 | "idiom" : "tv", 12 | "filename" : "App Icon - Small.imagestack", 13 | "role" : "primary-app-icon" 14 | }, 15 | { 16 | "size" : "2320x720", 17 | "idiom" : "tv", 18 | "filename" : "Top Shelf Image Wide.imageset", 19 | "role" : "top-shelf-image-wide" 20 | }, 21 | { 22 | "size" : "1920x720", 23 | "idiom" : "tv", 24 | "filename" : "Top Shelf Image.imageset", 25 | "role" : "top-shelf-image" 26 | } 27 | ], 28 | "info" : { 29 | "version" : 1, 30 | "author" : "xcode" 31 | } 32 | } -------------------------------------------------------------------------------- /Framework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 3.2.1 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/watchOS Example/Base.lproj/Interface.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Example/AFNetworking watchOS/Base.lproj/Interface.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Example/tvOS Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | arm64 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Example/macOS Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2016 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/macOS Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /Example/watchOS Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | iOS Example 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | UISupportedInterfaceOrientations 26 | 27 | UIInterfaceOrientationPortrait 28 | UIInterfaceOrientationPortraitUpsideDown 29 | 30 | WKCompanionAppBundleIdentifier 31 | com.alamofire.iOS-Example 32 | WKWatchKitApp 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Example/AFNetworking watchOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | AFNetworking iOS Example 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | UISupportedInterfaceOrientations 26 | 27 | UIInterfaceOrientationPortrait 28 | UIInterfaceOrientationPortraitUpsideDown 29 | 30 | WKCompanionAppBundleIdentifier 31 | com.alamofire.AFNetworking-iOS-Example 32 | WKWatchKitApp 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Example/macOS Example/main.m: -------------------------------------------------------------------------------- 1 | // main.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | int main(int argc, const char * argv[]) { 25 | return NSApplicationMain(argc, argv); 26 | } 27 | -------------------------------------------------------------------------------- /Example/Today Extension Example/TodayViewController.h: -------------------------------------------------------------------------------- 1 | // TodayViewController.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @interface TodayViewController : UIViewController 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/ExtensionDelegate.h: -------------------------------------------------------------------------------- 1 | // ExtensionDelegate.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | @interface ExtensionDelegate : NSObject 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | watchOS Example Extension 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | NSExtension 26 | 27 | NSExtensionAttributes 28 | 29 | WKAppBundleIdentifier 30 | com.alamofire.iOS-Example.watchkitapp 31 | 32 | NSExtensionPointIdentifier 33 | com.apple.watchkit 34 | 35 | RemoteInterfacePrincipalClass 36 | InterfaceController 37 | WKExtensionDelegateClassName 38 | ExtensionDelegate 39 | 40 | 41 | -------------------------------------------------------------------------------- /Example/iOS Example/Controllers/GlobalTimelineViewController.h: -------------------------------------------------------------------------------- 1 | // GlobalTimelineViewController.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @interface GlobalTimelineViewController : UITableViewController 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/InterfaceController.h: -------------------------------------------------------------------------------- 1 | // InterfaceController.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #import 24 | 25 | @interface InterfaceController : WKInterfaceController 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIImage+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+AFNetworking.h 3 | // 4 | // 5 | // Created by Paulo Ferreira on 08/07/15. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | #if TARGET_OS_IOS || TARGET_OS_TV 26 | 27 | #import 28 | 29 | @interface UIImage (AFNetworking) 30 | 31 | + (UIImage *)safeImageWithData:(NSData *)data; 32 | 33 | @end 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /Example/watchOS Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "24x24", 5 | "idiom" : "watch", 6 | "scale" : "2x", 7 | "role" : "notificationCenter", 8 | "subtype" : "38mm" 9 | }, 10 | { 11 | "size" : "27.5x27.5", 12 | "idiom" : "watch", 13 | "scale" : "2x", 14 | "role" : "notificationCenter", 15 | "subtype" : "42mm" 16 | }, 17 | { 18 | "size" : "29x29", 19 | "idiom" : "watch", 20 | "role" : "companionSettings", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "size" : "29x29", 25 | "idiom" : "watch", 26 | "role" : "companionSettings", 27 | "scale" : "3x" 28 | }, 29 | { 30 | "size" : "40x40", 31 | "idiom" : "watch", 32 | "scale" : "2x", 33 | "role" : "appLauncher", 34 | "subtype" : "38mm" 35 | }, 36 | { 37 | "size" : "44x44", 38 | "idiom" : "watch", 39 | "scale" : "2x", 40 | "role" : "longLook", 41 | "subtype" : "42mm" 42 | }, 43 | { 44 | "size" : "86x86", 45 | "idiom" : "watch", 46 | "scale" : "2x", 47 | "role" : "quickLook", 48 | "subtype" : "38mm" 49 | }, 50 | { 51 | "size" : "98x98", 52 | "idiom" : "watch", 53 | "scale" : "2x", 54 | "role" : "quickLook", 55 | "subtype" : "42mm" 56 | } 57 | ], 58 | "info" : { 59 | "version" : 1, 60 | "author" : "xcode" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Example/AFNetworking watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "24x24", 5 | "idiom" : "watch", 6 | "scale" : "2x", 7 | "role" : "notificationCenter", 8 | "subtype" : "38mm" 9 | }, 10 | { 11 | "size" : "27.5x27.5", 12 | "idiom" : "watch", 13 | "scale" : "2x", 14 | "role" : "notificationCenter", 15 | "subtype" : "42mm" 16 | }, 17 | { 18 | "size" : "29x29", 19 | "idiom" : "watch", 20 | "role" : "companionSettings", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "size" : "29x29", 25 | "idiom" : "watch", 26 | "role" : "companionSettings", 27 | "scale" : "3x" 28 | }, 29 | { 30 | "size" : "40x40", 31 | "idiom" : "watch", 32 | "scale" : "2x", 33 | "role" : "appLauncher", 34 | "subtype" : "38mm" 35 | }, 36 | { 37 | "size" : "44x44", 38 | "idiom" : "watch", 39 | "scale" : "2x", 40 | "role" : "longLook", 41 | "subtype" : "42mm" 42 | }, 43 | { 44 | "size" : "86x86", 45 | "idiom" : "watch", 46 | "scale" : "2x", 47 | "role" : "quickLook", 48 | "subtype" : "38mm" 49 | }, 50 | { 51 | "size" : "98x98", 52 | "idiom" : "watch", 53 | "scale" : "2x", 54 | "role" : "quickLook", 55 | "subtype" : "42mm" 56 | } 57 | ], 58 | "info" : { 59 | "version" : 1, 60 | "author" : "xcode" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Example/Classes/Networking Extensions/AFAppDotNetAPIClient.h: -------------------------------------------------------------------------------- 1 | // AFAppDotNetAPIClient.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | @import AFNetworking; 25 | 26 | @interface AFAppDotNetAPIClient : AFHTTPSessionManager 27 | 28 | + (instancetype)sharedClient; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/iOS Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // AppDelegate.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @interface AppDelegate : NSObject 26 | 27 | @property (nonatomic, strong) UIWindow *window; 28 | @property (nonatomic, strong) UINavigationController *navigationController; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/iOS Example/Views/PostTableViewCell.h: -------------------------------------------------------------------------------- 1 | // TweetTableViewCell.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @class Post; 26 | 27 | @interface PostTableViewCell : UITableViewCell 28 | 29 | @property (nonatomic, strong) Post *post; 30 | 31 | + (CGFloat)heightForCellWithPost:(Post *)post; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Example/macOS Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // AppDelegate.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @interface AppDelegate : NSObject 26 | 27 | @property (strong) IBOutlet NSWindow *window; 28 | @property (strong) IBOutlet NSTableView *tableView; 29 | @property (strong) IBOutlet NSArrayController *postsArrayController; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Today Extension Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Today Extension Example 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | NSExtension 26 | 27 | NSExtensionMainStoryboard 28 | MainInterface 29 | NSExtensionPointIdentifier 30 | com.apple.widget-extension 31 | 32 | NSAppTransportSecurity 33 | 34 | NSExceptionDomains 35 | 36 | cloudfront.net 37 | 38 | NSIncludesSubdomains 39 | 40 | NSThirdPartyExceptionMinimumTLSVersion 41 | TLSv1.0 42 | NSThirdPartyExceptionRequiresForwardSecrecy 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Example/main.m: -------------------------------------------------------------------------------- 1 | // main.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #if TARGET_OS_IOS || TARGET_OS_TV 24 | #import 25 | 26 | int main(int argc, char *argv[]) { 27 | @autoreleasepool { 28 | int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate"); 29 | return retVal; 30 | } 31 | } 32 | #else 33 | #import 34 | 35 | int main(int argc, char *argv[]) { 36 | return NSApplicationMain(argc, (const char **)argv); 37 | } 38 | #endif 39 | -------------------------------------------------------------------------------- /AFNetworking/AFNetworking.h: -------------------------------------------------------------------------------- 1 | // AFNetworking.h 2 | // 3 | // Copyright (c) 2013 AFNetworking (http://afnetworking.com/) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | #import 25 | #import 26 | 27 | #ifndef _AFNETWORKING_ 28 | #define _AFNETWORKING_ 29 | 30 | #import "AFURLRequestSerialization.h" 31 | #import "AFURLResponseSerialization.h" 32 | #import "AFSecurityPolicy.h" 33 | 34 | #if !TARGET_OS_WATCH 35 | #import "AFNetworkReachabilityManager.h" 36 | #endif 37 | 38 | #import "AFURLSessionManager.h" 39 | #import "AFHTTPSessionManager.h" 40 | 41 | #endif /* _AFNETWORKING_ */ 42 | -------------------------------------------------------------------------------- /Example/Classes/Models/Post.h: -------------------------------------------------------------------------------- 1 | // Post.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | @class User; 26 | 27 | @interface Post : NSObject 28 | 29 | @property (nonatomic, assign) NSUInteger postID; 30 | @property (nonatomic, strong) NSString *text; 31 | 32 | @property (nonatomic, strong) User *user; 33 | 34 | - (instancetype)initWithAttributes:(NSDictionary *)attributes; 35 | 36 | + (NSURLSessionDataTask *)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block; 37 | 38 | @end 39 | 40 | @interface Post (NSCoding) 41 | @end 42 | -------------------------------------------------------------------------------- /Tests/Tests/AFTestCase.h: -------------------------------------------------------------------------------- 1 | // AFTestCase.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | @interface AFTestCase : XCTestCase 25 | 26 | @property (nonatomic, strong, readonly) NSURL *baseURL; 27 | @property (nonatomic, strong, readonly) NSURL *pngURL; 28 | @property (nonatomic, strong, readonly) NSURL *jpegURL; 29 | @property (nonatomic, strong, readonly) NSURL *delayURL; 30 | - (NSURL *)URLWithStatusCode:(NSInteger)statusCode; 31 | 32 | @property (nonatomic, assign) NSTimeInterval networkTimeout; 33 | 34 | - (void)waitForExpectationsWithCommonTimeout; 35 | - (void)waitForExpectationsWithCommonTimeoutUsingHandler:(XCWaitCompletionHandler)handler; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Classes/Models/User.h: -------------------------------------------------------------------------------- 1 | // User.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | extern NSString * const kUserProfileImageDidLoadNotification; 26 | 27 | @interface User : NSObject 28 | 29 | @property (readonly, nonatomic, assign) NSUInteger userID; 30 | @property (readonly, nonatomic, copy) NSString *username; 31 | @property (readonly, nonatomic, unsafe_unretained) NSURL *avatarImageURL; 32 | 33 | #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 34 | @property (nonatomic, strong) NSImage *profileImage; 35 | #endif 36 | 37 | - (instancetype)initWithAttributes:(NSDictionary *)attributes; 38 | 39 | @end 40 | 41 | @interface User (NSCoding) 42 | @end 43 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/InterfaceController.m: -------------------------------------------------------------------------------- 1 | // InterfaceController.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "InterfaceController.h" 23 | 24 | 25 | @interface InterfaceController() 26 | 27 | @end 28 | 29 | 30 | @implementation InterfaceController 31 | 32 | - (void)awakeWithContext:(id)context { 33 | [super awakeWithContext:context]; 34 | 35 | // Configure interface objects here. 36 | } 37 | 38 | - (void)willActivate { 39 | // This method is called when watch view controller is about to be visible to user 40 | [super willActivate]; 41 | } 42 | 43 | - (void)didDeactivate { 44 | // This method is called when watch view controller is no longer visible 45 | [super didDeactivate]; 46 | } 47 | 48 | @end 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIKit+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // UIKit+AFNetworking.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #if TARGET_OS_IOS || TARGET_OS_TV 24 | #import 25 | 26 | #ifndef _UIKIT_AFNETWORKING_ 27 | #define _UIKIT_AFNETWORKING_ 28 | 29 | #if TARGET_OS_IOS 30 | #import "AFAutoPurgingImageCache.h" 31 | #import "AFImageDownloader.h" 32 | #import "AFNetworkActivityIndicatorManager.h" 33 | #import "UIRefreshControl+AFNetworking.h" 34 | #import "UIWebView+AFNetworking.h" 35 | #endif 36 | 37 | #import "UIActivityIndicatorView+AFNetworking.h" 38 | #import "UIButton+AFNetworking.h" 39 | #import "UIImageView+AFNetworking.h" 40 | #import "UIProgressView+AFNetworking.h" 41 | #endif /* _UIKIT_AFNETWORKING_ */ 42 | #endif 43 | -------------------------------------------------------------------------------- /Example/Classes/Networking Extensions/AFAppDotNetAPIClient.m: -------------------------------------------------------------------------------- 1 | // AFAppDotNetAPIClient.h 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "AFAppDotNetAPIClient.h" 24 | 25 | static NSString * const AFAppDotNetAPIBaseURLString = @"https://api.app.net/"; 26 | 27 | @implementation AFAppDotNetAPIClient 28 | 29 | + (instancetype)sharedClient { 30 | static AFAppDotNetAPIClient *_sharedClient = nil; 31 | static dispatch_once_t onceToken; 32 | dispatch_once(&onceToken, ^{ 33 | _sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]]; 34 | _sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; 35 | }); 36 | 37 | return _sharedClient; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/iOS Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | AFNetworking 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIconFiles 14 | 15 | Icon.png 16 | Icon@2x.png 17 | 18 | CFBundleIcons 19 | 20 | CFBundleIcons~ipad 21 | 22 | CFBundleIdentifier 23 | $(PRODUCT_BUNDLE_IDENTIFIER) 24 | CFBundleInfoDictionaryVersion 25 | 6.0 26 | CFBundleName 27 | ${PRODUCT_NAME} 28 | CFBundlePackageType 29 | APPL 30 | CFBundleShortVersionString 31 | 1.0 32 | CFBundleSignature 33 | ???? 34 | CFBundleVersion 35 | 1.0.0 36 | LSRequiresIPhoneOS 37 | 38 | NSAppTransportSecurity 39 | 40 | NSExceptionDomains 41 | 42 | cloudfront.net 43 | 44 | NSIncludesSubdomains 45 | 46 | NSThirdPartyExceptionMinimumTLSVersion 47 | TLSv1.0 48 | NSThirdPartyExceptionRequiresForwardSecrecy 49 | 50 | 51 | 52 | 53 | UIBackgroundModes 54 | 55 | fetch 56 | 57 | UILaunchStoryboardName 58 | Launchscreen 59 | UIPrerenderedIcon 60 | 61 | UIStatusBarHidden 62 | 63 | UISupportedInterfaceOrientations 64 | 65 | UIInterfaceOrientationPortrait 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Example/watchOS Example Extension/ExtensionDelegate.m: -------------------------------------------------------------------------------- 1 | // ExtensionDelegate.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "ExtensionDelegate.h" 23 | 24 | @implementation ExtensionDelegate 25 | 26 | - (void)applicationDidFinishLaunching { 27 | // Perform any final initialization of your application. 28 | } 29 | 30 | - (void)applicationDidBecomeActive { 31 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 32 | } 33 | 34 | - (void)applicationWillResignActive { 35 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 36 | // Use this method to pause ongoing tasks, disable timers, etc. 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /AFNetworking/AFCompatibilityMacros.h: -------------------------------------------------------------------------------- 1 | // AFCompatibilityMacros.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #ifndef AFCompatibilityMacros_h 23 | #define AFCompatibilityMacros_h 24 | 25 | #ifdef API_UNAVAILABLE 26 | #define AF_API_UNAVAILABLE(x) API_UNAVAILABLE(x) 27 | #else 28 | #define AF_API_UNAVAILABLE(x) 29 | #endif // API_UNAVAILABLE 30 | 31 | #if __has_warning("-Wunguarded-availability-new") 32 | #define AF_CAN_USE_AT_AVAILABLE 1 33 | #else 34 | #define AF_CAN_USE_AT_AVAILABLE 0 35 | #endif 36 | 37 | #if ((__IPHONE_OS_VERSION_MAX_ALLOWED && __IPHONE_OS_VERSION_MAX_ALLOWED < 100000) || (__MAC_OS_VERSION_MAX_ALLOWED && __MAC_OS_VERSION_MAX_ALLOWED < 101200) ||(__WATCH_OS_MAX_VERSION_ALLOWED && __WATCH_OS_MAX_VERSION_ALLOWED < 30000) ||(__TV_OS_MAX_VERSION_ALLOWED && __TV_OS_MAX_VERSION_ALLOWED < 100000)) 38 | #define AF_CAN_INCLUDE_SESSION_TASK_METRICS 0 39 | #else 40 | #define AF_CAN_INCLUDE_SESSION_TASK_METRICS 1 41 | #endif 42 | 43 | #endif /* AFCompatibilityMacros_h */ 44 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode10 3 | sudo: false 4 | env: 5 | global: 6 | - LC_CTYPE=en_US.UTF-8 7 | - LANG=en_US.UTF-8 8 | - LANGUAGE=en_US.UTF-8 9 | - FASTLANE_LANE=ci_commit 10 | matrix: 11 | include: 12 | - osx_image: xcode10 13 | env: FASTLANE_LANE=code_coverage FASTLANE_ENV=default 14 | - osx_image: xcode10 15 | env: FASTLANE_ENV=ios12_xcode10 16 | - osx_image: xcode10 17 | env: FASTLANE_ENV=tvos12_xcode10 18 | - osx_image: xcode10 19 | env: FASTLANE_ENV=osx 20 | - osx_image: xcode9.4 21 | env: FASTLANE_ENV=ios11_xcode94 22 | - osx_image: xcode9.3 23 | env: FASTLANE_ENV=ios11_xcode93 24 | - osx_image: xcode9.2 25 | env: FASTLANE_ENV=ios11_xcode92 26 | - osx_image: xcode9.1 27 | env: FASTLANE_ENV=ios11_xcode91 28 | - osx_image: xcode9 29 | env: FASTLANE_ENV=ios11_xcode9 30 | - osx_image: xcode8.3 31 | env: FASTLANE_ENV=ios10_xcode8 32 | - osx_image: xcode7.3 33 | env: FASTLANE_ENV=ios9_xcode7 34 | - osx_image: xcode7.3 35 | env: FASTLANE_ENV=ios8_xcode7 36 | before_install: 37 | # Force bundler 1.12.5 because version 1.13 has issues, see https://github.com/fastlane/fastlane/issues/6065#issuecomment-246044617 38 | - gem uninstall bundler -v '>1.12.5' --force --executables || echo "bundler >1.12.5 is not installed" 39 | - gem install bundler -v 1.12.5 --no-rdoc --no-ri --no-document --quiet 40 | - gem install fastlane --no-rdoc --no-ri --no-document --quiet 41 | - gem install cocoapods --no-rdoc --no-ri --no-document --quiet 42 | script: 43 | - set -o pipefail 44 | - fastlane $FASTLANE_LANE configuration:Debug --env $FASTLANE_ENV 45 | - fastlane $FASTLANE_LANE configuration:Release --env $FASTLANE_ENV 46 | after_success: 47 | - if [ "$FASTLANE_LANE" == "code_coverage" ]; then 48 | bash <(curl -s https://codecov.io/bash); 49 | fi 50 | after_failure: 51 | - cat -n ~/Library/Logs/scan/* 52 | - cat -n $TMPDIR/com.apple.dt.XCTest-status/Session*.log 53 | - cat -n ~/Library/Logs/DiagnosticReports/xctest*.crash 54 | # deploy: 55 | # provider: script 56 | # script: fastlane complete_framework_release --env deploy 57 | # on: 58 | # tags: true 59 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // UIActivityIndicatorView+AFNetworking.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | #import 25 | 26 | #if TARGET_OS_IOS || TARGET_OS_TV 27 | 28 | #import 29 | 30 | /** 31 | This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a session task. 32 | */ 33 | @interface UIActivityIndicatorView (AFNetworking) 34 | 35 | ///---------------------------------- 36 | /// @name Animating for Session Tasks 37 | ///---------------------------------- 38 | 39 | /** 40 | Binds the animating state to the state of the specified task. 41 | 42 | @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. 43 | */ 44 | - (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task; 45 | 46 | @end 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIRefreshControl+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // UIRefreshControl+AFNetworking.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | 25 | #import 26 | 27 | #if TARGET_OS_IOS 28 | 29 | #import 30 | 31 | NS_ASSUME_NONNULL_BEGIN 32 | 33 | /** 34 | This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a session task. 35 | */ 36 | @interface UIRefreshControl (AFNetworking) 37 | 38 | ///----------------------------------- 39 | /// @name Refreshing for Session Tasks 40 | ///----------------------------------- 41 | 42 | /** 43 | Binds the refreshing state to the state of the specified task. 44 | 45 | @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled. 46 | */ 47 | - (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; 48 | 49 | @end 50 | 51 | NS_ASSUME_NONNULL_END 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /Example/iOS Example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // AppDelegate.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "AppDelegate.h" 24 | @import AFNetworking; 25 | 26 | #import "GlobalTimelineViewController.h" 27 | 28 | @implementation AppDelegate 29 | 30 | - (BOOL)application:(__unused UIApplication *)application didFinishLaunchingWithOptions:(__unused NSDictionary *)launchOptions 31 | { 32 | NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; 33 | [NSURLCache setSharedURLCache:URLCache]; 34 | 35 | [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 36 | 37 | UITableViewController *viewController = [[GlobalTimelineViewController alloc] initWithStyle:UITableViewStylePlain]; 38 | self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 39 | self.navigationController.navigationBar.tintColor = [UIColor darkGrayColor]; 40 | 41 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 42 | self.window.backgroundColor = [UIColor whiteColor]; 43 | self.window.rootViewController = self.navigationController; 44 | [self.window makeKeyAndVisible]; 45 | 46 | return YES; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Tests/Tests/AFTestCase.m: -------------------------------------------------------------------------------- 1 | // AFTestCase.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFTestCase.h" 23 | 24 | @implementation AFTestCase 25 | 26 | - (void)setUp { 27 | [super setUp]; 28 | self.networkTimeout = 20.0; 29 | } 30 | 31 | - (void)tearDown { 32 | [super tearDown]; 33 | } 34 | 35 | #pragma mark - 36 | 37 | - (NSURL *)baseURL { 38 | NSDictionary *environment = [[NSProcessInfo processInfo] environment]; 39 | return [NSURL URLWithString:environment[@"HTTPBIN_BASE_URL"] ?: @"https://httpbin.org"]; 40 | } 41 | 42 | - (NSURL *)pngURL { 43 | return [self.baseURL URLByAppendingPathComponent:@"image/png"]; 44 | } 45 | 46 | - (NSURL *)jpegURL { 47 | return [self.baseURL URLByAppendingPathComponent:@"image/jpeg"]; 48 | } 49 | 50 | - (NSURL *)delayURL { 51 | return [self.baseURL URLByAppendingPathComponent:@"delay/1"]; 52 | } 53 | 54 | - (NSURL *)URLWithStatusCode:(NSInteger)statusCode { 55 | return [self.baseURL URLByAppendingPathComponent:[NSString stringWithFormat:@"status/%@", @(statusCode)]]; 56 | } 57 | 58 | - (void)waitForExpectationsWithCommonTimeout { 59 | [self waitForExpectationsWithCommonTimeoutUsingHandler:nil]; 60 | } 61 | 62 | - (void)waitForExpectationsWithCommonTimeoutUsingHandler:(XCWaitCompletionHandler)handler { 63 | [self waitForExpectationsWithTimeout:self.networkTimeout handler:handler]; 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /Tests/Tests/AFPropertyListRequestSerializerTests.m: -------------------------------------------------------------------------------- 1 | // AFPropertyListRequestSerializerTests.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFTestCase.h" 23 | 24 | #import "AFURLRequestSerialization.h" 25 | 26 | @interface AFPropertyListRequestSerializerTests : AFTestCase 27 | @property (nonatomic, strong) AFPropertyListRequestSerializer *requestSerializer; 28 | @end 29 | 30 | @implementation AFPropertyListRequestSerializerTests 31 | 32 | - (void)setUp { 33 | [super setUp]; 34 | self.requestSerializer = [AFPropertyListRequestSerializer serializer]; 35 | } 36 | 37 | #pragma mark - 38 | 39 | - (void)testThatPropertyListRequestSerializerAcceptsPlist { 40 | NSDictionary *parameters = @{@"key":@"value"}; 41 | NSError *error = nil; 42 | NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:self.baseURL.absoluteString parameters:parameters error:&error]; 43 | 44 | XCTAssertNotNil(request, @"Expected non-nil request."); 45 | } 46 | 47 | - (void)testThatPropertyListRequestSerializerHandlesInvalidPlist { 48 | NSDictionary *parameters = @{@42:@"value"}; 49 | NSError *error = nil; 50 | NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:self.baseURL.absoluteString parameters:parameters error:&error]; 51 | 52 | XCTAssertNil(request, @"Expected nil request."); 53 | XCTAssertNotNil(error, @"Expected non-nil error."); 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-Small@2x.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-Small@3x.png", 23 | "scale" : "3x" 24 | }, 25 | { 26 | "size" : "40x40", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-40@2x.png", 29 | "scale" : "2x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-40@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "size" : "60x60", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-60@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "Icon-60@3x.png", 47 | "scale" : "3x" 48 | }, 49 | { 50 | "idiom" : "ipad", 51 | "size" : "20x20", 52 | "scale" : "1x" 53 | }, 54 | { 55 | "idiom" : "ipad", 56 | "size" : "20x20", 57 | "scale" : "2x" 58 | }, 59 | { 60 | "size" : "29x29", 61 | "idiom" : "ipad", 62 | "filename" : "Icon-Small.png", 63 | "scale" : "1x" 64 | }, 65 | { 66 | "size" : "29x29", 67 | "idiom" : "ipad", 68 | "filename" : "Icon-Small@2x.png", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "size" : "40x40", 73 | "idiom" : "ipad", 74 | "filename" : "Icon-40.png", 75 | "scale" : "1x" 76 | }, 77 | { 78 | "size" : "40x40", 79 | "idiom" : "ipad", 80 | "filename" : "Icon-40@2x.png", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "size" : "76x76", 85 | "idiom" : "ipad", 86 | "filename" : "Icon-76.png", 87 | "scale" : "1x" 88 | }, 89 | { 90 | "size" : "76x76", 91 | "idiom" : "ipad", 92 | "filename" : "Icon-76@2x.png", 93 | "scale" : "2x" 94 | }, 95 | { 96 | "idiom" : "ipad", 97 | "size" : "83.5x83.5", 98 | "scale" : "2x" 99 | }, 100 | { 101 | "idiom" : "ios-marketing", 102 | "size" : "1024x1024", 103 | "scale" : "1x" 104 | } 105 | ], 106 | "info" : { 107 | "version" : 1, 108 | "author" : "xcode" 109 | } 110 | } -------------------------------------------------------------------------------- /CONTRIBUTING_CH.md: -------------------------------------------------------------------------------- 1 | # 贡献指南 2 | 本文档包含有关为此项目做出贡献的信息和指南。 3 | 请在开始参加之前阅读。 4 | 5 | **主题** 6 | 7 | * [提问](#提问) 8 | * [报告安全问题](#报告安全问题) 9 | * [报告其他问题](#报告其他问题) 10 | * [提交拉取请求](#提交拉取请求) 11 | * [开发人员原产地证书](#开发人员原产地证书-1.1) 12 | * [行为守则](#行为守则) 13 | 14 | ## 提问 15 | 16 | 我们不使用GitHub的论坛发表问题 17 | 对于任何非特定于项目本身的使用问题, 18 | 请直接在[Stack Overflow](https://stackoverflow.com)上询问。 19 | 通过此方法,你可以快速解决您的问题, 20 | 并且任何有相同问题的人可以找到答案。 21 | 这也使维护人员能够专注于为其他人改进项目。 22 | 23 | ## 报告安全问题 24 | 25 | Alamofire Software Foundation 认真对待安全问题。 26 | 如果您发现任何关于安全的问题,请立即通知我们! 27 | 28 | 请**不要**公然公开发布问题, 29 | 而是将您的问题私下发送到。 30 | 这将有于帮助确保发现的任何漏洞 31 | 可以[披露制度](http://en.wikipedia.org/wiki/Responsible_disclosure) 32 | 对任何受影响的各方 33 | 34 | ## 报告其他问题 35 | 36 | 为此项目贡献的方法 37 | 是当遇到问题时,请发送一篇详细的错误报告。 38 | 我们会感谢您写出的一份精心编写的详尽错误报告。 39 | 40 | 在提交问题之前,请检查项目里的问题数据库是否已存在此问题。 41 | 如果您找到匹配项,请添加“+1”或“我也遇到此问题”。 42 | 这样做有助于确定最常见问题和请求的优先级。 43 | 44 | 报告问题时,请包含以下内容: 45 | 46 | * 您正在使用的Xcode版本 47 | * 您的iOS或OS X版本 48 | * 任何堆栈轨迹或编译器错误的完整输出 49 | * 如果代码段可再现所描述的行为 50 | * 任何其他有助于理解问题的细节 51 | 52 | 此信息有助于我们更快地查看和修复您的问题。 53 | 54 | ## 提交拉取请求 55 | 56 | 大力鼓励和欢迎拉取请求。在提交拉取请求时,请创建适当的测试用例,说明修复的问题或新功能。 57 | 58 | ## 开发人员原产地证书 1.1 59 | 60 | 为了项目做出贡献,我保证: 61 | 62 | - (a) The contribution was created in whole or in part by me and I 63 | have the right to submit it under the open source license 64 | indicated in the file; or 65 | 66 | - (b) The contribution is based upon previous work that, to the best 67 | of my knowledge, is covered under an appropriate open source 68 | license and I have the right under that license to submit that 69 | work with modifications, whether created in whole or in part 70 | by me, under the same open source license (unless I am 71 | permitted to submit under a different license), as indicated 72 | in the file; or 73 | 74 | - (c) The contribution was provided directly to me by some other 75 | person who certified (a), (b) or (c) and I have not modified 76 | it. 77 | 78 | - (d) I understand and agree that this project and the contribution 79 | are public and that a record of the contribution (including all 80 | personal information I submit with it, including my sign-off) is 81 | maintained indefinitely and may be redistributed consistent with 82 | this project or the open source license(s) involved. 83 | 84 | ## 行为守则 85 | 86 | 该项目采取贡献者公约为准则。 87 | 88 | 这项目的成果将会被我们的行为或行动影响。 89 | 90 | 我们期望每个为此项目做出贡献的人都会对此表示敬意。 91 | 92 | 详情请阅读 [CONDUCT.md](https://github.com/Alamofire/Foundation/blob/master/CONDUCT.md)。 93 | 94 | ---- 95 | 96 | *上述陈述的一些想法和措辞是基于 [Docker](https://github.com/docker/docker/blob/master/CONTRIBUTING.md) 和 [Linux](http://elinux.org/Developer_Certificate_Of_Origin) 社区. 97 | 我们表彰和感激他们为促进项目合作所做的付出。* 98 | -------------------------------------------------------------------------------- /Example/macOS Example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // AppDelegate.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "AppDelegate.h" 24 | @import AFNetworking; 25 | 26 | #import "Post.h" 27 | #import "User.h" 28 | 29 | @implementation AppDelegate 30 | 31 | - (void)applicationDidFinishLaunching:(NSNotification *)notification { 32 | NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; 33 | [NSURLCache setSharedURLCache:URLCache]; 34 | 35 | [self.window makeKeyAndOrderFront:self]; 36 | 37 | [Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) { 38 | if (error) { 39 | NSAlert *alert = [[NSAlert alloc] init]; 40 | alert.messageText = NSLocalizedString(@"Error", nil); 41 | alert.informativeText = error.localizedDescription; 42 | [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]; 43 | [alert runModal]; 44 | } 45 | 46 | self.postsArrayController.content = posts; 47 | }]; 48 | 49 | [[NSNotificationCenter defaultCenter] addObserverForName:kUserProfileImageDidLoadNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { 50 | [self.tableView reloadData]; 51 | }]; 52 | } 53 | 54 | - (BOOL)applicationShouldHandleReopen:(NSApplication *)application 55 | hasVisibleWindows:(BOOL)flag 56 | { 57 | [self.window makeKeyAndOrderFront:self]; 58 | 59 | return YES; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIProgressView+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // UIProgressView+AFNetworking.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | #import 25 | 26 | #if TARGET_OS_IOS || TARGET_OS_TV 27 | 28 | #import 29 | 30 | NS_ASSUME_NONNULL_BEGIN 31 | 32 | 33 | /** 34 | This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task. 35 | */ 36 | @interface UIProgressView (AFNetworking) 37 | 38 | ///------------------------------------ 39 | /// @name Setting Session Task Progress 40 | ///------------------------------------ 41 | 42 | /** 43 | Binds the progress to the upload progress of the specified session task. 44 | 45 | @param task The session task. 46 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. 47 | */ 48 | - (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task 49 | animated:(BOOL)animated; 50 | 51 | /** 52 | Binds the progress to the download progress of the specified session task. 53 | 54 | @param task The session task. 55 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately. 56 | */ 57 | - (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task 58 | animated:(BOOL)animated; 59 | 60 | @end 61 | 62 | NS_ASSUME_NONNULL_END 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /Framework/AFNetworking.h: -------------------------------------------------------------------------------- 1 | // AFNetworking.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | //! Project version number for AFNetworking. 25 | FOUNDATION_EXPORT double AFNetworkingVersionNumber; 26 | 27 | //! Project version string for AFNetworking. 28 | FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[]; 29 | 30 | // In this header, you should import all the public headers of your framework using statements like #import 31 | 32 | #import 33 | #import 34 | 35 | #ifndef _AFNETWORKING_ 36 | #define _AFNETWORKING_ 37 | 38 | #import 39 | #import 40 | #import 41 | #import 42 | 43 | #if !TARGET_OS_WATCH 44 | #import 45 | #endif 46 | 47 | #import 48 | #import 49 | 50 | #if TARGET_OS_IOS || TARGET_OS_TV 51 | #import 52 | #import 53 | #import 54 | #import 55 | #import 56 | #import 57 | #import 58 | #endif 59 | 60 | #if TARGET_OS_IOS 61 | #import 62 | #import 63 | #import 64 | #endif 65 | 66 | 67 | #endif /* _AFNETWORKING_ */ 68 | -------------------------------------------------------------------------------- /AFNetworking.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'AFNetworking' 3 | s.version = '3.2.1' 4 | s.license = 'MIT' 5 | s.summary = 'A delightful iOS and OS X networking framework.' 6 | s.homepage = 'https://github.com/AFNetworking/AFNetworking' 7 | s.social_media_url = 'https://twitter.com/AFNetworking' 8 | s.authors = { 'Mattt Thompson' => 'm@mattt.me' } 9 | s.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git', :tag => s.version, :submodules => true } 10 | s.requires_arc = true 11 | 12 | s.public_header_files = 'AFNetworking/AFNetworking.h' 13 | s.source_files = 'AFNetworking/AFNetworking.h' 14 | 15 | pch_AF = <<-EOS 16 | #ifndef TARGET_OS_IOS 17 | #define TARGET_OS_IOS TARGET_OS_IPHONE 18 | #endif 19 | 20 | #ifndef TARGET_OS_WATCH 21 | #define TARGET_OS_WATCH 0 22 | #endif 23 | 24 | #ifndef TARGET_OS_TV 25 | #define TARGET_OS_TV 0 26 | #endif 27 | EOS 28 | s.prefix_header_contents = pch_AF 29 | 30 | s.ios.deployment_target = '8.0' 31 | s.osx.deployment_target = '10.9' 32 | s.watchos.deployment_target = '2.0' 33 | s.tvos.deployment_target = '9.0' 34 | 35 | s.subspec 'Serialization' do |ss| 36 | ss.source_files = 'AFNetworking/AFURL{Request,Response}Serialization.{h,m}' 37 | ss.public_header_files = 'AFNetworking/AFURL{Request,Response}Serialization.h' 38 | ss.watchos.frameworks = 'MobileCoreServices', 'CoreGraphics' 39 | ss.ios.frameworks = 'MobileCoreServices', 'CoreGraphics' 40 | ss.osx.frameworks = 'CoreServices' 41 | end 42 | 43 | s.subspec 'Security' do |ss| 44 | ss.source_files = 'AFNetworking/AFSecurityPolicy.{h,m}' 45 | ss.public_header_files = 'AFNetworking/AFSecurityPolicy.h' 46 | ss.frameworks = 'Security' 47 | end 48 | 49 | s.subspec 'Reachability' do |ss| 50 | ss.ios.deployment_target = '8.0' 51 | ss.osx.deployment_target = '10.9' 52 | ss.tvos.deployment_target = '9.0' 53 | 54 | ss.source_files = 'AFNetworking/AFNetworkReachabilityManager.{h,m}' 55 | ss.public_header_files = 'AFNetworking/AFNetworkReachabilityManager.h' 56 | 57 | ss.frameworks = 'SystemConfiguration' 58 | end 59 | 60 | s.subspec 'NSURLSession' do |ss| 61 | ss.dependency 'AFNetworking/Serialization' 62 | ss.ios.dependency 'AFNetworking/Reachability' 63 | ss.osx.dependency 'AFNetworking/Reachability' 64 | ss.tvos.dependency 'AFNetworking/Reachability' 65 | ss.dependency 'AFNetworking/Security' 66 | 67 | ss.source_files = 'AFNetworking/AF{URL,HTTP}SessionManager.{h,m}', 'AFNetworking/AFCompatibilityMacros.h' 68 | ss.public_header_files = 'AFNetworking/AF{URL,HTTP}SessionManager.h', 'AFNetworking/AFCompatibilityMacros.h' 69 | end 70 | 71 | s.subspec 'UIKit' do |ss| 72 | ss.ios.deployment_target = '8.0' 73 | ss.tvos.deployment_target = '9.0' 74 | ss.dependency 'AFNetworking/NSURLSession' 75 | 76 | ss.public_header_files = 'UIKit+AFNetworking/*.h' 77 | ss.source_files = 'UIKit+AFNetworking' 78 | end 79 | end 80 | -------------------------------------------------------------------------------- /Example/tvOS Example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // ViewController.swift 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | import UIKit 23 | 24 | class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 25 | 26 | @IBOutlet var collectionView: UICollectionView! 27 | var gravatars: [Gravatar] = [] 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | 32 | for _ in 1...100 { 33 | let gravatar = Gravatar( 34 | emailAddress: UUID().uuidString, 35 | defaultImage: Gravatar.DefaultImage.Identicon, 36 | forceDefault: true 37 | ) 38 | 39 | gravatars.append(gravatar) 40 | } 41 | } 42 | 43 | override func didReceiveMemoryWarning() { 44 | super.didReceiveMemoryWarning() 45 | // Dispose of any resources that can be recreated. 46 | } 47 | 48 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 49 | return gravatars.count 50 | } 51 | 52 | func numberOfSections(in collectionView: UICollectionView) -> Int { 53 | return 1 54 | } 55 | 56 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 57 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell 58 | cell.update(forGravatar: gravatars[(indexPath as NSIndexPath).item]) 59 | return cell 60 | } 61 | 62 | func collectionView(_ collectionView: UICollectionView, canFocusItemAt indexPath: IndexPath) -> Bool { 63 | return true 64 | } 65 | 66 | } 67 | 68 | class CollectionViewCell : UICollectionViewCell { 69 | @IBOutlet var avatarView: UIImageView! 70 | 71 | override func prepareForReuse() { 72 | self.avatarView.image = nil 73 | } 74 | 75 | func update(forGravatar gravatar:Gravatar) { 76 | self.avatarView.setImageWith(gravatar.URL(size: self.bounds.size.width) as URL) 77 | } 78 | } 79 | 80 | -------------------------------------------------------------------------------- /AFNetworking.xcodeproj/xcshareddata/xcschemes/AFNetworking watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Example/iOS Example/Views/PostTableViewCell.m: -------------------------------------------------------------------------------- 1 | // TweetTableViewCell.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "PostTableViewCell.h" 24 | 25 | #import "Post.h" 26 | #import "User.h" 27 | 28 | @import AFNetworking; 29 | 30 | @implementation PostTableViewCell 31 | 32 | - (instancetype)initWithStyle:(UITableViewCellStyle)style 33 | reuseIdentifier:(NSString *)reuseIdentifier 34 | { 35 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 36 | if (!self) { 37 | return nil; 38 | } 39 | 40 | self.textLabel.adjustsFontSizeToFitWidth = YES; 41 | self.textLabel.textColor = [UIColor darkGrayColor]; 42 | self.detailTextLabel.font = [UIFont systemFontOfSize:12.0f]; 43 | self.detailTextLabel.numberOfLines = 0; 44 | self.selectionStyle = UITableViewCellSelectionStyleGray; 45 | 46 | return self; 47 | } 48 | 49 | - (void)setPost:(Post *)post { 50 | _post = post; 51 | 52 | self.textLabel.text = _post.user.username; 53 | self.detailTextLabel.text = _post.text; 54 | [self.imageView setImageWithURL:_post.user.avatarImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]]; 55 | 56 | [self setNeedsLayout]; 57 | } 58 | 59 | + (CGFloat)heightForCellWithPost:(Post *)post { 60 | return (CGFloat)fmaxf(70.0f, (float)[self detailTextHeight:post.text] + 45.0f); 61 | } 62 | 63 | + (CGFloat)detailTextHeight:(NSString *)text { 64 | CGRect rectToFit = [text boundingRectWithSize:CGSizeMake(240.0f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12.0f]} context:nil]; 65 | return rectToFit.size.height; 66 | } 67 | 68 | #pragma mark - UIView 69 | 70 | - (void)layoutSubviews { 71 | [super layoutSubviews]; 72 | 73 | self.imageView.frame = CGRectMake(10.0f, 10.0f, 50.0f, 50.0f); 74 | self.textLabel.frame = CGRectMake(70.0f, 6.0f, 240.0f, 20.0f); 75 | 76 | CGRect detailTextLabelFrame = CGRectOffset(self.textLabel.frame, 0.0f, 25.0f); 77 | CGFloat calculatedHeight = [[self class] detailTextHeight:self.post.text]; 78 | detailTextLabelFrame.size.height = calculatedHeight; 79 | self.detailTextLabel.frame = detailTextLabelFrame; 80 | } 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /Example/tvOS Example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // AppDelegate.swift 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | import UIKit 23 | 24 | @UIApplicationMain 25 | class AppDelegate: UIResponder, UIApplicationDelegate { 26 | 27 | var window: UIWindow? 28 | 29 | 30 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 31 | // Override point for customization after application launch. 32 | return true 33 | } 34 | 35 | func applicationWillResignActive(_ application: UIApplication) { 36 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 37 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 38 | } 39 | 40 | func applicationDidEnterBackground(_ application: UIApplication) { 41 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 42 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 43 | } 44 | 45 | func applicationWillEnterForeground(_ application: UIApplication) { 46 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 47 | } 48 | 49 | func applicationDidBecomeActive(_ application: UIApplication) { 50 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 51 | } 52 | 53 | func applicationWillTerminate(_ application: UIApplication) { 54 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 55 | } 56 | 57 | 58 | } 59 | 60 | -------------------------------------------------------------------------------- /Example/Classes/Models/Post.m: -------------------------------------------------------------------------------- 1 | // Post.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "Post.h" 24 | #import "User.h" 25 | 26 | #import "AFAppDotNetAPIClient.h" 27 | 28 | @implementation Post 29 | 30 | - (instancetype)initWithAttributes:(NSDictionary *)attributes { 31 | self = [super init]; 32 | if (!self) { 33 | return nil; 34 | } 35 | 36 | self.postID = (NSUInteger)[[attributes valueForKeyPath:@"id"] integerValue]; 37 | self.text = [attributes valueForKeyPath:@"text"]; 38 | 39 | self.user = [[User alloc] initWithAttributes:[attributes valueForKeyPath:@"user"]]; 40 | 41 | return self; 42 | } 43 | 44 | #pragma mark - 45 | 46 | + (NSURLSessionDataTask *)globalTimelinePostsWithBlock:(void (^)(NSArray *posts, NSError *error))block { 47 | return [[AFAppDotNetAPIClient sharedClient] GET:@"stream/0/posts/stream/global" parameters:nil progress:nil success:^(NSURLSessionDataTask * __unused task, id JSON) { 48 | NSArray *postsFromResponse = [JSON valueForKeyPath:@"data"]; 49 | NSMutableArray *mutablePosts = [NSMutableArray arrayWithCapacity:[postsFromResponse count]]; 50 | for (NSDictionary *attributes in postsFromResponse) { 51 | Post *post = [[Post alloc] initWithAttributes:attributes]; 52 | [mutablePosts addObject:post]; 53 | } 54 | 55 | if (block) { 56 | block([NSArray arrayWithArray:mutablePosts], nil); 57 | } 58 | } failure:^(NSURLSessionDataTask *__unused task, NSError *error) { 59 | if (block) { 60 | block([NSArray array], error); 61 | } 62 | }]; 63 | } 64 | 65 | @end 66 | 67 | @implementation Post (NSCoding) 68 | 69 | - (void)encodeWithCoder:(NSCoder *)aCoder { 70 | [aCoder encodeInteger:(NSInteger)self.postID forKey:@"AF.postID"]; 71 | [aCoder encodeObject:self.text forKey:@"AF.text"]; 72 | [aCoder encodeObject:self.user forKey:@"AF.user"]; 73 | } 74 | 75 | - (instancetype)initWithCoder:(NSCoder *)aDecoder { 76 | self = [super init]; 77 | if (!self) { 78 | return nil; 79 | } 80 | 81 | self.postID = (NSUInteger)[aDecoder decodeIntegerForKey:@"AF.postID"]; 82 | self.text = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"AF.text"]; 83 | self.user = [aDecoder decodeObjectOfClass:[User class] forKey:@"AF.user"]; 84 | 85 | return self; 86 | } 87 | 88 | + (BOOL)supportsSecureCoding { 89 | return YES; 90 | } 91 | 92 | @end 93 | -------------------------------------------------------------------------------- /Example/iOS Example/Controllers/GlobalTimelineViewController.m: -------------------------------------------------------------------------------- 1 | // GlobalTimelineViewController.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "GlobalTimelineViewController.h" 24 | 25 | #import "Post.h" 26 | 27 | #import "PostTableViewCell.h" 28 | 29 | @import AFNetworking; 30 | 31 | @interface GlobalTimelineViewController () 32 | @property (readwrite, nonatomic, strong) NSArray *posts; 33 | @end 34 | 35 | @implementation GlobalTimelineViewController 36 | 37 | - (void)reload:(__unused id)sender { 38 | self.navigationItem.rightBarButtonItem.enabled = NO; 39 | 40 | NSURLSessionTask *task = [Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) { 41 | if (!error) { 42 | self.posts = posts; 43 | [self.tableView reloadData]; 44 | } 45 | }]; 46 | 47 | [self.refreshControl setRefreshingWithStateOfTask:task]; 48 | } 49 | 50 | #pragma mark - UIViewController 51 | 52 | - (void)viewDidLoad { 53 | [super viewDidLoad]; 54 | 55 | self.title = NSLocalizedString(@"AFNetworking", nil); 56 | 57 | self.refreshControl = [[UIRefreshControl alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.frame.size.width, 100.0f)]; 58 | [self.refreshControl addTarget:self action:@selector(reload:) forControlEvents:UIControlEventValueChanged]; 59 | [self.tableView.tableHeaderView addSubview:self.refreshControl]; 60 | 61 | self.tableView.rowHeight = 70.0f; 62 | 63 | [self reload:nil]; 64 | } 65 | 66 | #pragma mark - UITableViewDataSource 67 | 68 | - (NSInteger)tableView:(__unused UITableView *)tableView 69 | numberOfRowsInSection:(__unused NSInteger)section 70 | { 71 | return (NSInteger)[self.posts count]; 72 | } 73 | 74 | - (UITableViewCell *)tableView:(UITableView *)tableView 75 | cellForRowAtIndexPath:(NSIndexPath *)indexPath 76 | { 77 | static NSString *CellIdentifier = @"Cell"; 78 | 79 | PostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 80 | if (!cell) { 81 | cell = [[PostTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 82 | } 83 | 84 | cell.post = self.posts[(NSUInteger)indexPath.row]; 85 | 86 | return cell; 87 | } 88 | 89 | #pragma mark - UITableViewDelegate 90 | 91 | - (CGFloat)tableView:(__unused UITableView *)tableView 92 | heightForRowAtIndexPath:(NSIndexPath *)indexPath 93 | { 94 | return [PostTableViewCell heightForCellWithPost:self.posts[(NSUInteger)indexPath.row]]; 95 | } 96 | 97 | - (void)tableView:(UITableView *)tableView 98 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath 99 | { 100 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 101 | } 102 | 103 | @end 104 | -------------------------------------------------------------------------------- /Example/Today Extension Example/TodayViewController.m: -------------------------------------------------------------------------------- 1 | // TodayViewController.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import 24 | #import "TodayViewController.h" 25 | #import "Post.h" 26 | #import "User.h" 27 | @import AFNetworking; 28 | 29 | @interface TodayViewController () 30 | @property (strong, nonatomic) IBOutlet UIImageView *imageView; 31 | @property (strong, nonatomic) IBOutlet UILabel *titleLabel; 32 | @property (strong, nonatomic) IBOutlet UILabel *bodyLabel; 33 | @property (nonatomic, strong) Post *post; 34 | @end 35 | 36 | @implementation TodayViewController 37 | 38 | - (void)viewDidLoad { 39 | [super viewDidLoad]; 40 | 41 | NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; 42 | [NSURLCache setSharedURLCache:URLCache]; 43 | self.post = [self loadSavedPost]; 44 | } 45 | 46 | - (void)viewWillAppear:(BOOL)animated { 47 | [super viewWillAppear:animated]; 48 | } 49 | 50 | - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { 51 | [Post globalTimelinePostsWithBlock:^(NSArray *posts, NSError *error) { 52 | if (!error) { 53 | 54 | self.post = posts.firstObject; 55 | [self savePost:self.post]; 56 | 57 | if (completionHandler) { 58 | completionHandler(self.post != nil ? NCUpdateResultNewData : NCUpdateResultNoData); 59 | } 60 | 61 | } else { 62 | if (completionHandler) { 63 | completionHandler(NCUpdateResultFailed); 64 | } 65 | } 66 | }]; 67 | } 68 | 69 | - (void)setPost:(Post *)post { 70 | _post = post; 71 | 72 | self.titleLabel.hidden = post == nil; 73 | self.bodyLabel.hidden = post == nil; 74 | self.imageView.hidden = post == nil; 75 | 76 | if (post == nil) { 77 | return; 78 | } 79 | 80 | self.titleLabel.text = _post.user.username; 81 | self.bodyLabel.text = _post.text; 82 | [self.imageView setImageWithURL:_post.user.avatarImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]]; 83 | } 84 | 85 | - (void)savePost:(Post *)post { 86 | 87 | if (post == nil) { 88 | [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AF.post"]; 89 | [[NSUserDefaults standardUserDefaults] synchronize]; 90 | return; 91 | } 92 | 93 | NSData *postData = [NSKeyedArchiver archivedDataWithRootObject:post]; 94 | [[NSUserDefaults standardUserDefaults] setObject:postData forKey:@"AF.post"]; 95 | [[NSUserDefaults standardUserDefaults] synchronize]; 96 | } 97 | 98 | - (Post *)loadSavedPost { 99 | NSData *postData = [[NSUserDefaults standardUserDefaults] objectForKey:@"AF.post"]; 100 | if (postData == nil || ![postData isKindOfClass:[NSData class]]) { 101 | return nil; 102 | } 103 | 104 | return [NSKeyedUnarchiver unarchiveObjectWithData:postData]; 105 | } 106 | 107 | @end 108 | -------------------------------------------------------------------------------- /Example/tvOS Example/Gravatar.swift: -------------------------------------------------------------------------------- 1 | // Gravatar.swift 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | import Foundation 24 | import UIKit 25 | 26 | private extension String { 27 | var md5_hash: String { 28 | let trimmedString = lowercased().trimmingCharacters(in: CharacterSet.whitespaces) 29 | let utf8String = trimmedString.cString(using: String.Encoding.utf8)! 30 | let stringLength = CC_LONG(trimmedString.lengthOfBytes(using: String.Encoding.utf8)) 31 | let digestLength = Int(CC_MD5_DIGEST_LENGTH) 32 | let result = UnsafeMutablePointer.allocate(capacity: digestLength) 33 | 34 | CC_MD5(utf8String, stringLength, result) 35 | 36 | var hash = "" 37 | 38 | for i in 0.. Foundation.URL { 102 | let URL = Gravatar.baseURL.appendingPathComponent(email.md5_hash) 103 | var components = URLComponents(url: URL, resolvingAgainstBaseURL: false)! 104 | 105 | var queryItems = [defaultImage.queryItem, rating.queryItem] 106 | queryItems.append(URLQueryItem(name: "f", value: forceDefault ? "y" : "n")) 107 | queryItems.append(URLQueryItem(name: "s", value: String(format: "%.0f",size * scale))) 108 | 109 | components.queryItems = queryItems 110 | 111 | return components.url! 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | This document contains information and guidelines about contributing to this project. 4 | Please read it before you start participating. 5 | 6 | **Topics** 7 | 8 | * [Asking Questions](#asking-questions) 9 | * [Reporting Security Issues](#reporting-security-issues) 10 | * [Reporting Issues](#reporting-other-issues) 11 | * [Submitting Pull Requests](#submitting-pull-requests) 12 | * [Developers Certificate of Origin](#developers-certificate-of-origin) 13 | * [Code of Conduct](#code-of-conduct) 14 | 15 | ## Asking Questions 16 | 17 | We don't use GitHub as a support forum. 18 | For any usage questions that are not specific to the project itself, 19 | please ask on [Stack Overflow](https://stackoverflow.com) instead. 20 | By doing so, you'll be more likely to quickly solve your problem, 21 | and you'll allow anyone else with the same question to find the answer. 22 | This also allows maintainers to focus on improving the project for others. 23 | 24 | ## Reporting Security Issues 25 | 26 | The Alamofire Software Foundation takes security seriously. 27 | If you discover a security issue, please bring it to our attention right away! 28 | 29 | Please **DO NOT** file a public issue, 30 | instead send your report privately to . 31 | This will help ensure that any vulnerabilities that _are_ found 32 | can be [disclosed responsibly](http://en.wikipedia.org/wiki/Responsible_disclosure) 33 | to any affected parties. 34 | 35 | ## Reporting Other Issues 36 | 37 | A great way to contribute to the project 38 | is to send a detailed issue when you encounter an problem. 39 | We always appreciate a well-written, thorough bug report. 40 | 41 | Check that the project issues database 42 | doesn't already include that problem or suggestion before submitting an issue. 43 | If you find a match, add a quick "+1" or "I have this problem too." 44 | Doing this helps prioritize the most common problems and requests. 45 | 46 | When reporting issues, please include the following: 47 | 48 | * The version of Xcode you're using 49 | * The version of iOS or OS X you're targeting 50 | * The full output of any stack trace or compiler error 51 | * A code snippet that reproduces the described behavior, if applicable 52 | * Any other details that would be useful in understanding the problem 53 | 54 | This information will help us review and fix your issue faster. 55 | 56 | ## Submitting Pull Requests 57 | 58 | Pull requests are welcome, and greatly encouraged. When submitting a pull request, please create proper test cases demonstrating the issue to be fixed or the new feature. 59 | 60 | ## Developer's Certificate of Origin 1.1 61 | 62 | By making a contribution to this project, I certify that: 63 | 64 | - (a) The contribution was created in whole or in part by me and I 65 | have the right to submit it under the open source license 66 | indicated in the file; or 67 | 68 | - (b) The contribution is based upon previous work that, to the best 69 | of my knowledge, is covered under an appropriate open source 70 | license and I have the right under that license to submit that 71 | work with modifications, whether created in whole or in part 72 | by me, under the same open source license (unless I am 73 | permitted to submit under a different license), as indicated 74 | in the file; or 75 | 76 | - (c) The contribution was provided directly to me by some other 77 | person who certified (a), (b) or (c) and I have not modified 78 | it. 79 | 80 | - (d) I understand and agree that this project and the contribution 81 | are public and that a record of the contribution (including all 82 | personal information I submit with it, including my sign-off) is 83 | maintained indefinitely and may be redistributed consistent with 84 | this project or the open source license(s) involved. 85 | 86 | ## Code of Conduct 87 | 88 | The Code of Conduct governs how we behave in public or in private 89 | whenever the project will be judged by our actions. 90 | We expect it to be honored by everyone who contributes to this project. 91 | 92 | See [CONDUCT.md](https://github.com/Alamofire/Foundation/blob/master/CONDUCT.md) for details. 93 | 94 | --- 95 | 96 | *Some of the ideas and wording for the statements above were based on work by the [Docker](https://github.com/docker/docker/blob/master/CONTRIBUTING.md) and [Linux](http://elinux.org/Developer_Certificate_Of_Origin) communities. We commend them for their efforts to facilitate collaboration in their projects.* 97 | -------------------------------------------------------------------------------- /Example/iOS Example/Launchscreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Tests/Tests/AFXMLParserResponseSerializerTests.m: -------------------------------------------------------------------------------- 1 | // AFXMLParserResponseSerializerTests.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFTestCase.h" 23 | 24 | #import "AFURLRequestSerialization.h" 25 | #import "AFURLResponseSerialization.h" 26 | 27 | static NSData * AFXMLTestData() { 28 | return [@"someValue" dataUsingEncoding:NSUTF8StringEncoding]; 29 | } 30 | 31 | #pragma mark - 32 | 33 | @interface AFXMLParserResponseSerializerTests : AFTestCase 34 | @property (nonatomic, strong) AFXMLParserResponseSerializer *responseSerializer; 35 | @end 36 | 37 | #pragma mark - 38 | 39 | @implementation AFXMLParserResponseSerializerTests 40 | 41 | - (void)setUp { 42 | [super setUp]; 43 | self.responseSerializer = [AFXMLParserResponseSerializer serializer]; 44 | } 45 | 46 | - (void)testThatXMLParserResponseSerializerAcceptsApplicationXMLMimeType { 47 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/xml"}]; 48 | NSError *error = nil; 49 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 50 | 51 | XCTAssertNil(error, @"Error handling application/xml"); 52 | } 53 | 54 | - (void)testThatXMLParserResponseSerializerAcceptsTextXMLMimeType { 55 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/xml"}]; 56 | NSError *error = nil; 57 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 58 | 59 | XCTAssertNil(error, @"Error handling text/xml"); 60 | } 61 | 62 | - (void)testThatXMLParserResponseSerializerDoesNotAcceptsNonStandardXMLMimeType { 63 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"nonstandard/xml"}]; 64 | NSError *error = nil; 65 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 66 | 67 | XCTAssertNotNil(error, @"Error should have been thrown for nonstandard/xml"); 68 | } 69 | 70 | - (void)testThatXMLParserResponseSerializerReturnsNSXMLParserObjectForValidXML { 71 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/xml"}]; 72 | NSError *error = nil; 73 | id responseObject = [self.responseSerializer responseObjectForResponse:response data:AFXMLTestData() error:&error]; 74 | 75 | XCTAssertNil(error, @"Serialization error should be nil"); 76 | XCTAssert([responseObject isKindOfClass:[NSXMLParser class]], @"Expected response to be a NSXMLParser"); 77 | } 78 | 79 | - (void)testThatXMLParserResponseSerializerCanBeCopied { 80 | [self.responseSerializer setAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:100]]; 81 | [self.responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"test/type"]]; 82 | 83 | AFXMLParserResponseSerializer *copiedSerializer = [self.responseSerializer copy]; 84 | XCTAssertNotEqual(copiedSerializer, self.responseSerializer); 85 | XCTAssertEqual(copiedSerializer.acceptableStatusCodes, self.responseSerializer.acceptableStatusCodes); 86 | XCTAssertEqual(copiedSerializer.acceptableContentTypes, self.responseSerializer.acceptableContentTypes); 87 | } 88 | 89 | @end 90 | -------------------------------------------------------------------------------- /Tests/Tests/AFUIWebViewTests.m: -------------------------------------------------------------------------------- 1 | // AFUIWebViewTests.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #import "AFTestCase.h" 24 | #import "UIWebView+AFNetworking.h" 25 | 26 | @interface AFUIWebViewTests : AFTestCase 27 | 28 | @property (nonatomic, strong) UIWebView *webView; 29 | @property (nonatomic, strong) NSURLRequest *HTMLRequest; 30 | 31 | @end 32 | 33 | @implementation AFUIWebViewTests 34 | 35 | - (void)setUp { 36 | [super setUp]; 37 | self.webView = [UIWebView new]; 38 | self.HTMLRequest = [NSURLRequest requestWithURL:[self.baseURL URLByAppendingPathComponent:@"html"]]; 39 | } 40 | 41 | - (void)testNilProgressDoesNotCauseCrash { 42 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 43 | [self.webView 44 | loadRequest:self.HTMLRequest 45 | progress:nil 46 | success:^NSString * _Nonnull(NSHTTPURLResponse * _Nonnull response, NSString * _Nonnull HTML) { 47 | [expectation fulfill]; 48 | return HTML; 49 | } 50 | failure:nil]; 51 | [self waitForExpectationsWithCommonTimeout]; 52 | } 53 | 54 | - (void)testNULLProgressDoesNotCauseCrash { 55 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 56 | [self.webView 57 | loadRequest:self.HTMLRequest 58 | progress:NULL 59 | success:^NSString * _Nonnull(NSHTTPURLResponse * _Nonnull response, NSString * _Nonnull HTML) { 60 | [expectation fulfill]; 61 | return HTML; 62 | } 63 | failure:nil]; 64 | [self waitForExpectationsWithCommonTimeout]; 65 | } 66 | 67 | - (void)testProgressIsSet { 68 | NSProgress* progress = nil; 69 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 70 | [self.webView 71 | loadRequest:self.HTMLRequest 72 | progress:&progress 73 | success:^NSString * _Nonnull(NSHTTPURLResponse * _Nonnull response, NSString * _Nonnull HTML) { 74 | [expectation fulfill]; 75 | return HTML; 76 | } 77 | failure:nil]; 78 | [self keyValueObservingExpectationForObject:progress 79 | keyPath:@"fractionCompleted" 80 | expectedValue:@(1.0)]; 81 | [self waitForExpectationsWithCommonTimeout]; 82 | } 83 | 84 | - (void)testRequestWithCustomHeaders { 85 | NSMutableURLRequest *customHeaderRequest = [NSMutableURLRequest requestWithURL:[self.baseURL URLByAppendingPathComponent:@"headers"]]; 86 | [customHeaderRequest setValue:@"Custom-Header-Value" forHTTPHeaderField:@"Custom-Header-Field"]; 87 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 88 | [self.webView 89 | loadRequest:customHeaderRequest 90 | progress:NULL 91 | success:^NSString * _Nonnull(NSHTTPURLResponse * _Nonnull response, NSString * _Nonnull string) { 92 | // Here string is actually JSON. 93 | NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:(NSJSONReadingOptions)0 error:nil]; 94 | 95 | NSDictionary *headers = responseObject[@"headers"]; 96 | XCTAssertTrue([headers[@"Custom-Header-Field"] isEqualToString:@"Custom-Header-Value"]); 97 | [expectation fulfill]; 98 | return string; 99 | } 100 | failure:nil]; 101 | [self waitForExpectationsWithCommonTimeout]; 102 | } 103 | 104 | @end 105 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIWebView+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // UIWebView+AFNetworking.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | #import 25 | 26 | #if TARGET_OS_IOS 27 | 28 | #import 29 | 30 | NS_ASSUME_NONNULL_BEGIN 31 | 32 | @class AFHTTPSessionManager; 33 | 34 | /** 35 | This category adds methods to the UIKit framework's `UIWebView` class. The methods in this category provide increased control over the request cycle, including progress monitoring and success / failure handling. 36 | 37 | @discussion When using these category methods, make sure to assign `delegate` for the web view, which implements `–webView:shouldStartLoadWithRequest:navigationType:` appropriately. This allows for tapped links to be loaded through AFNetworking, and can ensure that `canGoBack` & `canGoForward` update their values correctly. 38 | */ 39 | @interface UIWebView (AFNetworking) 40 | 41 | /** 42 | The session manager used to download all requests. 43 | */ 44 | @property (nonatomic, strong) AFHTTPSessionManager *sessionManager; 45 | 46 | /** 47 | Asynchronously loads the specified request. 48 | 49 | @param request A URL request identifying the location of the content to load. This must not be `nil`. 50 | @param progress A progress object monitoring the current download progress. 51 | @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. 52 | @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. 53 | */ 54 | - (void)loadRequest:(NSURLRequest *)request 55 | progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress 56 | success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success 57 | failure:(nullable void (^)(NSError *error))failure; 58 | 59 | /** 60 | Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. 61 | 62 | @param request A URL request identifying the location of the content to load. This must not be `nil`. 63 | @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. 64 | @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. 65 | @param progress A progress object monitoring the current download progress. 66 | @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. 67 | @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. 68 | */ 69 | - (void)loadRequest:(NSURLRequest *)request 70 | MIMEType:(nullable NSString *)MIMEType 71 | textEncodingName:(nullable NSString *)textEncodingName 72 | progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress 73 | success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success 74 | failure:(nullable void (^)(NSError *error))failure; 75 | 76 | @end 77 | 78 | NS_ASSUME_NONNULL_END 79 | 80 | #endif 81 | -------------------------------------------------------------------------------- /AFNetworking.xcodeproj/xcshareddata/xcschemes/AFNetworking macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 44 | 45 | 46 | 47 | 48 | 49 | 55 | 56 | 57 | 58 | 62 | 63 | 64 | 65 | 66 | 67 | 77 | 78 | 84 | 85 | 86 | 87 | 88 | 89 | 95 | 96 | 102 | 103 | 104 | 105 | 107 | 108 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIRefreshControl+AFNetworking.m: -------------------------------------------------------------------------------- 1 | // UIRefreshControl+AFNetworking.m 2 | // 3 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | 23 | #import "UIRefreshControl+AFNetworking.h" 24 | #import 25 | 26 | #if TARGET_OS_IOS 27 | 28 | #import "AFURLSessionManager.h" 29 | 30 | @interface AFRefreshControlNotificationObserver : NSObject 31 | @property (readonly, nonatomic, weak) UIRefreshControl *refreshControl; 32 | - (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl; 33 | 34 | - (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task; 35 | 36 | @end 37 | 38 | @implementation UIRefreshControl (AFNetworking) 39 | 40 | - (AFRefreshControlNotificationObserver *)af_notificationObserver { 41 | AFRefreshControlNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); 42 | if (notificationObserver == nil) { 43 | notificationObserver = [[AFRefreshControlNotificationObserver alloc] initWithActivityRefreshControl:self]; 44 | objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 45 | } 46 | return notificationObserver; 47 | } 48 | 49 | - (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { 50 | [[self af_notificationObserver] setRefreshingWithStateOfTask:task]; 51 | } 52 | 53 | @end 54 | 55 | @implementation AFRefreshControlNotificationObserver 56 | 57 | - (instancetype)initWithActivityRefreshControl:(UIRefreshControl *)refreshControl 58 | { 59 | self = [super init]; 60 | if (self) { 61 | _refreshControl = refreshControl; 62 | } 63 | return self; 64 | } 65 | 66 | - (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task { 67 | NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 68 | 69 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; 70 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; 71 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; 72 | 73 | if (task) { 74 | UIRefreshControl *refreshControl = self.refreshControl; 75 | if (task.state == NSURLSessionTaskStateRunning) { 76 | [refreshControl beginRefreshing]; 77 | 78 | [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task]; 79 | [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task]; 80 | [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task]; 81 | } else { 82 | [refreshControl endRefreshing]; 83 | } 84 | } 85 | } 86 | 87 | #pragma mark - 88 | 89 | - (void)af_beginRefreshing { 90 | dispatch_async(dispatch_get_main_queue(), ^{ 91 | [self.refreshControl beginRefreshing]; 92 | }); 93 | } 94 | 95 | - (void)af_endRefreshing { 96 | dispatch_async(dispatch_get_main_queue(), ^{ 97 | [self.refreshControl endRefreshing]; 98 | }); 99 | } 100 | 101 | #pragma mark - 102 | 103 | - (void)dealloc { 104 | NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 105 | 106 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; 107 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; 108 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; 109 | } 110 | 111 | @end 112 | 113 | #endif 114 | -------------------------------------------------------------------------------- /Example/AFNetworking Example.xcodeproj/xcshareddata/xcschemes/iOS Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/AFNetworking Example.xcodeproj/xcshareddata/xcschemes/tvOS Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/AFNetworking Example.xcodeproj/xcshareddata/xcschemes/macOS Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Tests/Tests/AFUIButtonTests.m: -------------------------------------------------------------------------------- 1 | // AFUIButtonTests.h 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #import "AFTestCase.h" 24 | #import "UIButton+AFNetworking.h" 25 | #import "AFImageDownloader.h" 26 | 27 | @interface AFUIButtonTests : AFTestCase 28 | @property (nonatomic, strong) UIImage *cachedImage; 29 | @property (nonatomic, strong) NSURLRequest *cachedImageRequest; 30 | @property (nonatomic, strong) UIButton *button; 31 | 32 | @property (nonatomic, strong) NSURLRequest *error404URLRequest; 33 | 34 | @property (nonatomic, strong) NSURLRequest *jpegURLRequest; 35 | @end 36 | 37 | @implementation AFUIButtonTests 38 | 39 | - (void)setUp { 40 | [super setUp]; 41 | [[UIButton sharedImageDownloader].imageCache removeAllImages]; 42 | [[[[[[UIButton sharedImageDownloader] sessionManager] session] configuration] URLCache] removeAllCachedResponses]; 43 | [UIButton setSharedImageDownloader:[[AFImageDownloader alloc] init]]; 44 | 45 | self.button = [UIButton new]; 46 | 47 | self.jpegURLRequest = [NSURLRequest requestWithURL:self.jpegURL]; 48 | 49 | self.error404URLRequest = [NSURLRequest requestWithURL:[self URLWithStatusCode:404]]; 50 | } 51 | 52 | - (void)tearDown { 53 | self.button = nil; 54 | [super tearDown]; 55 | 56 | } 57 | 58 | - (void)testThatBackgroundImageChanges { 59 | XCTAssertNil([self.button backgroundImageForState:UIControlStateNormal]); 60 | [self.button setBackgroundImageForState:UIControlStateNormal withURL:self.jpegURL]; 61 | NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(UIButton * _Nonnull button, NSDictionary * _Nullable bindings) { 62 | return [button backgroundImageForState:UIControlStateNormal] != nil; 63 | }]; 64 | 65 | [self expectationForPredicate:predicate 66 | evaluatedWithObject:self.button 67 | handler:nil]; 68 | 69 | [self waitForExpectationsWithCommonTimeout]; 70 | } 71 | 72 | - (void)testThatForegroundImageCanBeCancelledAndDownloadedImmediately { 73 | //https://github.com/Alamofire/AlamofireImage/issues/55 74 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 75 | [self.button setImageForState:UIControlStateNormal withURL:self.jpegURL]; 76 | [self.button cancelImageDownloadTaskForState:UIControlStateNormal]; 77 | __block UIImage *responseImage; 78 | [self.button 79 | setImageForState:UIControlStateNormal 80 | withURLRequest:self.jpegURLRequest 81 | placeholderImage:nil 82 | success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull image) { 83 | responseImage = image; 84 | [expectation fulfill]; 85 | } 86 | failure:nil]; 87 | [self waitForExpectationsWithCommonTimeout]; 88 | XCTAssertNotNil(responseImage); 89 | } 90 | 91 | - (void)testThatBackgroundImageCanBeCancelledAndDownloadedImmediately { 92 | //https://github.com/Alamofire/AlamofireImage/issues/55 93 | XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; 94 | [self.button setBackgroundImageForState:UIControlStateNormal withURL:self.jpegURL]; 95 | [self.button cancelBackgroundImageDownloadTaskForState:UIControlStateNormal]; 96 | __block UIImage *responseImage; 97 | [self.button 98 | setBackgroundImageForState:UIControlStateNormal 99 | withURLRequest:self.jpegURLRequest 100 | placeholderImage:nil 101 | success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull image) { 102 | responseImage = image; 103 | [expectation fulfill]; 104 | } 105 | failure:nil]; 106 | [self waitForExpectationsWithCommonTimeout]; 107 | XCTAssertNotNil(responseImage); 108 | } 109 | 110 | @end 111 | -------------------------------------------------------------------------------- /Tests/Tests/AFImageResponseSerializerTests.m: -------------------------------------------------------------------------------- 1 | // AFImageResponseSerializerTests.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation (http://alamofire.org/) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | #import "AFTestCase.h" 24 | #import "AFURLResponseSerialization.h" 25 | 26 | @interface AFImageResponseSerializerTests : AFTestCase 27 | 28 | @end 29 | 30 | @implementation AFImageResponseSerializerTests 31 | 32 | #pragma mark NSCopying 33 | 34 | - (void)testImageSerializerCanBeCopied { 35 | AFImageResponseSerializer *responseSerializer = [AFImageResponseSerializer serializer]; 36 | [responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"test/type"]]; 37 | [responseSerializer setAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:100]]; 38 | 39 | AFImageResponseSerializer *copiedSerializer = [responseSerializer copy]; 40 | XCTAssertNotNil(copiedSerializer); 41 | XCTAssertNotEqual(copiedSerializer, responseSerializer); 42 | XCTAssertEqual(copiedSerializer.acceptableContentTypes, responseSerializer.acceptableContentTypes); 43 | XCTAssertEqual(copiedSerializer.acceptableStatusCodes, responseSerializer.acceptableStatusCodes); 44 | #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH 45 | XCTAssertTrue(copiedSerializer.automaticallyInflatesResponseImage == responseSerializer.automaticallyInflatesResponseImage); 46 | XCTAssertTrue(fabs(copiedSerializer.imageScale - responseSerializer.imageScale) <= 0.001); 47 | #endif 48 | 49 | } 50 | 51 | #pragma mark NSSecureCoding 52 | 53 | - (void)testImageSerializerSupportsSecureCoding { 54 | XCTAssertTrue([AFImageResponseSerializer supportsSecureCoding]); 55 | } 56 | 57 | - (void)testImageSerializerCanBeArchivedAndUnarchived { 58 | AFImageResponseSerializer *responseSerializer = [AFImageResponseSerializer serializer]; 59 | NSData *archive = nil; 60 | 61 | archive = [NSKeyedArchiver archivedDataWithRootObject:responseSerializer]; 62 | XCTAssertNotNil(archive); 63 | AFImageResponseSerializer *unarchivedSerializer = [NSKeyedUnarchiver unarchiveObjectWithData:archive]; 64 | XCTAssertNotNil(unarchivedSerializer); 65 | XCTAssertNotEqual(unarchivedSerializer, responseSerializer); 66 | XCTAssertTrue([unarchivedSerializer.acceptableContentTypes isEqualToSet:responseSerializer.acceptableContentTypes]); 67 | XCTAssertTrue([unarchivedSerializer.acceptableStatusCodes isEqualToIndexSet:responseSerializer.acceptableStatusCodes]); 68 | 69 | #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH 70 | XCTAssertTrue(unarchivedSerializer.automaticallyInflatesResponseImage == responseSerializer.automaticallyInflatesResponseImage); 71 | XCTAssertTrue(fabs(unarchivedSerializer.imageScale - responseSerializer.imageScale) <= 0.001); 72 | #endif 73 | 74 | } 75 | 76 | - (void)testImageSerializerCanBeArchivedAndUnarchivedWithNonDefaultPropertyValues { 77 | AFImageResponseSerializer *responseSerializer = [AFImageResponseSerializer serializer]; 78 | NSData *archive = nil; 79 | 80 | // Customize the default property values 81 | #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH 82 | responseSerializer.automaticallyInflatesResponseImage = !responseSerializer.automaticallyInflatesResponseImage; 83 | responseSerializer.imageScale = responseSerializer.imageScale * 2.0f; 84 | #endif 85 | 86 | archive = [NSKeyedArchiver archivedDataWithRootObject:responseSerializer]; 87 | XCTAssertNotNil(archive); 88 | AFImageResponseSerializer *unarchivedSerializer = [NSKeyedUnarchiver unarchiveObjectWithData:archive]; 89 | XCTAssertNotNil(unarchivedSerializer); 90 | XCTAssertNotEqual(unarchivedSerializer, responseSerializer); 91 | 92 | #if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH 93 | XCTAssertTrue(unarchivedSerializer.automaticallyInflatesResponseImage == responseSerializer.automaticallyInflatesResponseImage); 94 | XCTAssertTrue(fabs(unarchivedSerializer.imageScale - responseSerializer.imageScale) <= 0.001); 95 | #endif 96 | } 97 | 98 | @end 99 | -------------------------------------------------------------------------------- /UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m: -------------------------------------------------------------------------------- 1 | // UIActivityIndicatorView+AFNetworking.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "UIActivityIndicatorView+AFNetworking.h" 23 | #import 24 | 25 | #if TARGET_OS_IOS || TARGET_OS_TV 26 | 27 | #import "AFURLSessionManager.h" 28 | 29 | @interface AFActivityIndicatorViewNotificationObserver : NSObject 30 | @property (readonly, nonatomic, weak) UIActivityIndicatorView *activityIndicatorView; 31 | - (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView; 32 | 33 | - (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task; 34 | 35 | @end 36 | 37 | @implementation UIActivityIndicatorView (AFNetworking) 38 | 39 | - (AFActivityIndicatorViewNotificationObserver *)af_notificationObserver { 40 | AFActivityIndicatorViewNotificationObserver *notificationObserver = objc_getAssociatedObject(self, @selector(af_notificationObserver)); 41 | if (notificationObserver == nil) { 42 | notificationObserver = [[AFActivityIndicatorViewNotificationObserver alloc] initWithActivityIndicatorView:self]; 43 | objc_setAssociatedObject(self, @selector(af_notificationObserver), notificationObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 44 | } 45 | return notificationObserver; 46 | } 47 | 48 | - (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { 49 | [[self af_notificationObserver] setAnimatingWithStateOfTask:task]; 50 | } 51 | 52 | @end 53 | 54 | @implementation AFActivityIndicatorViewNotificationObserver 55 | 56 | - (instancetype)initWithActivityIndicatorView:(UIActivityIndicatorView *)activityIndicatorView 57 | { 58 | self = [super init]; 59 | if (self) { 60 | _activityIndicatorView = activityIndicatorView; 61 | } 62 | return self; 63 | } 64 | 65 | - (void)setAnimatingWithStateOfTask:(NSURLSessionTask *)task { 66 | NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 67 | 68 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; 69 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; 70 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; 71 | 72 | if (task) { 73 | if (task.state != NSURLSessionTaskStateCompleted) { 74 | UIActivityIndicatorView *activityIndicatorView = self.activityIndicatorView; 75 | if (task.state == NSURLSessionTaskStateRunning) { 76 | [activityIndicatorView startAnimating]; 77 | } else { 78 | [activityIndicatorView stopAnimating]; 79 | } 80 | 81 | [notificationCenter addObserver:self selector:@selector(af_startAnimating) name:AFNetworkingTaskDidResumeNotification object:task]; 82 | [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidCompleteNotification object:task]; 83 | [notificationCenter addObserver:self selector:@selector(af_stopAnimating) name:AFNetworkingTaskDidSuspendNotification object:task]; 84 | } 85 | } 86 | } 87 | 88 | #pragma mark - 89 | 90 | - (void)af_startAnimating { 91 | dispatch_async(dispatch_get_main_queue(), ^{ 92 | [self.activityIndicatorView startAnimating]; 93 | }); 94 | } 95 | 96 | - (void)af_stopAnimating { 97 | dispatch_async(dispatch_get_main_queue(), ^{ 98 | [self.activityIndicatorView stopAnimating]; 99 | }); 100 | } 101 | 102 | #pragma mark - 103 | 104 | - (void)dealloc { 105 | NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 106 | 107 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil]; 108 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil]; 109 | [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil]; 110 | } 111 | 112 | @end 113 | 114 | #endif 115 | -------------------------------------------------------------------------------- /Tests/Tests/AFPropertyListResponseSerializerTests.m: -------------------------------------------------------------------------------- 1 | // AFPropertyListResponseSerializerTests.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFTestCase.h" 23 | 24 | #import "AFURLResponseSerialization.h" 25 | 26 | @interface AFPropertyListResponseSerializerTests : AFTestCase 27 | @property (nonatomic, strong) AFPropertyListResponseSerializer *responseSerializer; 28 | @end 29 | 30 | @implementation AFPropertyListResponseSerializerTests 31 | 32 | - (void)setUp { 33 | [super setUp]; 34 | self.responseSerializer = [AFPropertyListResponseSerializer serializer]; 35 | } 36 | 37 | #pragma mark - 38 | 39 | - (void)testThatPropertyListResponseSerializerAcceptsPlistData { 40 | NSData *data = [NSPropertyListSerialization dataWithPropertyList:@{@"foo": @"bar"} format:NSPropertyListXMLFormat_v1_0 options:0 error:NULL]; 41 | 42 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/x-plist"}]; 43 | NSError *error = nil; 44 | id responseObject = [self.responseSerializer responseObjectForResponse:response data:data error:&error]; 45 | 46 | XCTAssertTrue([responseObject isKindOfClass:[NSDictionary class]], @"Expected valid dictionary."); 47 | } 48 | 49 | - (void)testThatPropertyListResponseSerializerHandlesInvalidPlistData { 50 | NSData *data = [NSJSONSerialization dataWithJSONObject:@{@"foo": @"bar"} options:(NSJSONWritingOptions)0 error:nil]; 51 | 52 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/x-plist"}]; 53 | NSError *error = nil; 54 | id responseObject = [self.responseSerializer responseObjectForResponse:response data:data error:&error]; 55 | 56 | XCTAssertNil(responseObject, @"Expected nil responseObject."); 57 | XCTAssertNotNil(error, @"Expected non-nil error."); 58 | } 59 | 60 | - (void)testThatPropertyListResponseSerializerHandles204 { 61 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:204 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/x-plist"}]; 62 | NSError *error; 63 | id responseObject = [self.responseSerializer responseObjectForResponse:response data:nil error:&error]; 64 | 65 | XCTAssertNil(responseObject, @"Response should be nil when handling 204 with application/x-plist"); 66 | XCTAssertNil(error, @"Error handling application/x-plist"); 67 | } 68 | 69 | - (void)testResponseSerializerCanBeCopied { 70 | [self.responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"test/type"]]; 71 | [self.responseSerializer setAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:100]]; 72 | [self.responseSerializer setFormat:NSPropertyListXMLFormat_v1_0]; 73 | [self.responseSerializer setReadOptions:NSPropertyListMutableContainers]; 74 | 75 | AFPropertyListResponseSerializer *copiedSerializer = [self.responseSerializer copy]; 76 | XCTAssertNotNil(copiedSerializer); 77 | XCTAssertNotEqual(copiedSerializer, self.responseSerializer); 78 | XCTAssertEqual(copiedSerializer.format, self.responseSerializer.format); 79 | XCTAssertEqual(copiedSerializer.readOptions, self.responseSerializer.readOptions); 80 | XCTAssertEqual(copiedSerializer.acceptableContentTypes, self.responseSerializer.acceptableContentTypes); 81 | XCTAssertEqual(copiedSerializer.acceptableStatusCodes, self.responseSerializer.acceptableStatusCodes); 82 | } 83 | 84 | - (void)testResponseSerializerCanBeArchivedAndUnarchived { 85 | NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:self.responseSerializer]; 86 | XCTAssertNotNil(archive); 87 | AFPropertyListResponseSerializer *unarchivedSerializer = [NSKeyedUnarchiver unarchiveObjectWithData:archive]; 88 | XCTAssertNotNil(unarchivedSerializer); 89 | XCTAssertNotEqual(unarchivedSerializer, self.responseSerializer); 90 | XCTAssertTrue(unarchivedSerializer.format == self.responseSerializer.format); 91 | XCTAssertTrue(unarchivedSerializer.readOptions == self.responseSerializer.readOptions); 92 | } 93 | 94 | @end 95 | -------------------------------------------------------------------------------- /Tests/Tests/AFXMLDocumentResponseSerializerTests.m: -------------------------------------------------------------------------------- 1 | // AFXMLDocumentResponseSerializerTests.m 2 | // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "AFTestCase.h" 23 | 24 | #import "AFURLRequestSerialization.h" 25 | #import "AFURLResponseSerialization.h" 26 | 27 | #import 28 | 29 | static NSData * AFXMLTestData() { 30 | return [@"someValue" dataUsingEncoding:NSUTF8StringEncoding]; 31 | } 32 | 33 | #pragma mark - 34 | 35 | @interface AFXMLDocumentResponseSerializerTests : AFTestCase 36 | @property (nonatomic, strong) AFXMLDocumentResponseSerializer *responseSerializer; 37 | @end 38 | 39 | #pragma mark - 40 | 41 | @implementation AFXMLDocumentResponseSerializerTests 42 | 43 | - (void)setUp { 44 | [super setUp]; 45 | self.responseSerializer = [AFXMLDocumentResponseSerializer serializer]; 46 | } 47 | 48 | - (void)testThatXMLDocumentResponseSerializerAcceptsApplicationXMLMimeType { 49 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/xml"}]; 50 | NSError *error = nil; 51 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 52 | 53 | XCTAssertNil(error, @"Error handling application/xml"); 54 | } 55 | 56 | - (void)testThatXMLDocumentResponseSerializerAcceptsTextXMLMimeType { 57 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"text/xml"}]; 58 | NSError *error = nil; 59 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 60 | 61 | XCTAssertNil(error, @"Error handling text/xml"); 62 | } 63 | 64 | - (void)testThatXMLDocumentResponseSerializerDoesNotAcceptsNonStandardXMLMimeType { 65 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"nonstandard/xml"}]; 66 | NSError *error = nil; 67 | [self.responseSerializer validateResponse:response data:AFXMLTestData() error:&error]; 68 | 69 | XCTAssertNotNil(error, @"Error should have been thrown for nonstandard/xml"); 70 | } 71 | 72 | - (void)testThatXMLDocumentResponseSerializerReturnsNSXMLDocumentObjectForValidXML { 73 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/xml"}]; 74 | NSError *error = nil; 75 | id responseObject = [self.responseSerializer responseObjectForResponse:response data:AFXMLTestData() error:&error]; 76 | 77 | XCTAssertNil(error, @"Serialization error should be nil"); 78 | XCTAssert([responseObject isKindOfClass:[NSXMLDocument class]], @"Expected response to be a NSXMLDocument"); 79 | } 80 | 81 | - (void)testThatXMLDocumentResponseSerializerReturnsErrorForInvalidXML { 82 | NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:self.baseURL statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"Content-Type": @"application/xml"}]; 83 | NSError *error = nil; 84 | [self.responseSerializer responseObjectForResponse:response data:[@"