├── http_proxy_example.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── http_proxy_example
├── UserHttpHandler.h
├── CommentHttpHandler.h
├── UserHttpHandlerImp.h
├── CommentHttpHandlerImp.h
├── UserHttpHandlerImp.m
├── CommentHttpHandlerImp.m
├── HttpProxy.h
├── main.m
└── HttpProxy.m
├── README.md
└── .gitignore
/http_proxy_example.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/http_proxy_example/UserHttpHandler.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15/2/16.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 |
8 | @protocol UserHttpHandler
9 | - (void)getUserWithID:(NSNumber *)userID;
10 | @end
--------------------------------------------------------------------------------
/http_proxy_example/CommentHttpHandler.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15/2/16.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 |
8 | @protocol CommentHttpHandler
9 | - (void)getCommentsWithDate:(NSDate *)date;
10 | @end
--------------------------------------------------------------------------------
/http_proxy_example/UserHttpHandlerImp.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15-1-25.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 | #import "UserHttpHandler.h"
8 |
9 | @interface UserHttpHandlerImp : NSObject
10 |
11 | @end
--------------------------------------------------------------------------------
/http_proxy_example/CommentHttpHandlerImp.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15/2/16.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 | #import "CommentHttpHandler.h"
8 |
9 | @interface CommentHttpHandlerImp : NSObject
10 | @end
--------------------------------------------------------------------------------
/http_proxy_example/UserHttpHandlerImp.m:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15-1-25.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import "UserHttpHandlerImp.h"
7 |
8 |
9 | @implementation UserHttpHandlerImp
10 |
11 | - (void)getUserWithID:(NSNumber *)userID {
12 | NSLog(@"get user with ID: %@", userID);
13 | }
14 |
15 | @end
--------------------------------------------------------------------------------
/http_proxy_example/CommentHttpHandlerImp.m:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15/2/16.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import "CommentHttpHandlerImp.h"
7 |
8 |
9 | @implementation CommentHttpHandlerImp
10 |
11 | - (void)getCommentsWithDate:(NSDate *)date {
12 | NSLog(@"get comments with date: %@", date);
13 | }
14 |
15 | @end
--------------------------------------------------------------------------------
/http_proxy_example/HttpProxy.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15-1-20.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 | #import "UserHttpHandler.h"
8 | #import "CommentHttpHandler.h"
9 |
10 | @interface HttpProxy : NSProxy
11 |
12 | + (instancetype)sharedInstance;
13 |
14 | - (void)registerHttpProtocol:(Protocol *)httpProtocol handler:(id)handler;
15 | @end
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # HttpProxyExample
2 | HttpProxyExample: Example of using NSProxy to manage http layer in Project.
3 |
4 | Blog: [利用NSProxy实现消息转发-模块化的网络接口层设计-原创](http://tutuge.me/2015/02/16/%E5%88%A9%E7%94%A8NSProxy%E5%AE%9E%E7%8E%B0%E6%B6%88%E6%81%AF%E8%BD%AC%E5%8F%91-%E6%A8%A1%E5%9D%97%E5%8C%96%E7%9A%84%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E5%B1%82%E8%AE%BE%E8%AE%A1-%E5%8E%9F%E5%88%9B/)
5 |
6 | 
7 |
8 |
--------------------------------------------------------------------------------
/http_proxy_example/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // http_proxy_example
4 | //
5 | // Created by zorro on 15/2/16.
6 | // Copyright (c) 2015年 tutuge. All rights reserved.
7 | //
8 |
9 | #import "HttpProxy.h"
10 | #import "UserHttpHandlerImp.h"
11 | #import "CommentHttpHandlerImp.h"
12 |
13 | int main(int argc, const char *argv[]) {
14 |
15 | @autoreleasepool {
16 | //Init and register http handler
17 | [[HttpProxy sharedInstance] registerHttpProtocol:@protocol(UserHttpHandler) handler:[UserHttpHandlerImp new]];
18 | [[HttpProxy sharedInstance] registerHttpProtocol:@protocol(CommentHttpHandler) handler:[CommentHttpHandlerImp new]];
19 |
20 | //Call
21 | [[HttpProxy sharedInstance] getUserWithID:@100];
22 | [[HttpProxy sharedInstance] getCommentsWithDate:[NSDate new]];
23 | }
24 | return 0;
25 | }
26 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io
2 |
3 | ### Objective-C ###
4 | # Xcode
5 | #
6 | build/
7 | *.pbxuser
8 | !default.pbxuser
9 | *.mode1v3
10 | !default.mode1v3
11 | *.mode2v3
12 | !default.mode2v3
13 | *.perspectivev3
14 | !default.perspectivev3
15 | xcuserdata
16 | *.xccheckout
17 | *.moved-aside
18 | DerivedData
19 | *.hmap
20 | *.ipa
21 | *.xcuserstate
22 |
23 | # CocoaPods
24 | #
25 | # We recommend against adding the Pods directory to your .gitignore. However
26 | # you should judge for yourself, the pros and cons are mentioned at:
27 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
28 | #
29 | # Pods/
30 |
31 |
32 | ### Xcode ###
33 | build/
34 | *.pbxuser
35 | !default.pbxuser
36 | *.mode1v3
37 | !default.mode1v3
38 | *.mode2v3
39 | !default.mode2v3
40 | *.perspectivev3
41 | !default.perspectivev3
42 | xcuserdata
43 | *.xccheckout
44 | *.moved-aside
45 | DerivedData
46 | *.xcuserstate
47 |
48 |
--------------------------------------------------------------------------------
/http_proxy_example/HttpProxy.m:
--------------------------------------------------------------------------------
1 | //
2 | // Created by zorro on 15-1-20.
3 | // Copyright (c) 2015 zorro. All rights reserved.
4 | //
5 |
6 | #import
7 | #import "HttpProxy.h"
8 |
9 | @interface HttpProxy ()
10 | @property(strong, nonatomic) NSMutableDictionary *selToHandlerMap;
11 | @end
12 |
13 | @implementation HttpProxy
14 |
15 | #pragma mark - Public methods
16 |
17 | + (instancetype)sharedInstance {
18 | static HttpProxy *httpProxy = nil;
19 |
20 | static dispatch_once_t onceToken;
21 | dispatch_once(&onceToken, ^{
22 | httpProxy = [HttpProxy alloc];
23 | httpProxy.selToHandlerMap = [NSMutableDictionary new];
24 | });
25 |
26 | return httpProxy;
27 | }
28 |
29 | - (void)registerHttpProtocol:(Protocol *)httpProtocol handler:(id)handler {
30 | unsigned int numberOfMethods = 0;
31 |
32 | //Get all methods in protocol
33 | struct objc_method_description *methods = protocol_copyMethodDescriptionList(
34 | httpProtocol, YES, YES, &numberOfMethods);
35 |
36 | //Register protocol methods
37 | for (unsigned int i = 0; i < numberOfMethods; i++) {
38 | struct objc_method_description method = methods[i];
39 | [_selToHandlerMap setValue:handler forKey:NSStringFromSelector(method.name)];
40 | }
41 | }
42 |
43 | #pragma mark - Methods route
44 |
45 | - (NSMethodSignature *)methodSignatureForSelector:(SEL)sel {
46 | NSString *methodsName = NSStringFromSelector(sel);
47 | id handler = [_selToHandlerMap valueForKey:methodsName];
48 |
49 | if (handler != nil && [handler respondsToSelector:sel]) {
50 | return [handler methodSignatureForSelector:sel];
51 | } else {
52 | return [super methodSignatureForSelector:sel];
53 | }
54 | }
55 |
56 | - (void)forwardInvocation:(NSInvocation *)invocation {
57 | NSString *methodsName = NSStringFromSelector(invocation.selector);
58 | id handler = [_selToHandlerMap valueForKey:methodsName];
59 |
60 | if (handler != nil && [handler respondsToSelector:invocation.selector]) {
61 | [invocation invokeWithTarget:handler];
62 | } else {
63 | [super forwardInvocation:invocation];
64 | }
65 | }
66 |
67 | @end
--------------------------------------------------------------------------------
/http_proxy_example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | F41D01731A92490200DF5AA4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F41D01721A92490200DF5AA4 /* main.m */; };
11 | F41D01811A92491A00DF5AA4 /* CommentHttpHandlerImp.m in Sources */ = {isa = PBXBuildFile; fileRef = F41D017B1A92491A00DF5AA4 /* CommentHttpHandlerImp.m */; };
12 | F41D01821A92491A00DF5AA4 /* HttpProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = F41D017D1A92491A00DF5AA4 /* HttpProxy.m */; };
13 | F41D01831A92491A00DF5AA4 /* UserHttpHandlerImp.m in Sources */ = {isa = PBXBuildFile; fileRef = F41D01801A92491A00DF5AA4 /* UserHttpHandlerImp.m */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXCopyFilesBuildPhase section */
17 | F41D016D1A92490200DF5AA4 /* CopyFiles */ = {
18 | isa = PBXCopyFilesBuildPhase;
19 | buildActionMask = 2147483647;
20 | dstPath = /usr/share/man/man1/;
21 | dstSubfolderSpec = 0;
22 | files = (
23 | );
24 | runOnlyForDeploymentPostprocessing = 1;
25 | };
26 | /* End PBXCopyFilesBuildPhase section */
27 |
28 | /* Begin PBXFileReference section */
29 | F41D016F1A92490200DF5AA4 /* http_proxy_example */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = http_proxy_example; sourceTree = BUILT_PRODUCTS_DIR; };
30 | F41D01721A92490200DF5AA4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
31 | F41D01791A92491A00DF5AA4 /* CommentHttpHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentHttpHandler.h; sourceTree = ""; };
32 | F41D017A1A92491A00DF5AA4 /* CommentHttpHandlerImp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentHttpHandlerImp.h; sourceTree = ""; };
33 | F41D017B1A92491A00DF5AA4 /* CommentHttpHandlerImp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentHttpHandlerImp.m; sourceTree = ""; };
34 | F41D017C1A92491A00DF5AA4 /* HttpProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpProxy.h; sourceTree = ""; };
35 | F41D017D1A92491A00DF5AA4 /* HttpProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HttpProxy.m; sourceTree = ""; };
36 | F41D017E1A92491A00DF5AA4 /* UserHttpHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserHttpHandler.h; sourceTree = ""; };
37 | F41D017F1A92491A00DF5AA4 /* UserHttpHandlerImp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserHttpHandlerImp.h; sourceTree = ""; };
38 | F41D01801A92491A00DF5AA4 /* UserHttpHandlerImp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserHttpHandlerImp.m; sourceTree = ""; };
39 | /* End PBXFileReference section */
40 |
41 | /* Begin PBXFrameworksBuildPhase section */
42 | F41D016C1A92490200DF5AA4 /* Frameworks */ = {
43 | isa = PBXFrameworksBuildPhase;
44 | buildActionMask = 2147483647;
45 | files = (
46 | );
47 | runOnlyForDeploymentPostprocessing = 0;
48 | };
49 | /* End PBXFrameworksBuildPhase section */
50 |
51 | /* Begin PBXGroup section */
52 | F41D01661A92490200DF5AA4 = {
53 | isa = PBXGroup;
54 | children = (
55 | F41D01711A92490200DF5AA4 /* http_proxy_example */,
56 | F41D01701A92490200DF5AA4 /* Products */,
57 | );
58 | sourceTree = "";
59 | };
60 | F41D01701A92490200DF5AA4 /* Products */ = {
61 | isa = PBXGroup;
62 | children = (
63 | F41D016F1A92490200DF5AA4 /* http_proxy_example */,
64 | );
65 | name = Products;
66 | sourceTree = "";
67 | };
68 | F41D01711A92490200DF5AA4 /* http_proxy_example */ = {
69 | isa = PBXGroup;
70 | children = (
71 | F41D01861A92494100DF5AA4 /* HttpProxy */,
72 | F41D01851A92493100DF5AA4 /* HttpProtocolImp */,
73 | F41D01841A92492600DF5AA4 /* HttpProtocol */,
74 | F41D01721A92490200DF5AA4 /* main.m */,
75 | );
76 | path = http_proxy_example;
77 | sourceTree = "";
78 | };
79 | F41D01841A92492600DF5AA4 /* HttpProtocol */ = {
80 | isa = PBXGroup;
81 | children = (
82 | F41D01791A92491A00DF5AA4 /* CommentHttpHandler.h */,
83 | F41D017E1A92491A00DF5AA4 /* UserHttpHandler.h */,
84 | );
85 | name = HttpProtocol;
86 | sourceTree = "";
87 | };
88 | F41D01851A92493100DF5AA4 /* HttpProtocolImp */ = {
89 | isa = PBXGroup;
90 | children = (
91 | F41D017A1A92491A00DF5AA4 /* CommentHttpHandlerImp.h */,
92 | F41D017B1A92491A00DF5AA4 /* CommentHttpHandlerImp.m */,
93 | F41D017F1A92491A00DF5AA4 /* UserHttpHandlerImp.h */,
94 | F41D01801A92491A00DF5AA4 /* UserHttpHandlerImp.m */,
95 | );
96 | name = HttpProtocolImp;
97 | sourceTree = "";
98 | };
99 | F41D01861A92494100DF5AA4 /* HttpProxy */ = {
100 | isa = PBXGroup;
101 | children = (
102 | F41D017C1A92491A00DF5AA4 /* HttpProxy.h */,
103 | F41D017D1A92491A00DF5AA4 /* HttpProxy.m */,
104 | );
105 | name = HttpProxy;
106 | sourceTree = "";
107 | };
108 | /* End PBXGroup section */
109 |
110 | /* Begin PBXNativeTarget section */
111 | F41D016E1A92490200DF5AA4 /* http_proxy_example */ = {
112 | isa = PBXNativeTarget;
113 | buildConfigurationList = F41D01761A92490200DF5AA4 /* Build configuration list for PBXNativeTarget "http_proxy_example" */;
114 | buildPhases = (
115 | F41D016B1A92490200DF5AA4 /* Sources */,
116 | F41D016C1A92490200DF5AA4 /* Frameworks */,
117 | F41D016D1A92490200DF5AA4 /* CopyFiles */,
118 | );
119 | buildRules = (
120 | );
121 | dependencies = (
122 | );
123 | name = http_proxy_example;
124 | productName = http_proxy_example;
125 | productReference = F41D016F1A92490200DF5AA4 /* http_proxy_example */;
126 | productType = "com.apple.product-type.tool";
127 | };
128 | /* End PBXNativeTarget section */
129 |
130 | /* Begin PBXProject section */
131 | F41D01671A92490200DF5AA4 /* Project object */ = {
132 | isa = PBXProject;
133 | attributes = {
134 | LastUpgradeCheck = 0610;
135 | ORGANIZATIONNAME = tutuge;
136 | TargetAttributes = {
137 | F41D016E1A92490200DF5AA4 = {
138 | CreatedOnToolsVersion = 6.1.1;
139 | };
140 | };
141 | };
142 | buildConfigurationList = F41D016A1A92490200DF5AA4 /* Build configuration list for PBXProject "http_proxy_example" */;
143 | compatibilityVersion = "Xcode 3.2";
144 | developmentRegion = English;
145 | hasScannedForEncodings = 0;
146 | knownRegions = (
147 | en,
148 | );
149 | mainGroup = F41D01661A92490200DF5AA4;
150 | productRefGroup = F41D01701A92490200DF5AA4 /* Products */;
151 | projectDirPath = "";
152 | projectRoot = "";
153 | targets = (
154 | F41D016E1A92490200DF5AA4 /* http_proxy_example */,
155 | );
156 | };
157 | /* End PBXProject section */
158 |
159 | /* Begin PBXSourcesBuildPhase section */
160 | F41D016B1A92490200DF5AA4 /* Sources */ = {
161 | isa = PBXSourcesBuildPhase;
162 | buildActionMask = 2147483647;
163 | files = (
164 | F41D01821A92491A00DF5AA4 /* HttpProxy.m in Sources */,
165 | F41D01731A92490200DF5AA4 /* main.m in Sources */,
166 | F41D01831A92491A00DF5AA4 /* UserHttpHandlerImp.m in Sources */,
167 | F41D01811A92491A00DF5AA4 /* CommentHttpHandlerImp.m in Sources */,
168 | );
169 | runOnlyForDeploymentPostprocessing = 0;
170 | };
171 | /* End PBXSourcesBuildPhase section */
172 |
173 | /* Begin XCBuildConfiguration section */
174 | F41D01741A92490200DF5AA4 /* Debug */ = {
175 | isa = XCBuildConfiguration;
176 | buildSettings = {
177 | ALWAYS_SEARCH_USER_PATHS = NO;
178 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
179 | CLANG_CXX_LIBRARY = "libc++";
180 | CLANG_ENABLE_MODULES = YES;
181 | CLANG_ENABLE_OBJC_ARC = YES;
182 | CLANG_WARN_BOOL_CONVERSION = YES;
183 | CLANG_WARN_CONSTANT_CONVERSION = YES;
184 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
185 | CLANG_WARN_EMPTY_BODY = YES;
186 | CLANG_WARN_ENUM_CONVERSION = YES;
187 | CLANG_WARN_INT_CONVERSION = YES;
188 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
189 | CLANG_WARN_UNREACHABLE_CODE = YES;
190 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
191 | COPY_PHASE_STRIP = NO;
192 | ENABLE_STRICT_OBJC_MSGSEND = YES;
193 | GCC_C_LANGUAGE_STANDARD = gnu99;
194 | GCC_DYNAMIC_NO_PIC = NO;
195 | GCC_OPTIMIZATION_LEVEL = 0;
196 | GCC_PREPROCESSOR_DEFINITIONS = (
197 | "DEBUG=1",
198 | "$(inherited)",
199 | );
200 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
201 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
202 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
203 | GCC_WARN_UNDECLARED_SELECTOR = YES;
204 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
205 | GCC_WARN_UNUSED_FUNCTION = YES;
206 | GCC_WARN_UNUSED_VARIABLE = YES;
207 | MACOSX_DEPLOYMENT_TARGET = 10.10;
208 | MTL_ENABLE_DEBUG_INFO = YES;
209 | ONLY_ACTIVE_ARCH = YES;
210 | SDKROOT = macosx;
211 | };
212 | name = Debug;
213 | };
214 | F41D01751A92490200DF5AA4 /* Release */ = {
215 | isa = XCBuildConfiguration;
216 | buildSettings = {
217 | ALWAYS_SEARCH_USER_PATHS = NO;
218 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
219 | CLANG_CXX_LIBRARY = "libc++";
220 | CLANG_ENABLE_MODULES = YES;
221 | CLANG_ENABLE_OBJC_ARC = YES;
222 | CLANG_WARN_BOOL_CONVERSION = YES;
223 | CLANG_WARN_CONSTANT_CONVERSION = YES;
224 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
225 | CLANG_WARN_EMPTY_BODY = YES;
226 | CLANG_WARN_ENUM_CONVERSION = YES;
227 | CLANG_WARN_INT_CONVERSION = YES;
228 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
229 | CLANG_WARN_UNREACHABLE_CODE = YES;
230 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
231 | COPY_PHASE_STRIP = YES;
232 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
233 | ENABLE_NS_ASSERTIONS = NO;
234 | ENABLE_STRICT_OBJC_MSGSEND = YES;
235 | GCC_C_LANGUAGE_STANDARD = gnu99;
236 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
237 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
238 | GCC_WARN_UNDECLARED_SELECTOR = YES;
239 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
240 | GCC_WARN_UNUSED_FUNCTION = YES;
241 | GCC_WARN_UNUSED_VARIABLE = YES;
242 | MACOSX_DEPLOYMENT_TARGET = 10.10;
243 | MTL_ENABLE_DEBUG_INFO = NO;
244 | SDKROOT = macosx;
245 | };
246 | name = Release;
247 | };
248 | F41D01771A92490200DF5AA4 /* Debug */ = {
249 | isa = XCBuildConfiguration;
250 | buildSettings = {
251 | PRODUCT_NAME = "$(TARGET_NAME)";
252 | };
253 | name = Debug;
254 | };
255 | F41D01781A92490200DF5AA4 /* Release */ = {
256 | isa = XCBuildConfiguration;
257 | buildSettings = {
258 | PRODUCT_NAME = "$(TARGET_NAME)";
259 | };
260 | name = Release;
261 | };
262 | /* End XCBuildConfiguration section */
263 |
264 | /* Begin XCConfigurationList section */
265 | F41D016A1A92490200DF5AA4 /* Build configuration list for PBXProject "http_proxy_example" */ = {
266 | isa = XCConfigurationList;
267 | buildConfigurations = (
268 | F41D01741A92490200DF5AA4 /* Debug */,
269 | F41D01751A92490200DF5AA4 /* Release */,
270 | );
271 | defaultConfigurationIsVisible = 0;
272 | defaultConfigurationName = Release;
273 | };
274 | F41D01761A92490200DF5AA4 /* Build configuration list for PBXNativeTarget "http_proxy_example" */ = {
275 | isa = XCConfigurationList;
276 | buildConfigurations = (
277 | F41D01771A92490200DF5AA4 /* Debug */,
278 | F41D01781A92490200DF5AA4 /* Release */,
279 | );
280 | defaultConfigurationIsVisible = 0;
281 | };
282 | /* End XCConfigurationList section */
283 | };
284 | rootObject = F41D01671A92490200DF5AA4 /* Project object */;
285 | }
286 |
--------------------------------------------------------------------------------