├── Haneke+AFNetworkingTests ├── en.lproj │ └── InfoPlist.strings ├── Haneke+AFNetworkingTests-Info.plist ├── XCTestCase+HanekeTestUtils.h ├── UIImage+HanekeTestUtils.h ├── XCTestCase+HanekeTestUtils.m ├── UIImage+HanekeTestUtils.m └── HNKNetworkEntity+AFNetworkingTests.m ├── Haneke+AFNetworking.xcworkspace └── contents.xcworkspacedata ├── Podfile ├── Haneke+AFNetworking.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcshareddata │ └── xcschemes │ │ └── Haneke+AFNetworking.xcscheme └── project.pbxproj ├── Haneke+AFNetworking ├── Haneke+AFNetworking-Prefix.pch ├── Haneke+AFNetworking.h └── Haneke+AFNetworking.m ├── .gitignore ├── .travis.yml ├── Haneke+AFNetworking.podspec ├── Podfile.lock ├── README.md └── LICENSE /Haneke+AFNetworkingTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Haneke+AFNetworking.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '7.0' 2 | 3 | pod 'Haneke', '~> 1.0' 4 | pod 'AFNetworking', '~> 2.3.1' 5 | 6 | target :'Haneke+AFNetworkingTests', :exclusive => true do 7 | pod 'OCMock', '~> 3.1.1' 8 | pod 'OHHTTPStubs', '~> 3.1.1' 9 | end 10 | -------------------------------------------------------------------------------- /Haneke+AFNetworking.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Haneke+AFNetworking/Haneke+AFNetworking-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 | -------------------------------------------------------------------------------- /.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 | xcuserdata 13 | profile 14 | *.moved-aside 15 | DerivedData 16 | .idea/ 17 | *.hmap 18 | *.xccheckout 19 | 20 | #CocoaPods 21 | Pods 22 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | before_install: 3 | - gem install cocoapods 4 | before_script: 5 | - brew update 6 | - brew upgrade xctool || true 7 | - pod install 8 | script: 9 | - xctool -workspace Haneke+AFNetworking.xcworkspace -scheme 'Haneke+AFNetworking' -configuration Release -sdk iphonesimulator test 10 | branches: 11 | only: 12 | - master 13 | -------------------------------------------------------------------------------- /Haneke+AFNetworking.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'Haneke+AFNetworking' 3 | s.version = '0.2.0' 4 | s.license = 'Apache 2.0' 5 | s.summary = 'Haneke extension to use AFNetworking to download images.' 6 | s.homepage = 'https://github.com/Haneke/Haneke-AFNetworking' 7 | s.author = 'Hermes Pique' 8 | s.social_media_url = 'https://twitter.com/hpique' 9 | s.source = { :git => 'https://github.com/Haneke/Haneke-AFNetworking.git', :tag => "v#{s.version}" } 10 | s.platform = :ios, '7.0' 11 | s.requires_arc = true 12 | s.source_files = 'Haneke+AFNetworking/*.{h,m}' 13 | s.dependency 'Haneke', '~> 1.0' 14 | s.dependency 'AFNetworking', '~> 2.3' 15 | end 16 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/Haneke+AFNetworkingTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.hpique.${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 | -------------------------------------------------------------------------------- /Haneke+AFNetworking/Haneke+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // 2 | // Haneke_AFNetworking.h 3 | // Haneke+AFNetworking 4 | // 5 | // Created by Hermes Pique on 8/30/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | #import 23 | 24 | @interface HNKNetworkFetcher(AFNetworking) 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/XCTestCase+HanekeTestUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // XCTestCase+HanekeTestUtils.h 3 | // Haneke 4 | // 5 | // Created by Hermés Piqué on 09/03/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface XCTestCase (HanekeTestUtils) 24 | 25 | - (void)hnk_testAsyncBlock:(void(^)(dispatch_semaphore_t))block; 26 | 27 | - (void)hnk_waitFor:(NSTimeInterval)timeInterval; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AFNetworking (2.3.1): 3 | - AFNetworking/NSURLConnection 4 | - AFNetworking/NSURLSession 5 | - AFNetworking/Reachability 6 | - AFNetworking/Security 7 | - AFNetworking/Serialization 8 | - AFNetworking/UIKit 9 | - AFNetworking/NSURLConnection (2.3.1): 10 | - AFNetworking/Reachability 11 | - AFNetworking/Security 12 | - AFNetworking/Serialization 13 | - AFNetworking/NSURLSession (2.3.1): 14 | - AFNetworking/Reachability 15 | - AFNetworking/Security 16 | - AFNetworking/Serialization 17 | - AFNetworking/Reachability (2.3.1) 18 | - AFNetworking/Security (2.3.1) 19 | - AFNetworking/Serialization (2.3.1) 20 | - AFNetworking/UIKit (2.3.1): 21 | - AFNetworking/NSURLConnection 22 | - AFNetworking/NSURLSession 23 | - Haneke (1.0.0) 24 | - OCMock (3.1.1) 25 | - OHHTTPStubs (3.1.5): 26 | - OHHTTPStubs/Core 27 | - OHHTTPStubs/Core (3.1.5) 28 | 29 | DEPENDENCIES: 30 | - AFNetworking (~> 2.3.1) 31 | - Haneke (~> 1.0) 32 | - OCMock (~> 3.1.1) 33 | - OHHTTPStubs (~> 3.1.1) 34 | 35 | SPEC CHECKSUMS: 36 | AFNetworking: 6d7b76aa5d04c8c37daad3eef4b7e3f2a7620da3 37 | Haneke: be4a384cc205809d181f86d50ace2580ee58d94d 38 | OCMock: f6cb8c162ab9d5620dddf411282c7b2c0ee78854 39 | OHHTTPStubs: c1e362552b71b81e1deb7a80f44c51585b946c43 40 | 41 | COCOAPODS: 0.33.1 42 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/UIImage+HanekeTestUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+HanekeTestUtils.h 3 | // Haneke 4 | // 5 | // Created by Hermes Pique on 20/02/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface UIImage (HanekeTestUtils) 24 | 25 | + (UIImage*)hnk_imageWithColor:(UIColor*)color size:(CGSize)size; 26 | 27 | + (UIImage*)hnk_imageWithColor:(UIColor*)color size:(CGSize)size opaque:(BOOL)opaque; 28 | 29 | + (UIImage*)hnk_imageGradientFromColor:(UIColor*)fromColor toColor:(UIColor*)toColor size:(CGSize)size; 30 | 31 | - (BOOL)hnk_isEqualToImage:(UIImage*)image; 32 | 33 | @end 34 | 35 | // Implemented in HNKCache.m 36 | 37 | @interface UIImage (hnk_utils) 38 | 39 | - (BOOL)hnk_hasAlpha; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Haneke+AFNetworking 2 | =================== 3 | 4 | > Haneke and AFNetworking,
5 | > sitting in a tree... 6 | 7 | A zero-config Haneke extension to use [AFNetworking](https://github.com/AFNetworking/AFNetworking) for image downloads. 8 | 9 | ##Installation 10 | 11 | Using [CocoaPods](http://cocoapods.org/): 12 | 13 | ```ruby 14 | pod 'Haneke+AFNetworking', '~> 0.2' 15 | ``` 16 | 17 | Alternatively, you can simply add the files from the [Haneke+AFNetworking](https://github.com/Haneke/Haneke-AFNetworking/tree/master/Haneke%2BAFNetworking) directory to your project (after adding Haneke itself). 18 | 19 | ## Usage 20 | 21 | Like [Haneke](https://github.com/Haneke/Haneke), using this extension requires no configuration. Simply import `Haneke+AFNetworking.h` instead of `Haneke.h`. 22 | 23 | ##License 24 | 25 | Copyright 2014 Hermes Pique ([@hpique](https://twitter.com/hpique)) 26 | 27 | Licensed under the Apache License, Version 2.0 (the "License"); 28 | you may not use this file except in compliance with the License. 29 | You may obtain a copy of the License at 30 | 31 | http://www.apache.org/licenses/LICENSE-2.0 32 | 33 | Unless required by applicable law or agreed to in writing, software 34 | distributed under the License is distributed on an "AS IS" BASIS, 35 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 36 | See the License for the specific language governing permissions and 37 | limitations under the License. 38 | 39 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/XCTestCase+HanekeTestUtils.m: -------------------------------------------------------------------------------- 1 | // 2 | // XCTestCase+HanekeTestUtils.m 3 | // Haneke 4 | // 5 | // Created by Hermés Piqué on 09/03/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "XCTestCase+HanekeTestUtils.h" 22 | 23 | @implementation XCTestCase (HanekeTestUtils) 24 | 25 | - (void)hnk_testAsyncBlock:(void(^)(dispatch_semaphore_t))block 26 | { 27 | dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 28 | block(semaphore); 29 | NSInteger i = 0; 30 | static const NSTimeInterval IterationDelay = 0.005; 31 | static const NSInteger MaxIterations = 400; 32 | while (i < MaxIterations && dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) 33 | { 34 | [self hnk_waitFor:IterationDelay]; 35 | i++; 36 | } 37 | if (i >= MaxIterations) 38 | { 39 | XCTFail(@"Async unit test took too long to complete."); 40 | } 41 | } 42 | 43 | - (void)hnk_waitFor:(NSTimeInterval)timeInterval 44 | { 45 | [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode 46 | beforeDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]]; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Haneke+AFNetworking.xcodeproj/xcshareddata/xcschemes/Haneke+AFNetworking.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/UIImage+HanekeTestUtils.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+HanekeTestUtils.m 3 | // Haneke 4 | // 5 | // Created by Hermes Pique on 20/02/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "UIImage+HanekeTestUtils.h" 22 | 23 | @implementation UIImage (HanekeTestUtils) 24 | 25 | + (UIImage*)hnk_imageWithColor:(UIColor*)color size:(CGSize)size 26 | { 27 | return [UIImage hnk_imageWithColor:color size:size opaque:YES]; 28 | } 29 | 30 | + (UIImage*)hnk_imageWithColor:(UIColor*)color size:(CGSize)size opaque:(BOOL)opaque 31 | { 32 | UIGraphicsBeginImageContextWithOptions(size, opaque, 0); 33 | CGContextRef context = UIGraphicsGetCurrentContext(); 34 | CGContextSetFillColorWithColor(context, color.CGColor); 35 | CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height)); 36 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 37 | UIGraphicsEndImageContext(); 38 | return image; 39 | } 40 | 41 | + (UIImage*)hnk_imageGradientFromColor:(UIColor*)fromColor toColor:(UIColor*)toColor size:(CGSize)size 42 | { 43 | UIGraphicsBeginImageContextWithOptions(size, NO /* opaque */, 0 /* scale */); 44 | CGContextRef context = UIGraphicsGetCurrentContext(); 45 | CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 46 | 47 | const size_t gradientNumberOfLocations = 2; 48 | const CGFloat gradientLocations[2] = { 0.0, 1.0 }; 49 | CGFloat r1, g1, b1, a1; 50 | [fromColor getRed:&r1 green:&g1 blue:&b1 alpha:&a1]; 51 | CGFloat r2, g2, b2, a2; 52 | [toColor getRed:&r2 green:&g2 blue:&b2 alpha:&a2]; 53 | const CGFloat gradientComponents[8] = {r1, g1, b1, a1, r2, g2, b2, a2}; 54 | CGGradientRef gradient = CGGradientCreateWithColorComponents (colorspace, gradientComponents, gradientLocations, gradientNumberOfLocations); 55 | 56 | CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0, size.height), 0); 57 | 58 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 59 | UIGraphicsEndImageContext(); 60 | CGGradientRelease(gradient); 61 | CGColorSpaceRelease(colorspace); 62 | return image; 63 | } 64 | 65 | - (BOOL)hnk_isEqualToImage:(UIImage*)image 66 | { 67 | NSData *data = [image hnk_normalizedData]; 68 | NSData *originalData = [self hnk_normalizedData]; 69 | return [originalData isEqualToData:data]; 70 | } 71 | 72 | - (NSData*)hnk_normalizedData 73 | { 74 | const CGSize pixelSize = CGSizeMake(self.size.width * self.scale, self.size.height * self.scale); 75 | UIGraphicsBeginImageContext(pixelSize); 76 | [self drawInRect:CGRectMake(0, 0, pixelSize.width, pixelSize.height)]; 77 | UIImage *drawnImage = UIGraphicsGetImageFromCurrentImageContext(); 78 | UIGraphicsEndImageContext(); 79 | return UIImagePNGRepresentation(drawnImage); 80 | } 81 | 82 | @end 83 | -------------------------------------------------------------------------------- /Haneke+AFNetworking/Haneke+AFNetworking.m: -------------------------------------------------------------------------------- 1 | // 2 | // Haneke+AFNetworking.m 3 | // Haneke+AFNetworking 4 | // 5 | // Created by Hermes Pique on 8/30/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "Haneke+AFNetworking.h" 22 | #import 23 | #import 24 | 25 | @interface HNKNetworkFetcher (_AFNetworking) 26 | 27 | @property (readwrite, nonatomic, strong, setter = af_setImageRequestOperation:) AFHTTPRequestOperation *af_imageRequestOperation; 28 | 29 | + (void)af_failWithError:(NSError*)error block:(void (^)(NSError *error))failureBlock; 30 | 31 | @end 32 | 33 | @implementation HNKNetworkFetcher (_AFNetworking) 34 | 35 | + (NSOperationQueue *)af_sharedImageRequestOperationQueue 36 | { 37 | static NSOperationQueue *_af_sharedImageRequestOperationQueue = nil; 38 | static dispatch_once_t onceToken; 39 | dispatch_once(&onceToken, ^{ 40 | _af_sharedImageRequestOperationQueue = [NSOperationQueue new]; 41 | _af_sharedImageRequestOperationQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; 42 | }); 43 | 44 | return _af_sharedImageRequestOperationQueue; 45 | } 46 | 47 | - (AFHTTPRequestOperation *)af_imageRequestOperation 48 | { 49 | return (AFHTTPRequestOperation *)objc_getAssociatedObject(self, @selector(af_imageRequestOperation)); 50 | } 51 | 52 | - (void)af_setImageRequestOperation:(AFHTTPRequestOperation *)imageRequestOperation 53 | { 54 | objc_setAssociatedObject(self, @selector(af_imageRequestOperation), imageRequestOperation, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 55 | } 56 | 57 | + (void)af_failWithError:(NSError*)error block:(void (^)(NSError *error))failureBlock 58 | { 59 | HanekeLog(@"%@", error.localizedDescription); 60 | if (!failureBlock) return; 61 | 62 | failureBlock(error); 63 | } 64 | 65 | @end 66 | 67 | @implementation HNKNetworkFetcher(AFNetworking) 68 | 69 | + (void)load { 70 | static dispatch_once_t onceToken; 71 | dispatch_once(&onceToken, ^{ 72 | [self af_swizzleSelector:@selector(fetchImageWithSuccess:failure:) withSelector:@selector(af_fetchImageWithSuccess:failure:)]; 73 | [self af_swizzleSelector:@selector(cancelFetch) withSelector:@selector(af_cancelFetch)]; 74 | }); 75 | } 76 | 77 | + (void)af_swizzleSelector:(SEL)originalSelector withSelector:(SEL)swizzledSelector 78 | { 79 | Class class = self.class; 80 | Method originalMethod = class_getInstanceMethod(class, originalSelector); 81 | Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); 82 | 83 | const BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); 84 | 85 | if (didAddMethod) 86 | { 87 | class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); 88 | } 89 | else 90 | { 91 | method_exchangeImplementations(originalMethod, swizzledMethod); 92 | } 93 | } 94 | 95 | - (void)af_fetchImageWithSuccess:(void (^)(UIImage *image))successBlock failure:(void (^)(NSError *error))failureBlock 96 | { 97 | NSURLRequest *URLRequest = [NSURLRequest requestWithURL:self.URL]; 98 | self.af_imageRequestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:URLRequest]; 99 | self.af_imageRequestOperation.responseSerializer = [AFImageResponseSerializer serializer]; 100 | NSURL *URL = self.URL; 101 | [self.af_imageRequestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, UIImage *image) { 102 | if (!successBlock) return; 103 | 104 | if (!image) 105 | { 106 | NSString *localizedDescription = [NSString stringWithFormat:NSLocalizedString(@"Failed to load image from data at URL %@", @""), URL]; 107 | NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : localizedDescription , NSURLErrorKey : URL}; 108 | NSError *error = [NSError errorWithDomain:HNKErrorDomain code:HNKErrorNetworkFetcherInvalidData userInfo:userInfo]; 109 | 110 | [HNKNetworkFetcher af_failWithError:error block:failureBlock]; 111 | return; 112 | } 113 | 114 | successBlock(image); 115 | 116 | } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 117 | [HNKNetworkFetcher af_failWithError:error block:failureBlock]; 118 | }]; 119 | 120 | [[self.class af_sharedImageRequestOperationQueue] addOperation:self.af_imageRequestOperation]; 121 | } 122 | 123 | - (void)af_cancelFetch 124 | { 125 | [self.af_imageRequestOperation cancel]; 126 | self.af_imageRequestOperation = nil; 127 | } 128 | 129 | @end 130 | -------------------------------------------------------------------------------- /Haneke+AFNetworkingTests/HNKNetworkEntity+AFNetworkingTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // HNKNetworkFetcher+AFNetworkingTests.m 3 | // Haneke+AFNetworkingTests 4 | // 5 | // Created by Hermes Pique on 8/30/14. 6 | // Copyright (c) 2014 Hermes Pique. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | #import "Haneke+AFNetworking.h" 23 | #import "UIImage+HanekeTestUtils.h" 24 | #import "XCTestCase+HanekeTestUtils.h" 25 | #import 26 | 27 | @interface HNKNetworkFetcher_AFNetworkingTests : XCTestCase 28 | 29 | @end 30 | 31 | @implementation HNKNetworkFetcher_AFNetworkingTests { 32 | HNKNetworkFetcher *_sut; 33 | NSURL *_URL; 34 | } 35 | 36 | - (void)setUp 37 | { 38 | _URL = [NSURL URLWithString:@"http://haneke.io/image.jpg"]; 39 | } 40 | 41 | - (void)tearDown 42 | { 43 | [OHHTTPStubs removeAllStubs]; 44 | [super tearDown]; 45 | } 46 | 47 | - (void)testURL 48 | { 49 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 50 | 51 | XCTAssertEqualObjects(_sut.URL, _URL, @""); 52 | } 53 | 54 | - (void)testKey 55 | { 56 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 57 | 58 | XCTAssertEqualObjects(_sut.key, _URL.absoluteString, @""); 59 | } 60 | 61 | - (void)testFetchImage_Success 62 | { 63 | UIImage *image = [UIImage hnk_imageWithColor:[UIColor whiteColor] size:CGSizeMake(5, 5)]; 64 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 65 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 66 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 67 | NSData *data = UIImagePNGRepresentation(image); 68 | return [OHHTTPStubsResponse responseWithData:data statusCode:200 headers:nil]; 69 | }]; 70 | 71 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 72 | 73 | [self hnk_testAsyncBlock:^(dispatch_semaphore_t semaphore) { 74 | [_sut fetchImageWithSuccess:^(UIImage *resultImage) { 75 | XCTAssertTrue([resultImage hnk_isEqualToImage:image], @""); 76 | dispatch_semaphore_signal(semaphore); 77 | } failure:^(NSError *error) { 78 | XCTFail(@"Expected to succeed"); 79 | dispatch_semaphore_signal(semaphore); 80 | }]; 81 | }]; 82 | } 83 | 84 | - (void)testFetchImage_Failure_InvalidStatusCode_401 85 | { 86 | [self _testFetchImage_Failure_InvalidStatusCode:401]; 87 | } 88 | 89 | - (void)testFetchImage_Failure_InvalidStatusCode_402 90 | { 91 | [self _testFetchImage_Failure_InvalidStatusCode:402]; 92 | } 93 | 94 | - (void)testFetchImage_Failure_InvalidStatusCode_403 95 | { 96 | [self _testFetchImage_Failure_InvalidStatusCode:403]; 97 | } 98 | 99 | - (void)testFetchImage_Failure_InvalidStatusCode_404 100 | { 101 | [self _testFetchImage_Failure_InvalidStatusCode:404]; 102 | } 103 | - (void)testFetchImage_Failure_DownloadError 104 | { 105 | NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:nil]; 106 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 107 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 108 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 109 | return [OHHTTPStubsResponse responseWithError:error]; 110 | }]; 111 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 112 | 113 | [self hnk_testAsyncBlock:^(dispatch_semaphore_t semaphore) { 114 | [_sut fetchImageWithSuccess:^(UIImage *resultImage) { 115 | XCTFail(@"Expected to fail"); 116 | dispatch_semaphore_signal(semaphore); 117 | } failure:^(NSError *resultError) { 118 | XCTAssertEqual(resultError.code, error.code, @""); 119 | dispatch_semaphore_signal(semaphore); 120 | }]; 121 | }]; 122 | } 123 | 124 | - (void)testFetchImage_Failure_HNKNetworkFetcherInvalidDataError 125 | { 126 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 127 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 128 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 129 | NSData *data = [NSData data]; 130 | return [OHHTTPStubsResponse responseWithData:data statusCode:200 headers:nil]; 131 | }]; 132 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 133 | 134 | [self hnk_testAsyncBlock:^(dispatch_semaphore_t semaphore) { 135 | [_sut fetchImageWithSuccess:^(UIImage *resultImage) { 136 | XCTFail(@"Expected to fail"); 137 | dispatch_semaphore_signal(semaphore); 138 | } failure:^(NSError *error) { 139 | XCTAssertEqualObjects(error.domain, HNKErrorDomain, @""); 140 | XCTAssertEqual(error.code, HNKErrorNetworkFetcherInvalidData, @""); 141 | XCTAssertNotNil(error.localizedDescription, @""); 142 | XCTAssertEqualObjects(error.userInfo[NSURLErrorKey], _URL, @""); 143 | dispatch_semaphore_signal(semaphore); 144 | }]; 145 | }]; 146 | } 147 | 148 | - (void)testFetchImage_Failure_HNKNetworkFetcherMissingDataError 149 | { 150 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 151 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 152 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 153 | 154 | UIImage *image = [UIImage hnk_imageWithColor:[UIColor whiteColor] size:CGSizeMake(5, 5)]; 155 | NSData *data = UIImageJPEGRepresentation(image, 1); 156 | NSString *contentLengthString = [NSString stringWithFormat:@"%ld", (long)data.length * 10]; 157 | OHHTTPStubsResponse *response = [OHHTTPStubsResponse responseWithData:data statusCode:200 headers:nil]; 158 | response.httpHeaders = @{@"Content-Length": contentLengthString}; // See: https://github.com/AliSoftware/OHHTTPStubs/pull/62 159 | return response; 160 | }]; 161 | 162 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 163 | 164 | [self hnk_testAsyncBlock:^(dispatch_semaphore_t semaphore) { 165 | [_sut fetchImageWithSuccess:^(UIImage *resultImage) { 166 | // TODO: Report possible AFNetworking bug 167 | // XCTFail(@"Expected to fail"); 168 | dispatch_semaphore_signal(semaphore); 169 | } failure:^(NSError *error) { 170 | XCTAssertNotNil(error, @""); 171 | dispatch_semaphore_signal(semaphore); 172 | }]; 173 | }]; 174 | } 175 | 176 | - (void)testCancelFetch 177 | { 178 | UIImage *image = [UIImage hnk_imageWithColor:[UIColor whiteColor] size:CGSizeMake(5, 5)]; 179 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 180 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 181 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 182 | NSData *data = UIImagePNGRepresentation(image); 183 | return [OHHTTPStubsResponse responseWithData:data statusCode:200 headers:nil]; 184 | }]; 185 | 186 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 187 | [_sut fetchImageWithSuccess:^(UIImage *image) { 188 | XCTFail(@"Unexpected success"); 189 | } failure:^(NSError *error) { 190 | XCTFail(@"Unexpected failure"); 191 | }]; 192 | 193 | [_sut cancelFetch]; 194 | 195 | [self hnk_waitFor:0.1]; 196 | } 197 | 198 | - (void)testCancelFetch_NoFetch 199 | { 200 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 201 | 202 | [_sut cancelFetch]; 203 | } 204 | 205 | - (void)testURLSession 206 | { 207 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 208 | XCTAssertEqualObjects(_sut.URLSession, [NSURLSession sharedSession], @""); 209 | } 210 | 211 | #pragma mark Helpers 212 | 213 | - (void)_testFetchImage_Failure_InvalidStatusCode:(int)statusCode 214 | { 215 | [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { 216 | return [request.URL.absoluteString isEqualToString:_URL.absoluteString]; 217 | } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { 218 | NSData *data = [@"404" dataUsingEncoding:NSUTF8StringEncoding]; 219 | return [OHHTTPStubsResponse responseWithData:data statusCode:statusCode headers:nil]; 220 | }]; 221 | _sut = [[HNKNetworkFetcher alloc] initWithURL:_URL]; 222 | 223 | [self hnk_testAsyncBlock:^(dispatch_semaphore_t semaphore) { 224 | [_sut fetchImageWithSuccess:^(UIImage *resultImage) { 225 | XCTFail(@"Expected to fail"); 226 | dispatch_semaphore_signal(semaphore); 227 | } failure:^(NSError *error) { 228 | XCTAssertNotNil(error, @""); 229 | dispatch_semaphore_signal(semaphore); 230 | }]; 231 | }]; 232 | } 233 | 234 | @end 235 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Haneke+AFNetworking.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 914A2AE25AC54A449679EAB4 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C36D396ADEE47809852C20E /* libPods.a */; }; 11 | A0045DD919B2448300B12CE4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0045DD819B2448300B12CE4 /* Foundation.framework */; }; 12 | A0045DDE19B2448300B12CE4 /* Haneke+AFNetworking.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = A0045DDD19B2448300B12CE4 /* Haneke+AFNetworking.h */; }; 13 | A0045DE019B2448300B12CE4 /* Haneke+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A0045DDF19B2448300B12CE4 /* Haneke+AFNetworking.m */; }; 14 | A0045DE719B2448300B12CE4 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0045DE619B2448300B12CE4 /* XCTest.framework */; }; 15 | A0045DE819B2448300B12CE4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0045DD819B2448300B12CE4 /* Foundation.framework */; }; 16 | A0045DEA19B2448300B12CE4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0045DE919B2448300B12CE4 /* UIKit.framework */; }; 17 | A0045DED19B2448300B12CE4 /* libHaneke+AFNetworking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A0045DD519B2448300B12CE4 /* libHaneke+AFNetworking.a */; }; 18 | A0045DF319B2448300B12CE4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A0045DF119B2448300B12CE4 /* InfoPlist.strings */; }; 19 | A0045DF519B2448300B12CE4 /* HNKNetworkEntity+AFNetworkingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A0045DF419B2448300B12CE4 /* HNKNetworkEntity+AFNetworkingTests.m */; }; 20 | A0833C1419B24DE200C0BE41 /* UIImage+HanekeTestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A0833C1119B24DE200C0BE41 /* UIImage+HanekeTestUtils.m */; }; 21 | A0833C1519B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A0833C1319B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.m */; }; 22 | B5DC2F8258C749D29172B3D0 /* libPods-Haneke+AFNetworkingTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C0C1C82C490E44D3A4CEEB35 /* libPods-Haneke+AFNetworkingTests.a */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | A0045DEB19B2448300B12CE4 /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = A0045DCD19B2448300B12CE4 /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = A0045DD419B2448300B12CE4; 31 | remoteInfo = "Haneke+AFNetworking"; 32 | }; 33 | /* End PBXContainerItemProxy section */ 34 | 35 | /* Begin PBXCopyFilesBuildPhase section */ 36 | A0045DD319B2448300B12CE4 /* CopyFiles */ = { 37 | isa = PBXCopyFilesBuildPhase; 38 | buildActionMask = 2147483647; 39 | dstPath = "include/$(PRODUCT_NAME)"; 40 | dstSubfolderSpec = 16; 41 | files = ( 42 | A0045DDE19B2448300B12CE4 /* Haneke+AFNetworking.h in CopyFiles */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXCopyFilesBuildPhase section */ 47 | 48 | /* Begin PBXFileReference section */ 49 | 1C36D396ADEE47809852C20E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 52B8085CDA3A43CD86C6A42F /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = ""; }; 51 | A0045DD519B2448300B12CE4 /* libHaneke+AFNetworking.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libHaneke+AFNetworking.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | A0045DD819B2448300B12CE4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 53 | A0045DDC19B2448300B12CE4 /* Haneke+AFNetworking-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Haneke+AFNetworking-Prefix.pch"; sourceTree = ""; }; 54 | A0045DDD19B2448300B12CE4 /* Haneke+AFNetworking.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Haneke+AFNetworking.h"; sourceTree = ""; }; 55 | A0045DDF19B2448300B12CE4 /* Haneke+AFNetworking.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Haneke+AFNetworking.m"; sourceTree = ""; }; 56 | A0045DE519B2448300B12CE4 /* Haneke+AFNetworkingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Haneke+AFNetworkingTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | A0045DE619B2448300B12CE4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 58 | A0045DE919B2448300B12CE4 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 59 | A0045DF019B2448300B12CE4 /* Haneke+AFNetworkingTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Haneke+AFNetworkingTests-Info.plist"; sourceTree = ""; }; 60 | A0045DF219B2448300B12CE4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | A0045DF419B2448300B12CE4 /* HNKNetworkEntity+AFNetworkingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "HNKNetworkEntity+AFNetworkingTests.m"; sourceTree = ""; }; 62 | A0833C1019B24DE200C0BE41 /* UIImage+HanekeTestUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+HanekeTestUtils.h"; sourceTree = ""; }; 63 | A0833C1119B24DE200C0BE41 /* UIImage+HanekeTestUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+HanekeTestUtils.m"; sourceTree = ""; }; 64 | A0833C1219B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestCase+HanekeTestUtils.h"; sourceTree = ""; }; 65 | A0833C1319B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestCase+HanekeTestUtils.m"; sourceTree = ""; }; 66 | A5E4CFD8DBDC403B8E13C921 /* Pods-Haneke+AFNetworkingTests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Haneke+AFNetworkingTests.xcconfig"; path = "Pods/Pods-Haneke+AFNetworkingTests.xcconfig"; sourceTree = ""; }; 67 | C0C1C82C490E44D3A4CEEB35 /* libPods-Haneke+AFNetworkingTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Haneke+AFNetworkingTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | A0045DD219B2448300B12CE4 /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | A0045DD919B2448300B12CE4 /* Foundation.framework in Frameworks */, 76 | 914A2AE25AC54A449679EAB4 /* libPods.a in Frameworks */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | A0045DE219B2448300B12CE4 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | A0045DED19B2448300B12CE4 /* libHaneke+AFNetworking.a in Frameworks */, 85 | A0045DE719B2448300B12CE4 /* XCTest.framework in Frameworks */, 86 | A0045DEA19B2448300B12CE4 /* UIKit.framework in Frameworks */, 87 | A0045DE819B2448300B12CE4 /* Foundation.framework in Frameworks */, 88 | B5DC2F8258C749D29172B3D0 /* libPods-Haneke+AFNetworkingTests.a in Frameworks */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXFrameworksBuildPhase section */ 93 | 94 | /* Begin PBXGroup section */ 95 | A0045DCC19B2448300B12CE4 = { 96 | isa = PBXGroup; 97 | children = ( 98 | A0045DDA19B2448300B12CE4 /* Haneke+AFNetworking */, 99 | A0045DEE19B2448300B12CE4 /* Haneke+AFNetworkingTests */, 100 | A0045DD719B2448300B12CE4 /* Frameworks */, 101 | A0045DD619B2448300B12CE4 /* Products */, 102 | 52B8085CDA3A43CD86C6A42F /* Pods.xcconfig */, 103 | A5E4CFD8DBDC403B8E13C921 /* Pods-Haneke+AFNetworkingTests.xcconfig */, 104 | ); 105 | sourceTree = ""; 106 | }; 107 | A0045DD619B2448300B12CE4 /* Products */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | A0045DD519B2448300B12CE4 /* libHaneke+AFNetworking.a */, 111 | A0045DE519B2448300B12CE4 /* Haneke+AFNetworkingTests.xctest */, 112 | ); 113 | name = Products; 114 | sourceTree = ""; 115 | }; 116 | A0045DD719B2448300B12CE4 /* Frameworks */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | A0045DD819B2448300B12CE4 /* Foundation.framework */, 120 | A0045DE619B2448300B12CE4 /* XCTest.framework */, 121 | A0045DE919B2448300B12CE4 /* UIKit.framework */, 122 | 1C36D396ADEE47809852C20E /* libPods.a */, 123 | C0C1C82C490E44D3A4CEEB35 /* libPods-Haneke+AFNetworkingTests.a */, 124 | ); 125 | name = Frameworks; 126 | sourceTree = ""; 127 | }; 128 | A0045DDA19B2448300B12CE4 /* Haneke+AFNetworking */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | A0045DDD19B2448300B12CE4 /* Haneke+AFNetworking.h */, 132 | A0045DDF19B2448300B12CE4 /* Haneke+AFNetworking.m */, 133 | A0045DDB19B2448300B12CE4 /* Supporting Files */, 134 | ); 135 | path = "Haneke+AFNetworking"; 136 | sourceTree = ""; 137 | }; 138 | A0045DDB19B2448300B12CE4 /* Supporting Files */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | A0045DDC19B2448300B12CE4 /* Haneke+AFNetworking-Prefix.pch */, 142 | ); 143 | name = "Supporting Files"; 144 | sourceTree = ""; 145 | }; 146 | A0045DEE19B2448300B12CE4 /* Haneke+AFNetworkingTests */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | A0045DF419B2448300B12CE4 /* HNKNetworkEntity+AFNetworkingTests.m */, 150 | A0045DEF19B2448300B12CE4 /* Supporting Files */, 151 | A0833C1619B24DE600C0BE41 /* Test Utils */, 152 | ); 153 | path = "Haneke+AFNetworkingTests"; 154 | sourceTree = ""; 155 | }; 156 | A0045DEF19B2448300B12CE4 /* Supporting Files */ = { 157 | isa = PBXGroup; 158 | children = ( 159 | A0045DF019B2448300B12CE4 /* Haneke+AFNetworkingTests-Info.plist */, 160 | A0045DF119B2448300B12CE4 /* InfoPlist.strings */, 161 | ); 162 | name = "Supporting Files"; 163 | sourceTree = ""; 164 | }; 165 | A0833C1619B24DE600C0BE41 /* Test Utils */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | A0833C1019B24DE200C0BE41 /* UIImage+HanekeTestUtils.h */, 169 | A0833C1119B24DE200C0BE41 /* UIImage+HanekeTestUtils.m */, 170 | A0833C1219B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.h */, 171 | A0833C1319B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.m */, 172 | ); 173 | name = "Test Utils"; 174 | sourceTree = ""; 175 | }; 176 | /* End PBXGroup section */ 177 | 178 | /* Begin PBXNativeTarget section */ 179 | A0045DD419B2448300B12CE4 /* Haneke+AFNetworking */ = { 180 | isa = PBXNativeTarget; 181 | buildConfigurationList = A0045DF819B2448300B12CE4 /* Build configuration list for PBXNativeTarget "Haneke+AFNetworking" */; 182 | buildPhases = ( 183 | E715208D600B418C9B2394E3 /* Check Pods Manifest.lock */, 184 | A0045DD119B2448300B12CE4 /* Sources */, 185 | A0045DD219B2448300B12CE4 /* Frameworks */, 186 | A0045DD319B2448300B12CE4 /* CopyFiles */, 187 | 15C831F951C14AD5BCF34B0B /* Copy Pods Resources */, 188 | ); 189 | buildRules = ( 190 | ); 191 | dependencies = ( 192 | ); 193 | name = "Haneke+AFNetworking"; 194 | productName = "Haneke+AFNetworking"; 195 | productReference = A0045DD519B2448300B12CE4 /* libHaneke+AFNetworking.a */; 196 | productType = "com.apple.product-type.library.static"; 197 | }; 198 | A0045DE419B2448300B12CE4 /* Haneke+AFNetworkingTests */ = { 199 | isa = PBXNativeTarget; 200 | buildConfigurationList = A0045DFB19B2448300B12CE4 /* Build configuration list for PBXNativeTarget "Haneke+AFNetworkingTests" */; 201 | buildPhases = ( 202 | 948CEE40A45646F481632F17 /* Check Pods Manifest.lock */, 203 | A0045DE119B2448300B12CE4 /* Sources */, 204 | A0045DE219B2448300B12CE4 /* Frameworks */, 205 | A0045DE319B2448300B12CE4 /* Resources */, 206 | 361555ADDC0B456FB603AE88 /* Copy Pods Resources */, 207 | ); 208 | buildRules = ( 209 | ); 210 | dependencies = ( 211 | A0045DEC19B2448300B12CE4 /* PBXTargetDependency */, 212 | ); 213 | name = "Haneke+AFNetworkingTests"; 214 | productName = "Haneke+AFNetworkingTests"; 215 | productReference = A0045DE519B2448300B12CE4 /* Haneke+AFNetworkingTests.xctest */; 216 | productType = "com.apple.product-type.bundle.unit-test"; 217 | }; 218 | /* End PBXNativeTarget section */ 219 | 220 | /* Begin PBXProject section */ 221 | A0045DCD19B2448300B12CE4 /* Project object */ = { 222 | isa = PBXProject; 223 | attributes = { 224 | LastUpgradeCheck = 0510; 225 | ORGANIZATIONNAME = "Hermes Pique"; 226 | }; 227 | buildConfigurationList = A0045DD019B2448300B12CE4 /* Build configuration list for PBXProject "Haneke+AFNetworking" */; 228 | compatibilityVersion = "Xcode 3.2"; 229 | developmentRegion = English; 230 | hasScannedForEncodings = 0; 231 | knownRegions = ( 232 | en, 233 | ); 234 | mainGroup = A0045DCC19B2448300B12CE4; 235 | productRefGroup = A0045DD619B2448300B12CE4 /* Products */; 236 | projectDirPath = ""; 237 | projectRoot = ""; 238 | targets = ( 239 | A0045DD419B2448300B12CE4 /* Haneke+AFNetworking */, 240 | A0045DE419B2448300B12CE4 /* Haneke+AFNetworkingTests */, 241 | ); 242 | }; 243 | /* End PBXProject section */ 244 | 245 | /* Begin PBXResourcesBuildPhase section */ 246 | A0045DE319B2448300B12CE4 /* Resources */ = { 247 | isa = PBXResourcesBuildPhase; 248 | buildActionMask = 2147483647; 249 | files = ( 250 | A0045DF319B2448300B12CE4 /* InfoPlist.strings in Resources */, 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | }; 254 | /* End PBXResourcesBuildPhase section */ 255 | 256 | /* Begin PBXShellScriptBuildPhase section */ 257 | 15C831F951C14AD5BCF34B0B /* Copy Pods Resources */ = { 258 | isa = PBXShellScriptBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | ); 262 | inputPaths = ( 263 | ); 264 | name = "Copy Pods Resources"; 265 | outputPaths = ( 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | shellPath = /bin/sh; 269 | shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; 270 | showEnvVarsInLog = 0; 271 | }; 272 | 361555ADDC0B456FB603AE88 /* Copy Pods Resources */ = { 273 | isa = PBXShellScriptBuildPhase; 274 | buildActionMask = 2147483647; 275 | files = ( 276 | ); 277 | inputPaths = ( 278 | ); 279 | name = "Copy Pods Resources"; 280 | outputPaths = ( 281 | ); 282 | runOnlyForDeploymentPostprocessing = 0; 283 | shellPath = /bin/sh; 284 | shellScript = "\"${SRCROOT}/Pods/Pods-Haneke+AFNetworkingTests-resources.sh\"\n"; 285 | showEnvVarsInLog = 0; 286 | }; 287 | 948CEE40A45646F481632F17 /* Check Pods Manifest.lock */ = { 288 | isa = PBXShellScriptBuildPhase; 289 | buildActionMask = 2147483647; 290 | files = ( 291 | ); 292 | inputPaths = ( 293 | ); 294 | name = "Check Pods Manifest.lock"; 295 | outputPaths = ( 296 | ); 297 | runOnlyForDeploymentPostprocessing = 0; 298 | shellPath = /bin/sh; 299 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 300 | showEnvVarsInLog = 0; 301 | }; 302 | E715208D600B418C9B2394E3 /* Check Pods Manifest.lock */ = { 303 | isa = PBXShellScriptBuildPhase; 304 | buildActionMask = 2147483647; 305 | files = ( 306 | ); 307 | inputPaths = ( 308 | ); 309 | name = "Check Pods Manifest.lock"; 310 | outputPaths = ( 311 | ); 312 | runOnlyForDeploymentPostprocessing = 0; 313 | shellPath = /bin/sh; 314 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 315 | showEnvVarsInLog = 0; 316 | }; 317 | /* End PBXShellScriptBuildPhase section */ 318 | 319 | /* Begin PBXSourcesBuildPhase section */ 320 | A0045DD119B2448300B12CE4 /* Sources */ = { 321 | isa = PBXSourcesBuildPhase; 322 | buildActionMask = 2147483647; 323 | files = ( 324 | A0045DE019B2448300B12CE4 /* Haneke+AFNetworking.m in Sources */, 325 | ); 326 | runOnlyForDeploymentPostprocessing = 0; 327 | }; 328 | A0045DE119B2448300B12CE4 /* Sources */ = { 329 | isa = PBXSourcesBuildPhase; 330 | buildActionMask = 2147483647; 331 | files = ( 332 | A0833C1519B24DE200C0BE41 /* XCTestCase+HanekeTestUtils.m in Sources */, 333 | A0045DF519B2448300B12CE4 /* HNKNetworkEntity+AFNetworkingTests.m in Sources */, 334 | A0833C1419B24DE200C0BE41 /* UIImage+HanekeTestUtils.m in Sources */, 335 | ); 336 | runOnlyForDeploymentPostprocessing = 0; 337 | }; 338 | /* End PBXSourcesBuildPhase section */ 339 | 340 | /* Begin PBXTargetDependency section */ 341 | A0045DEC19B2448300B12CE4 /* PBXTargetDependency */ = { 342 | isa = PBXTargetDependency; 343 | target = A0045DD419B2448300B12CE4 /* Haneke+AFNetworking */; 344 | targetProxy = A0045DEB19B2448300B12CE4 /* PBXContainerItemProxy */; 345 | }; 346 | /* End PBXTargetDependency section */ 347 | 348 | /* Begin PBXVariantGroup section */ 349 | A0045DF119B2448300B12CE4 /* InfoPlist.strings */ = { 350 | isa = PBXVariantGroup; 351 | children = ( 352 | A0045DF219B2448300B12CE4 /* en */, 353 | ); 354 | name = InfoPlist.strings; 355 | sourceTree = ""; 356 | }; 357 | /* End PBXVariantGroup section */ 358 | 359 | /* Begin XCBuildConfiguration section */ 360 | A0045DF619B2448300B12CE4 /* Debug */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | ALWAYS_SEARCH_USER_PATHS = NO; 364 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 365 | CLANG_CXX_LIBRARY = "libc++"; 366 | CLANG_ENABLE_MODULES = YES; 367 | CLANG_ENABLE_OBJC_ARC = YES; 368 | CLANG_WARN_BOOL_CONVERSION = YES; 369 | CLANG_WARN_CONSTANT_CONVERSION = YES; 370 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 371 | CLANG_WARN_EMPTY_BODY = YES; 372 | CLANG_WARN_ENUM_CONVERSION = YES; 373 | CLANG_WARN_INT_CONVERSION = YES; 374 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 375 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 376 | COPY_PHASE_STRIP = NO; 377 | GCC_C_LANGUAGE_STANDARD = gnu99; 378 | GCC_DYNAMIC_NO_PIC = NO; 379 | GCC_OPTIMIZATION_LEVEL = 0; 380 | GCC_PREPROCESSOR_DEFINITIONS = ( 381 | "DEBUG=1", 382 | "$(inherited)", 383 | ); 384 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 385 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 386 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 387 | GCC_WARN_UNDECLARED_SELECTOR = YES; 388 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 389 | GCC_WARN_UNUSED_FUNCTION = YES; 390 | GCC_WARN_UNUSED_VARIABLE = YES; 391 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 392 | ONLY_ACTIVE_ARCH = YES; 393 | SDKROOT = iphoneos; 394 | }; 395 | name = Debug; 396 | }; 397 | A0045DF719B2448300B12CE4 /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | buildSettings = { 400 | ALWAYS_SEARCH_USER_PATHS = NO; 401 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 402 | CLANG_CXX_LIBRARY = "libc++"; 403 | CLANG_ENABLE_MODULES = YES; 404 | CLANG_ENABLE_OBJC_ARC = YES; 405 | CLANG_WARN_BOOL_CONVERSION = YES; 406 | CLANG_WARN_CONSTANT_CONVERSION = YES; 407 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 408 | CLANG_WARN_EMPTY_BODY = YES; 409 | CLANG_WARN_ENUM_CONVERSION = YES; 410 | CLANG_WARN_INT_CONVERSION = YES; 411 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | COPY_PHASE_STRIP = YES; 414 | ENABLE_NS_ASSERTIONS = NO; 415 | GCC_C_LANGUAGE_STANDARD = gnu99; 416 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 417 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 418 | GCC_WARN_UNDECLARED_SELECTOR = YES; 419 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 420 | GCC_WARN_UNUSED_FUNCTION = YES; 421 | GCC_WARN_UNUSED_VARIABLE = YES; 422 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 423 | SDKROOT = iphoneos; 424 | VALIDATE_PRODUCT = YES; 425 | }; 426 | name = Release; 427 | }; 428 | A0045DF919B2448300B12CE4 /* Debug */ = { 429 | isa = XCBuildConfiguration; 430 | baseConfigurationReference = 52B8085CDA3A43CD86C6A42F /* Pods.xcconfig */; 431 | buildSettings = { 432 | DSTROOT = /tmp/Haneke_AFNetworking.dst; 433 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 434 | GCC_PREFIX_HEADER = "Haneke+AFNetworking/Haneke+AFNetworking-Prefix.pch"; 435 | OTHER_LDFLAGS = "-ObjC"; 436 | PRODUCT_NAME = "$(TARGET_NAME)"; 437 | SKIP_INSTALL = YES; 438 | }; 439 | name = Debug; 440 | }; 441 | A0045DFA19B2448300B12CE4 /* Release */ = { 442 | isa = XCBuildConfiguration; 443 | baseConfigurationReference = 52B8085CDA3A43CD86C6A42F /* Pods.xcconfig */; 444 | buildSettings = { 445 | DSTROOT = /tmp/Haneke_AFNetworking.dst; 446 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 447 | GCC_PREFIX_HEADER = "Haneke+AFNetworking/Haneke+AFNetworking-Prefix.pch"; 448 | OTHER_LDFLAGS = "-ObjC"; 449 | PRODUCT_NAME = "$(TARGET_NAME)"; 450 | SKIP_INSTALL = YES; 451 | }; 452 | name = Release; 453 | }; 454 | A0045DFC19B2448300B12CE4 /* Debug */ = { 455 | isa = XCBuildConfiguration; 456 | baseConfigurationReference = A5E4CFD8DBDC403B8E13C921 /* Pods-Haneke+AFNetworkingTests.xcconfig */; 457 | buildSettings = { 458 | FRAMEWORK_SEARCH_PATHS = ( 459 | "$(SDKROOT)/Developer/Library/Frameworks", 460 | "$(inherited)", 461 | "$(DEVELOPER_FRAMEWORKS_DIR)", 462 | ); 463 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 464 | GCC_PREFIX_HEADER = "Haneke+AFNetworking/Haneke+AFNetworking-Prefix.pch"; 465 | GCC_PREPROCESSOR_DEFINITIONS = ( 466 | "DEBUG=1", 467 | "$(inherited)", 468 | ); 469 | INFOPLIST_FILE = "Haneke+AFNetworkingTests/Haneke+AFNetworkingTests-Info.plist"; 470 | PRODUCT_NAME = "$(TARGET_NAME)"; 471 | WRAPPER_EXTENSION = xctest; 472 | }; 473 | name = Debug; 474 | }; 475 | A0045DFD19B2448300B12CE4 /* Release */ = { 476 | isa = XCBuildConfiguration; 477 | baseConfigurationReference = A5E4CFD8DBDC403B8E13C921 /* Pods-Haneke+AFNetworkingTests.xcconfig */; 478 | buildSettings = { 479 | FRAMEWORK_SEARCH_PATHS = ( 480 | "$(SDKROOT)/Developer/Library/Frameworks", 481 | "$(inherited)", 482 | "$(DEVELOPER_FRAMEWORKS_DIR)", 483 | ); 484 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 485 | GCC_PREFIX_HEADER = "Haneke+AFNetworking/Haneke+AFNetworking-Prefix.pch"; 486 | INFOPLIST_FILE = "Haneke+AFNetworkingTests/Haneke+AFNetworkingTests-Info.plist"; 487 | PRODUCT_NAME = "$(TARGET_NAME)"; 488 | WRAPPER_EXTENSION = xctest; 489 | }; 490 | name = Release; 491 | }; 492 | /* End XCBuildConfiguration section */ 493 | 494 | /* Begin XCConfigurationList section */ 495 | A0045DD019B2448300B12CE4 /* Build configuration list for PBXProject "Haneke+AFNetworking" */ = { 496 | isa = XCConfigurationList; 497 | buildConfigurations = ( 498 | A0045DF619B2448300B12CE4 /* Debug */, 499 | A0045DF719B2448300B12CE4 /* Release */, 500 | ); 501 | defaultConfigurationIsVisible = 0; 502 | defaultConfigurationName = Release; 503 | }; 504 | A0045DF819B2448300B12CE4 /* Build configuration list for PBXNativeTarget "Haneke+AFNetworking" */ = { 505 | isa = XCConfigurationList; 506 | buildConfigurations = ( 507 | A0045DF919B2448300B12CE4 /* Debug */, 508 | A0045DFA19B2448300B12CE4 /* Release */, 509 | ); 510 | defaultConfigurationIsVisible = 0; 511 | defaultConfigurationName = Release; 512 | }; 513 | A0045DFB19B2448300B12CE4 /* Build configuration list for PBXNativeTarget "Haneke+AFNetworkingTests" */ = { 514 | isa = XCConfigurationList; 515 | buildConfigurations = ( 516 | A0045DFC19B2448300B12CE4 /* Debug */, 517 | A0045DFD19B2448300B12CE4 /* Release */, 518 | ); 519 | defaultConfigurationIsVisible = 0; 520 | defaultConfigurationName = Release; 521 | }; 522 | /* End XCConfigurationList section */ 523 | }; 524 | rootObject = A0045DCD19B2448300B12CE4 /* Project object */; 525 | } 526 | --------------------------------------------------------------------------------