├── 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 | ![image](http://zorrochen.qiniudn.com/blog_ios_http_proxy_1_3.jpg) 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 | --------------------------------------------------------------------------------