├── 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 |
--------------------------------------------------------------------------------