From ccd666bc2adf4b2daf71388582b8f5c55a99a2ee Mon Sep 17 00:00:00 2001 From: Charlie Qiu Date: Fri, 10 Jun 2016 03:59:27 +0800 Subject: [PATCH] Look like working now. --- Podfile | 6 +- Podfile.lock | 5 +- .../BRLOptionParser/BRLOptionParser.h | 62 ++ .../BRLOptionParser/BRLOptionParser.m | 306 +++++++++ Pods/BRLOptionParser/LICENSE | 22 + Pods/BRLOptionParser/README.markdown | 88 +++ .../Private/BRLOptionParser/BRLOptionParser.h | 1 + .../Public/BRLOptionParser/BRLOptionParser.h | 1 + Pods/Manifest.lock | 5 +- Pods/Pods.xcodeproj/project.pbxproj | 634 ++++++++++++------ .../Alamofire/Alamofire.xcconfig | 2 +- .../BRLOptionParser/BRLOptionParser-dummy.m | 5 + .../BRLOptionParser-prefix.pch | 4 + .../BRLOptionParser/BRLOptionParser.xcconfig | 8 + ...roxy_conf_helper-acknowledgements.markdown | 29 + ...s-proxy_conf_helper-acknowledgements.plist | 59 ++ .../Pods-proxy_conf_helper-dummy.m | 5 + .../Pods-proxy_conf_helper-frameworks.sh | 84 +++ .../Pods-proxy_conf_helper-resources.sh | 102 +++ .../Pods-proxy_conf_helper.debug.xcconfig | 8 + .../Pods-proxy_conf_helper.release.xcconfig | 8 + ShadowsocksX-NG.xcodeproj/project.pbxproj | 165 ++++- ShadowsocksX-NG/AppDelegate.swift | 55 +- ShadowsocksX-NG/LaunchAgentUtils.swift | 2 +- ShadowsocksX-NG/PACUtils.swift | 6 +- ShadowsocksX-NG/ProxyConfHelper.h | 21 + ShadowsocksX-NG/ProxyConfHelper.m | 117 ++++ ShadowsocksX-NG/ServerProfileManager.swift | 5 +- .../ShadowsocksX-NG-Bridging-Header.h | 1 + ShadowsocksX-NG/Sysconf.m | 15 - ShadowsocksX-NG/install_helper.sh | 14 + ShadowsocksX-NG/proxy_conf_helper_version.h | 14 + ShadowsocksX-NG/reload_conf_ss_local.sh | 3 +- proxy_conf_helper/main.m | 143 ++++ 34 files changed, 1774 insertions(+), 231 deletions(-) create mode 100644 Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.h create mode 100644 Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.m create mode 100644 Pods/BRLOptionParser/LICENSE create mode 100644 Pods/BRLOptionParser/README.markdown create mode 120000 Pods/Headers/Private/BRLOptionParser/BRLOptionParser.h create mode 120000 Pods/Headers/Public/BRLOptionParser/BRLOptionParser.h create mode 100644 Pods/Target Support Files/BRLOptionParser/BRLOptionParser-dummy.m create mode 100644 Pods/Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch create mode 100644 Pods/Target Support Files/BRLOptionParser/BRLOptionParser.xcconfig create mode 100644 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-dummy.m create mode 100755 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh create mode 100755 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-resources.sh create mode 100644 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.release.xcconfig create mode 100644 ShadowsocksX-NG/ProxyConfHelper.h create mode 100644 ShadowsocksX-NG/ProxyConfHelper.m rename ShadowsocksX-NG-Bridging-Header.h => ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h (89%) delete mode 100644 ShadowsocksX-NG/Sysconf.m create mode 100644 ShadowsocksX-NG/install_helper.sh create mode 100644 ShadowsocksX-NG/proxy_conf_helper_version.h create mode 100644 proxy_conf_helper/main.m diff --git a/Podfile b/Podfile index 383f0fc..3a24dcf 100644 --- a/Podfile +++ b/Podfile @@ -7,7 +7,7 @@ target 'ShadowsocksX-NG' do # Pods for ShadowsocksX-NG pod 'Alamofire', '~> 3.4' - + target 'ShadowsocksX-NGTests' do inherit! :search_paths # Pods for testing @@ -19,3 +19,7 @@ target 'ShadowsocksX-NG' do end end + +target 'proxy_conf_helper' do + pod 'BRLOptionParser', '~> 0.3.1' +end \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock index af56a8b..9c68c3f 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,12 +1,15 @@ PODS: - Alamofire (3.4.0) + - BRLOptionParser (0.3.1) DEPENDENCIES: - Alamofire (~> 3.4) + - BRLOptionParser (~> 0.3.1) SPEC CHECKSUMS: Alamofire: c19a627cefd6a95f840401c49ab1f124e07f54ee + BRLOptionParser: a03256a8ff003ca1f5376c55f55f210e085a3958 -PODFILE CHECKSUM: 6339f517006b559ed2b7cc50379d2e3619b9a3b6 +PODFILE CHECKSUM: f532fd25b5e9173775d8deaa63ba5cf93104b844 COCOAPODS: 1.0.1 diff --git a/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.h b/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.h new file mode 100644 index 0000000..3dbfdba --- /dev/null +++ b/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.h @@ -0,0 +1,62 @@ +// BRLOptionParser.h +// +// Copyright © 2013–2015 Stephen Celis () +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +@import Foundation; + + +typedef void (^BRLOptionParserOptionBlock)(); +typedef void (^BRLOptionParserOptionBlockWithArgument)(NSString *value); + + +static NSString *const BRLOptionParserErrorDomain = @"BRLOptionParserErrorDomain"; + + +typedef NS_ENUM(NSUInteger, BRLOptionParserErrorCode) { + BRLOptionParserErrorCodeUnrecognized = 1, + BRLOptionParserErrorCodeRequired +}; + + +@interface BRLOptionParser : NSObject + ++ (instancetype)parser; ++ (instancetype)longOnlyParser; + +@property (nonatomic, getter = isLongOnly) BOOL longOnly; + +@property (nonatomic, copy) NSString *banner; + +- (void)setBanner:(NSString *)banner, ...; + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description block:(BRLOptionParserOptionBlock)block; +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description blockWithArgument:(BRLOptionParserOptionBlockWithArgument)blockWithArgument; + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description value:(BOOL *)value; +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description argument:(NSString *__strong *)argument; + +- (void)addSeparator; +- (void)addSeparator:(NSString *)separator; + +- (BOOL)parseArgc:(int)argc argv:(const char **)argv error:(NSError **)error; + +@end diff --git a/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.m b/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.m new file mode 100644 index 0000000..066cdf5 --- /dev/null +++ b/Pods/BRLOptionParser/BRLOptionParser/BRLOptionParser.m @@ -0,0 +1,306 @@ +// BRLOptionParser.m +// +// Copyright © 2013–2015 Stephen Celis () +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#import "BRLOptionParser.h" +#import + + +typedef NS_ENUM(NSUInteger, BRLOptionArgument) { + BRLOptionArgumentNone = no_argument, + BRLOptionArgumentRequired = required_argument +}; + + +@interface BRLOption : NSObject + +@property (assign) BRLOptionArgument argument; +@property (assign) char * name; +@property (assign) unichar flag; +@property (strong) NSString *description; +@property (copy) id block; + ++ (instancetype)optionWithName:(char *)name flag:(unichar)flag description:(NSString *)description block:(BRLOptionParserOptionBlock)block; ++ (instancetype)optionWithName:(char *)name flag:(unichar)flag description:(NSString *)description blockWithArgument:(BRLOptionParserOptionBlockWithArgument)blockWithArgument; + +@end + + +@implementation BRLOption + +@synthesize description = _description; + ++ (instancetype)optionWithName:(char *)name flag:(unichar)flag description:(NSString *)description block:(BRLOptionParserOptionBlock)block +{ + BRLOption *option = [[self alloc] initWithName:name flag:flag description:description argument:BRLOptionArgumentNone block:block]; + return option; +} + ++ (instancetype)optionWithName:(char *)name flag:(unichar)flag description:(NSString *)description blockWithArgument:(BRLOptionParserOptionBlockWithArgument)blockWithArgument +{ + BRLOption *option = [[self alloc] initWithName:name flag:flag description:description argument:BRLOptionArgumentRequired block:blockWithArgument]; + return option; +} + +- (instancetype)initWithName:(char *)name flag:(unichar)flag description:(NSString *)description argument:(BRLOptionArgument)argument block:(id)block +{ + if (self = [super init]) { + _argument = argument; + _name = name; + _flag = flag; + _block = block; + _description = description; + } + return self; +} + +@end + + +@interface BRLOptionParser () + +@property NSMutableArray *options; + +@end + + +@implementation BRLOptionParser + ++ (instancetype)parser +{ + return [self new]; +} + ++ (instancetype)longOnlyParser +{ + BRLOptionParser *parser = [self parser]; + if (parser) { + parser.longOnly = YES; + } + return parser; +} + +- (id)init +{ + if (self = [super init]) { + [self setBanner:@"usage: %@ [options]", [NSProcessInfo processInfo].processName]; + _options = [NSMutableArray new]; + } + return self; +} + +- (void)setBanner:(NSString *)banner, ... +{ + va_list args; + va_start(args, banner); + _banner = [[NSString alloc] initWithFormat:banner arguments:args]; + va_end(args); + return; +} + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description block:(BRLOptionParserOptionBlock)block +{ + [self.options addObject:[BRLOption optionWithName:option flag:flag description:description block:block]]; +} + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description blockWithArgument:(BRLOptionParserOptionBlockWithArgument)blockWithArgument +{ + [self.options addObject:[BRLOption optionWithName:option flag:flag description:description blockWithArgument:blockWithArgument]]; +} + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description value:(BOOL *)value +{ + [self addOption:option flag:flag description:description block:^{ + *value = YES; + }]; +} + +- (void)addOption:(char *)option flag:(unichar)flag description:(NSString *)description argument:(NSString *__strong *)argument +{ + [self addOption:option flag:flag description:description blockWithArgument:^(NSString *value) { + *argument = value; + }]; +} + +- (void)addSeparator +{ + [self addSeparator:nil]; +} + +- (void)addSeparator:(NSString *)separator +{ + if (separator == nil) { + separator = @""; + } + [self.options addObject:separator]; +} + +- (BOOL)parseArgc:(int)argc argv:(const char **)argv error:(NSError *__autoreleasing *)error +{ + NSMapTable *mapTable = NSCreateMapTable(NSIntegerMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, self.options.count); + + NSUInteger i = 0; + NSUInteger c = 0; + + struct option * long_options = malloc((self.options.count + 1) * sizeof(struct option)); + char * short_options = malloc(((self.options.count * 2) + 1) * sizeof(char)); + + for (id each in self.options) { + if (![each isKindOfClass:[BRLOption class]]) { + continue; + } + BRLOption *option = each; + if (option.name) { + NSMapInsert(mapTable, (const void *)option.name, (__bridge void *)option); + long_options[i++] = (struct option){option.name, option.argument, NULL, option.flag}; + } + if (option.flag) { + NSMapInsert(mapTable, (const void *)(NSUInteger)option.flag, (__bridge void *)option); + short_options[c++] = option.flag; + if (option.argument == BRLOptionArgumentRequired) { + short_options[c++] = ':'; + }; + } + } + long_options[i] = (struct option){0, 0, 0, 0}; + short_options[c] = '\0'; + + int ch = 0; + int long_options_index = 0; + + opterr = 0; + + int (* getopt_long_method)(int, char * const *, const char *, const struct option *, int *); + getopt_long_method = self.isLongOnly ? &getopt_long_only : &getopt_long; + + int cached_optind = optind; + while ((ch = getopt_long_method(argc, (char **)argv, short_options, long_options, &long_options_index)) != -1) { + @try { + BRLOption *option = nil; + + switch (ch) { + case '?': { + if (error) { + // I wish this could be done more cleanly, but getopt doesn't appear to expose the current failing option as originally input. + NSString *arg = [NSString stringWithUTF8String:argv[cached_optind]]; + if ([arg hasPrefix:[self longPrefix]]) { + arg = [arg componentsSeparatedByString:@"="].firstObject; + } else if (optopt) { + arg = [NSString stringWithFormat:@"-%c", optopt]; + } + + if (optopt) { + option = (__bridge BRLOption *)NSMapGet(mapTable, (const void *)(NSUInteger)optopt); + } else { + NSString *longOption = [NSString stringWithFormat:@"%@%s", [self longPrefix], long_options[long_options_index].name]; + if ([arg isEqualToString:longOption]) { + option = (__bridge BRLOption *)NSMapGet(mapTable, (const void *)long_options[long_options_index].name); + } + } + + if (option && option.argument == BRLOptionArgumentRequired) { + *error = [NSError errorWithDomain:BRLOptionParserErrorDomain code:BRLOptionParserErrorCodeRequired userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"option `%@' requires an argument", arg]}]; + } else { + *error = [NSError errorWithDomain:BRLOptionParserErrorDomain code:BRLOptionParserErrorCodeUnrecognized userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"unrecognized option `%@'", arg]}]; + } + } + return NO; + break; + } + case ':': + + break; + case 0: + option = (__bridge BRLOption *)NSMapGet(mapTable, (const void *)long_options[long_options_index].name); + break; + default: { + option = (__bridge BRLOption *)NSMapGet(mapTable, (const void *)(NSUInteger)ch); + break; + } + } + + if (option.argument == BRLOptionArgumentRequired) { + BRLOptionParserOptionBlockWithArgument block = option.block; + block([NSString stringWithUTF8String:optarg]); + } else { + BRLOptionParserOptionBlock block = option.block; + block(); + } + } @finally { + cached_optind = optind; + } + } + + return YES; +} + +- (NSString *)description +{ + NSMutableString *(^trimLine)(NSMutableString *) = ^NSMutableString *(NSMutableString *line) { + NSRange range = [line rangeOfCharacterFromSet:[[NSCharacterSet whitespaceCharacterSet] invertedSet] options:NSBackwardsSearch]; + if (range.location != NSNotFound) { + line = [[line substringToIndex:range.location + 1] mutableCopy]; + } + return line; + }; + + NSMutableArray *description = [NSMutableArray arrayWithObject:self.banner]; + for (id each in self.options) { + NSMutableString *line = [NSMutableString new]; + if ([each isKindOfClass:[BRLOption class]]) { + BRLOption *option = each; + [line appendString:@" "]; + if (option.flag) { + [line appendFormat:@"-%c", option.flag]; + [line appendString:option.name ? @", " : @" "]; + } else { + [line appendString:@" "]; + } + if (option.name) { + [line appendFormat:@"%@%-24s ", [self longPrefix], option.name]; + } else { + [line appendString:@" "]; + } + if (line.length > 37) { + line = trimLine(line); + [line appendString:@"\n "]; + } + if (option.description) { + [line appendString:option.description]; + } + line = trimLine(line); + } else { + [line appendFormat:@"%@", each]; + } + [description addObject:line]; + } + return [[description componentsJoinedByString:@"\n"] stringByAppendingString:@"\n"]; +} + +#pragma mark - + +- (NSString *)longPrefix +{ + return self.isLongOnly ? @"-" : @"--"; +} + +@end diff --git a/Pods/BRLOptionParser/LICENSE b/Pods/BRLOptionParser/LICENSE new file mode 100644 index 0000000..f3de6b5 --- /dev/null +++ b/Pods/BRLOptionParser/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright © 2013-2015 Stephen Celis () + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Pods/BRLOptionParser/README.markdown b/Pods/BRLOptionParser/README.markdown new file mode 100644 index 0000000..3e2284c --- /dev/null +++ b/Pods/BRLOptionParser/README.markdown @@ -0,0 +1,88 @@ +# BRLOptionParser [![Build Status][1]][2] + +A short wrapper for [getopt_long(3)][3] (and getopt_long_only(3)). + +[1]: https://img.shields.io/travis/stephencelis/BRLOptionParser.svg?style=flat +[2]: https://travis-ci.org/stephencelis/BRLOptionParser +[3]: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/getopt_long.3.html + +## Install + +With [CocoaPods][4]: + +``` rb +# Podfile +pod 'BRLOptionParser', '~> 0.3.1' +``` + +[4]: http://cocoapods.org + +## Example + +``` objc +// main.m +#import + +int main(int argc, const char * argv[]) +{ + @autoreleasepool { + NSString *name = @"world"; + BOOL verbose = NO; + + BRLOptionParser *options = [BRLOptionParser new]; + + [options setBanner:@"usage: %s [-n ] [-vh]", argv[0]]; + [options addOption:"name" flag:'n' description:@"Your name" argument:&name]; + [options addSeparator]; + [options addOption:"verbose" flag:'v' description:nil value:&verbose]; + __weak typeof(options) weakOptions = options; + [options addOption:"help" flag:'h' description:@"Show this message" block:^{ + printf("%s", [[weakOptions description] UTF8String]); + exit(EXIT_SUCCESS); + }]; + + NSError *error = nil; + if (![options parseArgc:argc argv:argv error:&error]) { + const char * message = error.localizedDescription.UTF8String; + fprintf(stderr, "%s: %s\n", argv[0], message); + exit(EXIT_FAILURE); + } + + if (verbose) { + fprintf(stderr, "(Preparing to say hello...)\n"); + } + + printf("Hello, %s!\n", name.UTF8String); + } + + return EXIT_SUCCESS; +} +``` + +In practice: + +``` +$ hello +Hello, world! +$ hello -h +usage: hello [-n ] [-vh] + -n, --name Your name + + -v, --verbose + -h, --help Show this message +$ hello -n +hello: option `-n' requires an argument +$ hello --name Stephen +Hello, Stephen! +$ hello -vngoodbye +(Preparing to say hello...) +Hello, goodbye! +$ hello --goodbye +hello: unrecognized option `--goodbye' +``` + +## License + +BRLOptionParser is available under the MIT license. See the LICENSE file +for more information. + diff --git a/Pods/Headers/Private/BRLOptionParser/BRLOptionParser.h b/Pods/Headers/Private/BRLOptionParser/BRLOptionParser.h new file mode 120000 index 0000000..1558128 --- /dev/null +++ b/Pods/Headers/Private/BRLOptionParser/BRLOptionParser.h @@ -0,0 +1 @@ +../../../BRLOptionParser/BRLOptionParser/BRLOptionParser.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRLOptionParser/BRLOptionParser.h b/Pods/Headers/Public/BRLOptionParser/BRLOptionParser.h new file mode 120000 index 0000000..1558128 --- /dev/null +++ b/Pods/Headers/Public/BRLOptionParser/BRLOptionParser.h @@ -0,0 +1 @@ +../../../BRLOptionParser/BRLOptionParser/BRLOptionParser.h \ No newline at end of file diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index af56a8b..9c68c3f 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,12 +1,15 @@ PODS: - Alamofire (3.4.0) + - BRLOptionParser (0.3.1) DEPENDENCIES: - Alamofire (~> 3.4) + - BRLOptionParser (~> 0.3.1) SPEC CHECKSUMS: Alamofire: c19a627cefd6a95f840401c49ab1f124e07f54ee + BRLOptionParser: a03256a8ff003ca1f5376c55f55f210e085a3958 -PODFILE CHECKSUM: 6339f517006b559ed2b7cc50379d2e3619b9a3b6 +PODFILE CHECKSUM: f532fd25b5e9173775d8deaa63ba5cf93104b844 COCOAPODS: 1.0.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index d947049..6a629b4 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,35 +7,41 @@ objects = { /* Begin PBXBuildFile section */ - 095406039B4D371E48D08B38A2975AC8 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D1F9022AC9979CD59E8F83962DAF51D /* Error.swift */; }; - 16102E4E35FAA0FC4161282FECE56469 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DBA7F3642776C1964512C9A38829081 /* Timeline.swift */; }; - 16CAE063801F558D22BE927C32451303 /* Pods-ShadowsocksX-NGUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA28AAF8F177034CA26477B655DC85A2 /* Pods-ShadowsocksX-NGUITests-dummy.m */; }; - 2C259BD3E40B0764C13724A75ADC1D6A /* Pods-ShadowsocksX-NG-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 468467C513E265D0EB493C2256A20744 /* Pods-ShadowsocksX-NG-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D3405986FC586FA6C0A5E0B6BA7E64E /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658CBED44D4009D80F990A188D7A8B3F /* Validation.swift */; }; - 34CCDCA848A701466256BC2927DA8856 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9278DA00F41E390EE68B6F3C8161C54 /* NetworkReachabilityManager.swift */; }; - 3EA8F215C9C1432D74E5CCA4834AA8C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2959D264574F227296E36F7CDF2E4F4F /* ResponseSerialization.swift */; }; - 4081EA628AF0B73AC51FFB9D7AB3B89E /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101C763FD5409006D69EDB82815E4A61 /* Manager.swift */; }; - 43FF20578BB22CB02CC884DB54F4383A /* Pods-ShadowsocksX-NG-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 146877FADE3D950CE648CEC0CD63A9F7 /* Pods-ShadowsocksX-NG-dummy.m */; }; + 06BA2F5A0BF79A08FA2DAB3E0FFD5498 /* BRLOptionParser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F433AD014FA270BBC782559C8360DE4 /* BRLOptionParser-dummy.m */; }; + 095406039B4D371E48D08B38A2975AC8 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = D096B0E248487E0D75E1639559665F00 /* Error.swift */; }; + 16102E4E35FAA0FC4161282FECE56469 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4372CA18C7AEB3B076F0B9C4F37C22 /* Timeline.swift */; }; + 16CAE063801F558D22BE927C32451303 /* Pods-ShadowsocksX-NGUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F45E0CBEB08D8EFAAF065F90F5F99DC /* Pods-ShadowsocksX-NGUITests-dummy.m */; }; + 2C259BD3E40B0764C13724A75ADC1D6A /* Pods-ShadowsocksX-NG-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 53124EA95F735D4E10B6DF3C005F26AA /* Pods-ShadowsocksX-NG-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D3405986FC586FA6C0A5E0B6BA7E64E /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D3B0CB3F30536204C2F49BABFEC817 /* Validation.swift */; }; + 34CCDCA848A701466256BC2927DA8856 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B17ECFC5893AE37EF56BE8F812BEC51 /* NetworkReachabilityManager.swift */; }; + 3EA8F215C9C1432D74E5CCA4834AA8C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214228A32010BAFC3A11964996BA6CCF /* ResponseSerialization.swift */; }; + 4081EA628AF0B73AC51FFB9D7AB3B89E /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A5654106D19BBCCA98086C975C2255 /* Manager.swift */; }; + 43FF20578BB22CB02CC884DB54F4383A /* Pods-ShadowsocksX-NG-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F942E6517D473F38973BA58D87DFEB15 /* Pods-ShadowsocksX-NG-dummy.m */; }; 44550BF1A67A522A640A51B30DB21069 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; + 466989E9288E7804B50D2D9FDCAD8F19 /* BRLOptionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 49CF30264F11A2DCE553DBC24D556739 /* BRLOptionParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53F30F986D39FC6EBE468697B2494ED5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; 5454225AE793B7089D8B920AB4F2C900 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; - 5BC19E6E0F199276003F0AF96838BCE5 /* Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DC3EB7B14F56C5823591E484CC06DC /* Upload.swift */; }; - 5CB05FBCB32D21E194B5ECF680CB6AE0 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BCAC7849E43619A0E6BA6D3291D195 /* Download.swift */; }; - 62E8346F03C03E7F4D631361F325689E /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC2C7A48545D8C54D52554343225FB8 /* Response.swift */; }; - 7B48852C4D848FA2DA416A98F6425869 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E07E98001DB6C163294A39CAB05963D /* ServerTrustPolicy.swift */; }; - 8EB11202167FCDDF1257AAAB1D1FB244 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED443D528393D61A04FBD88603DE5F3 /* Alamofire.swift */; }; - 9469DF81ECB494E84675969B5E13374C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6827D6CBD3F8B59B79641ABF6ED159 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C151CF58D392C381731E7D30EFA910E /* Pods-ShadowsocksX-NGUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0CFA03D38149FEC35AF0161BD4B6FC /* Pods-ShadowsocksX-NGUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA314156AC500125F4078EE968DB14C6 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E393CF47FE31F265B29AA2D9B67C656 /* Result.swift */; }; - ADF19C953CE2A7D0B72EC93A81FCCC26 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FD74E0A1B7122513F9BCD2B66B65219 /* Alamofire-dummy.m */; }; - AE4CF87C02C042DF13ED5B21C4FDC1E0 /* Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9039D48B1E893EF8AD87645A4FF820F /* Stream.swift */; }; + 5BC19E6E0F199276003F0AF96838BCE5 /* Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60E286DC997C97527D4F0C604F20EB02 /* Upload.swift */; }; + 5CB05FBCB32D21E194B5ECF680CB6AE0 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E740CE10676BB2B8A83CBE55A231947 /* Download.swift */; }; + 62E8346F03C03E7F4D631361F325689E /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F3923B5A348074195C1F3412F866F2D /* Response.swift */; }; + 7B48852C4D848FA2DA416A98F6425869 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A0B246E1562362768549E6D4EC4581B /* ServerTrustPolicy.swift */; }; + 8B2C601594F026DF642B1F06A77C4CBB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; + 8EB11202167FCDDF1257AAAB1D1FB244 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA620A99600631CDE5EB09E7B6CB477B /* Alamofire.swift */; }; + 9469DF81ECB494E84675969B5E13374C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E8066197D85005930E069DBDFE56EF1 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C151CF58D392C381731E7D30EFA910E /* Pods-ShadowsocksX-NGUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 428C8A4F4A67B233E9FBC8CBCB36EB61 /* Pods-ShadowsocksX-NGUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA314156AC500125F4078EE968DB14C6 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B6C41B51A5C2A961EFEAA57613D32A /* Result.swift */; }; + ADF19C953CE2A7D0B72EC93A81FCCC26 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A2B7F0E799C92BEB089D172B858F042 /* Alamofire-dummy.m */; }; + AE4CF87C02C042DF13ED5B21C4FDC1E0 /* Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6350BA5CA562733F4200F29DF6F392 /* Stream.swift */; }; B57CAF5A29BF2DD10284E599252DFA05 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; - BE41196F6A3903E59C3306FE3F8B43FE /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E32C97D15B18BFEB591B4A8B5C8477 /* Notifications.swift */; }; - C0DB70AB368765DC64BFB5FEA75E0696 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB714D2EF499EE0EF3E1957151533A5D /* ParameterEncoding.swift */; }; - C7B6DD7C0456C50289A2C381DFE9FA3F /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B09F376C277F027BDCD54137D76C547 /* MultipartFormData.swift */; }; - CF7724A299AEAFFC9CF29DE6124520E3 /* Pods-ShadowsocksX-NGTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 388CCDB8A2AEB0C011D16C2ECD0E7FEC /* Pods-ShadowsocksX-NGTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EFE92E8D3813DD26E78E93EEAF6D7E7E /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E2A29BA50E80B66E36C94B60FAD8863 /* Request.swift */; }; + BE41196F6A3903E59C3306FE3F8B43FE /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = D372E7E55D345CF275C393B584AA40F2 /* Notifications.swift */; }; + C0DB70AB368765DC64BFB5FEA75E0696 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27FB77423BC41EF0A28FF2DC87141788 /* ParameterEncoding.swift */; }; + C434F05C1EE617DA4557EF41FBE55B3E /* Pods-proxy_conf_helper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F3F6DB4863E2BF6DD9B3404A7347E97 /* Pods-proxy_conf_helper-dummy.m */; }; + C7B6DD7C0456C50289A2C381DFE9FA3F /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A9494AD31063618F619B185BCE19CC1 /* MultipartFormData.swift */; }; + CF7724A299AEAFFC9CF29DE6124520E3 /* Pods-ShadowsocksX-NGTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 69623EC55B7A9ADA7457D7D7B1303EB5 /* Pods-ShadowsocksX-NGTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFE92E8D3813DD26E78E93EEAF6D7E7E /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72425CE32EE256A9B60D7E337B33A8EA /* Request.swift */; }; + F2D887DA7E26C2F5533160A074B05EF0 /* BRLOptionParser.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E50432546249DB325571396BC3E3E9 /* BRLOptionParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; F3F3FD9096F43B73CBB52EF0E1CCF73E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */; }; - F976934F1E382AAA9975FC9E3F439B50 /* Pods-ShadowsocksX-NGTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ACB93EF018CCB0BC041BA7DB39E1279F /* Pods-ShadowsocksX-NGTests-dummy.m */; }; + F976934F1E382AAA9975FC9E3F439B50 /* Pods-ShadowsocksX-NGTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E587120F8C00DE490D711EB8355C61 /* Pods-ShadowsocksX-NGTests-dummy.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -46,68 +52,89 @@ remoteGlobalIDString = 79C040AFDDCE1BCBF6D8B5EB0B85887F; remoteInfo = Alamofire; }; + F1C53463E9DF7371C2384C5C32B425B6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7AD154F318B10A340D705FD3003EAAC6; + remoteInfo = BRLOptionParser; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04E9C2C8C04C54A23946358777C46365 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 09DC3EB7B14F56C5823591E484CC06DC /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = ""; }; - 0DBA7F3642776C1964512C9A38829081 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; - 101C763FD5409006D69EDB82815E4A61 /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = ""; }; - 146877FADE3D950CE648CEC0CD63A9F7 /* Pods-ShadowsocksX-NG-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NG-dummy.m"; sourceTree = ""; }; + 07D3B0CB3F30536204C2F49BABFEC817 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + 115FC915544A7D72B3D616B0FBAB6447 /* Pods-proxy_conf_helper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-proxy_conf_helper.release.xcconfig"; sourceTree = ""; }; + 12BCF1C09D16ED00E0A0C03AD448953B /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 15FE600C1B98B01C3497EDD5581C9F84 /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGTests-acknowledgements.plist"; sourceTree = ""; }; + 1A0B246E1562362768549E6D4EC4581B /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; + 1A9494AD31063618F619B185BCE19CC1 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; 1CA6EBC2E57D96052268211209D6AA52 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 1CA7EC190966B643C93079A844E04170 /* Pods-ShadowsocksX-NGUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-resources.sh"; sourceTree = ""; }; - 1E2A29BA50E80B66E36C94B60FAD8863 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - 1F84BF4B53C3F4DC127BE48BFBE1B485 /* Pods-ShadowsocksX-NGTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.debug.xcconfig"; sourceTree = ""; }; - 2959D264574F227296E36F7CDF2E4F4F /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - 388CCDB8A2AEB0C011D16C2ECD0E7FEC /* Pods-ShadowsocksX-NGTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGTests-umbrella.h"; sourceTree = ""; }; - 3A0386317031AF8877531113E7AE85B3 /* Pods_ShadowsocksX_NG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3DA35AC79F2C5E6680B61641606DCF1D /* Pods-ShadowsocksX-NG.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NG.modulemap"; sourceTree = ""; }; - 468467C513E265D0EB493C2256A20744 /* Pods-ShadowsocksX-NG-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NG-umbrella.h"; sourceTree = ""; }; - 4D122592FF413A03421361CF79642365 /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGTests-acknowledgements.plist"; sourceTree = ""; }; - 4DFFB68D124EDAD626A6C31E1B908D38 /* Pods_ShadowsocksX_NGUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4E07E98001DB6C163294A39CAB05963D /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; - 4E393CF47FE31F265B29AA2D9B67C656 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; - 50BCAC7849E43619A0E6BA6D3291D195 /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = ""; }; - 5175E677ADC3F810A4FB10B104C4332B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5318DBE000F4927B7CF84ED7D1FA186D /* Pods-ShadowsocksX-NGUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.release.xcconfig"; sourceTree = ""; }; - 5B09F376C277F027BDCD54137D76C547 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - 5C5763A83A1E028B6C4A073221CB764F /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; }; - 5F3009EF5DA8C39DDC8FE5A6B05E19CE /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.plist"; sourceTree = ""; }; - 62AD10F9155EEB3045E71571F8A8682E /* Pods-ShadowsocksX-NG-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NG-acknowledgements.markdown"; sourceTree = ""; }; - 658CBED44D4009D80F990A188D7A8B3F /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - 66BB50CE6148DA175B15FB88B716A432 /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = ""; }; - 6D1F9022AC9979CD59E8F83962DAF51D /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = ""; }; - 7514C46F1EDB85D5170D42789C650A86 /* Pods-ShadowsocksX-NGTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.release.xcconfig"; sourceTree = ""; }; - 79E32C97D15B18BFEB591B4A8B5C8477 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; - 7ED443D528393D61A04FBD88603DE5F3 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - 8FFF564423DBE209836D47626963E9D4 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 9148AF771CC25435F5BAA4B608FB419E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1E8066197D85005930E069DBDFE56EF1 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 1F0C65FEB29E96761774D63877EFB727 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; + 214228A32010BAFC3A11964996BA6CCF /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 2577A840C945439C44898B5965CF9F72 /* Pods-ShadowsocksX-NGTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-resources.sh"; sourceTree = ""; }; + 26E02FA4AB890BE221D861934BAAD565 /* Pods-proxy_conf_helper-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-resources.sh"; sourceTree = ""; }; + 27FB77423BC41EF0A28FF2DC87141788 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + 2BA204827CA968C6E89479E30AED3795 /* Pods_ShadowsocksX_NG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F3923B5A348074195C1F3412F866F2D /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 3447501773497F7E2C49014760C1D897 /* Pods-ShadowsocksX-NGTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-frameworks.sh"; sourceTree = ""; }; + 344D22D7630792C24D198B23D60761E0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3B3216EE8FD7FF8BF90032B59EAA3BA4 /* Pods-ShadowsocksX-NG-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-frameworks.sh"; sourceTree = ""; }; + 3BA938587D601431268DFECBFF530945 /* Pods-ShadowsocksX-NG-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NG-acknowledgements.plist"; sourceTree = ""; }; + 3F433AD014FA270BBC782559C8360DE4 /* BRLOptionParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRLOptionParser-dummy.m"; sourceTree = ""; }; + 40EC632D84D677A232275F3C9137FAB5 /* Pods_ShadowsocksX_NGTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 428C8A4F4A67B233E9FBC8CBCB36EB61 /* Pods-ShadowsocksX-NGUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGUITests-umbrella.h"; sourceTree = ""; }; + 43D5AA9B51489E458EA7C4C1C0FED763 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 49CF30264F11A2DCE553DBC24D556739 /* BRLOptionParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRLOptionParser.h; path = BRLOptionParser/BRLOptionParser.h; sourceTree = ""; }; + 4A038CEED6D36E3CA7FB588271509D07 /* Pods-ShadowsocksX-NG-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-resources.sh"; sourceTree = ""; }; + 4F3F6DB4863E2BF6DD9B3404A7347E97 /* Pods-proxy_conf_helper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-proxy_conf_helper-dummy.m"; sourceTree = ""; }; + 530A72A04C7861BE81E8E15846B4BF83 /* Pods_ShadowsocksX_NGUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 53124EA95F735D4E10B6DF3C005F26AA /* Pods-ShadowsocksX-NG-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NG-umbrella.h"; sourceTree = ""; }; + 57C31EC0602E17A27DCFF3ABC12FFC16 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5A500FADE0FEDDDE27A3FD5888D85A6B /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; }; + 5B17ECFC5893AE37EF56BE8F812BEC51 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 5DAE5F863B7B5BB6108D82B0C313E755 /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.plist"; sourceTree = ""; }; + 60E286DC997C97527D4F0C604F20EB02 /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = ""; }; + 62B6C41B51A5C2A961EFEAA57613D32A /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; + 633A6E2E196DD954426FD41ABD9BFC02 /* Pods-proxy_conf_helper-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-frameworks.sh"; sourceTree = ""; }; + 64A5654106D19BBCCA98086C975C2255 /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = ""; }; + 69623EC55B7A9ADA7457D7D7B1303EB5 /* Pods-ShadowsocksX-NGTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGTests-umbrella.h"; sourceTree = ""; }; + 6B6350BA5CA562733F4200F29DF6F392 /* Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stream.swift; path = Source/Stream.swift; sourceTree = ""; }; + 6CFA39714E1A134569812A6D0F6DBDAA /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGTests-acknowledgements.markdown"; sourceTree = ""; }; + 6E4F48D667C86DC7DD6F0E2899B155FB /* BRLOptionParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRLOptionParser-prefix.pch"; sourceTree = ""; }; + 72425CE32EE256A9B60D7E337B33A8EA /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + 7641DF24E577F8EC64CA861723E8F092 /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = ""; }; + 774723B57789DD1DBE95EC5F0BCBD551 /* BRLOptionParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRLOptionParser.xcconfig; sourceTree = ""; }; + 7A2B7F0E799C92BEB089D172B858F042 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + 7B4E3032697142D8483EAF95D1339BF0 /* Pods-proxy_conf_helper-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-proxy_conf_helper-acknowledgements.plist"; sourceTree = ""; }; + 7E740CE10676BB2B8A83CBE55A231947 /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = ""; }; + 7F45E0CBEB08D8EFAAF065F90F5F99DC /* Pods-ShadowsocksX-NGUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGUITests-dummy.m"; sourceTree = ""; }; + 876AA27889CCD350241460E35100BDB9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 884F8C760A37C789CE94F8081748D1FC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8E1FDF542848BDCC77947783E6FF96D5 /* Pods-proxy_conf_helper-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-proxy_conf_helper-acknowledgements.markdown"; sourceTree = ""; }; + 8FA72CABF17A62C808E9532DC97A1E0B /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 995EADB17C6F5BFCD92D1278D1E10997 /* Pods-ShadowsocksX-NGTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-resources.sh"; sourceTree = ""; }; - 9D0B126BFB98A1371D34CEE2FCD6F6E7 /* Pods-ShadowsocksX-NGTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-frameworks.sh"; sourceTree = ""; }; - 9D53819EF5340308C8063DF8A283FF17 /* Pods_ShadowsocksX_NGTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9FD74E0A1B7122513F9BCD2B66B65219 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - A149BF2819128352A98494A4402603EE /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; - AB714D2EF499EE0EF3E1957151533A5D /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - ACB93EF018CCB0BC041BA7DB39E1279F /* Pods-ShadowsocksX-NGTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGTests-dummy.m"; sourceTree = ""; }; - AE6827D6CBD3F8B59B79641ABF6ED159 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - B0F1CF96F8670B80705E17E66398AFB5 /* Pods-ShadowsocksX-NG-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NG-acknowledgements.plist"; sourceTree = ""; }; - B12900CD0C5DD4E3BAA6B0E99E86E88B /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = ""; }; - C07DC7D75BC62D5D4717E8A1A203AD90 /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.debug.xcconfig"; sourceTree = ""; }; - C8DE572C7DD5B4FEE9DDA66B03C62877 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.markdown"; sourceTree = ""; }; - CA9DFE9D14BFD1A3B91B96DCF2F2EB82 /* Pods-ShadowsocksX-NG-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-resources.sh"; sourceTree = ""; }; - D75363524A7811C1BEECC6A3447CEB72 /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGTests-acknowledgements.markdown"; sourceTree = ""; }; - DA0CFA03D38149FEC35AF0161BD4B6FC /* Pods-ShadowsocksX-NGUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGUITests-umbrella.h"; sourceTree = ""; }; - DA1D50F2DE39D3693F5FE2A3A91357CF /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = ""; }; - DB971A97845C7C69582CF5AD184CE534 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DDC2C7A48545D8C54D52554343225FB8 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - DEE9BB7109A5D38BDAAF1B40B0466095 /* Pods-ShadowsocksX-NGUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-frameworks.sh"; sourceTree = ""; }; - E23BFD924F87F9E00718BA0A16ED2DAE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EB6E22101AF0AF5ED2B83116656571B2 /* Pods-ShadowsocksX-NG-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-frameworks.sh"; sourceTree = ""; }; - EF77C66B356F1513207C4988B97AF34A /* Pods-ShadowsocksX-NGUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGUITests.modulemap"; sourceTree = ""; }; - F9039D48B1E893EF8AD87645A4FF820F /* Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stream.swift; path = Source/Stream.swift; sourceTree = ""; }; - F9278DA00F41E390EE68B6F3C8161C54 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - FA28AAF8F177034CA26477B655DC85A2 /* Pods-ShadowsocksX-NGUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGUITests-dummy.m"; sourceTree = ""; }; + 96531C433F90CFE333468D15C01B143C /* Pods-ShadowsocksX-NG.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NG.modulemap"; sourceTree = ""; }; + 9C0D9B9B2B2F4080487D871E0C67767B /* Pods-ShadowsocksX-NGUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.release.xcconfig"; sourceTree = ""; }; + A6E50432546249DB325571396BC3E3E9 /* BRLOptionParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRLOptionParser.m; path = BRLOptionParser/BRLOptionParser.m; sourceTree = ""; }; + A7A9514A6586BD41159CCE759971ABDA /* libPods-proxy_conf_helper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-proxy_conf_helper.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B1A565E9D0E5E3929B6293F3517BF5C5 /* Pods-ShadowsocksX-NGTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.release.xcconfig"; sourceTree = ""; }; + B1F0019C3F168BED15E16ADB4DC8EB15 /* Pods-ShadowsocksX-NGUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGUITests.modulemap"; sourceTree = ""; }; + B34263B730C3B89322185246664228DB /* Pods-ShadowsocksX-NGTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.debug.xcconfig"; sourceTree = ""; }; + B6E587120F8C00DE490D711EB8355C61 /* Pods-ShadowsocksX-NGTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGTests-dummy.m"; sourceTree = ""; }; + BA620A99600631CDE5EB09E7B6CB477B /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + BB11239DC528C35FE54A370BA72E0691 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.markdown"; sourceTree = ""; }; + D096B0E248487E0D75E1639559665F00 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = ""; }; + D372E7E55D345CF275C393B584AA40F2 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + D9DFBFFA4EE2458A9C1814A1F94778FD /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.debug.xcconfig"; sourceTree = ""; }; + DCB80F1B54ED0E9C92682A5AFCA229A1 /* Pods-ShadowsocksX-NGUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-resources.sh"; sourceTree = ""; }; + DFD263E002936621FD6AA21700066E3C /* Pods-ShadowsocksX-NGUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-frameworks.sh"; sourceTree = ""; }; + EB3D87DD81083026AA4B2BB574BACFCD /* libBRLOptionParser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBRLOptionParser.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EB8FBABDB5FF6EFE1FA4DD0F67D0E416 /* Pods-proxy_conf_helper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-proxy_conf_helper.debug.xcconfig"; sourceTree = ""; }; + F21E0553DDFB388845B929FC1530342C /* Pods-ShadowsocksX-NG-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NG-acknowledgements.markdown"; sourceTree = ""; }; + F942E6517D473F38973BA58D87DFEB15 /* Pods-ShadowsocksX-NG-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NG-dummy.m"; sourceTree = ""; }; + FF4372CA18C7AEB3B076F0B9C4F37C22 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; + FFE8D34BD9DA37F7AC8E02DBD77276CC /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -127,6 +154,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AB147E21E0AB36B5E26650D526EE24B0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8B2C601594F026DF642B1F06A77C4CBB /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; BA8445B0F0E6BCB1EDDDE229F1A7C447 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -143,9 +178,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F0EA5BEE5D5781833D5031FB44647FD1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 53F30F986D39FC6EBE468697B2494ED5 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 114265C4FCE90A19C063A2283E6E81F7 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + E17930314C9067B0D693FA67EF206AB3 /* Pods-proxy_conf_helper */, + 8D34342C9A0D24BE8794EAD32FF4B612 /* Pods-ShadowsocksX-NG */, + C96621590DC5539C2295BDCD539E9196 /* Pods-ShadowsocksX-NGTests */, + 4EA40725C94E0A7E2ED03A5E79F70C9B /* Pods-ShadowsocksX-NGUITests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; 28C17CEF104526ACA07B6EEE217EC43E /* OS X */ = { isa = PBXGroup; children = ( @@ -154,14 +208,6 @@ name = "OS X"; sourceTree = ""; }; - 35F128EB69B6F7FB7DA93BBF6C130FAE /* Pods */ = { - isa = PBXGroup; - children = ( - 6E519FC8760483F5D136181B2EBCBDEB /* Alamofire */, - ); - name = Pods; - sourceTree = ""; - }; 39E9EE8210D861DFD82346C1F5EB7218 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -170,90 +216,45 @@ name = Frameworks; sourceTree = ""; }; - 3E9610B1C91981B863022F56781F2359 /* Pods-ShadowsocksX-NGUITests */ = { + 4EA40725C94E0A7E2ED03A5E79F70C9B /* Pods-ShadowsocksX-NGUITests */ = { isa = PBXGroup; children = ( - E23BFD924F87F9E00718BA0A16ED2DAE /* Info.plist */, - EF77C66B356F1513207C4988B97AF34A /* Pods-ShadowsocksX-NGUITests.modulemap */, - C8DE572C7DD5B4FEE9DDA66B03C62877 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */, - 5F3009EF5DA8C39DDC8FE5A6B05E19CE /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */, - FA28AAF8F177034CA26477B655DC85A2 /* Pods-ShadowsocksX-NGUITests-dummy.m */, - DEE9BB7109A5D38BDAAF1B40B0466095 /* Pods-ShadowsocksX-NGUITests-frameworks.sh */, - 1CA7EC190966B643C93079A844E04170 /* Pods-ShadowsocksX-NGUITests-resources.sh */, - DA0CFA03D38149FEC35AF0161BD4B6FC /* Pods-ShadowsocksX-NGUITests-umbrella.h */, - C07DC7D75BC62D5D4717E8A1A203AD90 /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */, - 5318DBE000F4927B7CF84ED7D1FA186D /* Pods-ShadowsocksX-NGUITests.release.xcconfig */, + 876AA27889CCD350241460E35100BDB9 /* Info.plist */, + B1F0019C3F168BED15E16ADB4DC8EB15 /* Pods-ShadowsocksX-NGUITests.modulemap */, + BB11239DC528C35FE54A370BA72E0691 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */, + 5DAE5F863B7B5BB6108D82B0C313E755 /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */, + 7F45E0CBEB08D8EFAAF065F90F5F99DC /* Pods-ShadowsocksX-NGUITests-dummy.m */, + DFD263E002936621FD6AA21700066E3C /* Pods-ShadowsocksX-NGUITests-frameworks.sh */, + DCB80F1B54ED0E9C92682A5AFCA229A1 /* Pods-ShadowsocksX-NGUITests-resources.sh */, + 428C8A4F4A67B233E9FBC8CBCB36EB61 /* Pods-ShadowsocksX-NGUITests-umbrella.h */, + D9DFBFFA4EE2458A9C1814A1F94778FD /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */, + 9C0D9B9B2B2F4080487D871E0C67767B /* Pods-ShadowsocksX-NGUITests.release.xcconfig */, ); name = "Pods-ShadowsocksX-NGUITests"; path = "Target Support Files/Pods-ShadowsocksX-NGUITests"; sourceTree = ""; }; - 4D29F486A6F1D7F9E6525B8EEE65BBD9 /* Products */ = { + 63703CB4C84C26080698DAB916EC0EF3 /* Products */ = { isa = PBXGroup; children = ( - 04E9C2C8C04C54A23946358777C46365 /* Alamofire.framework */, - 3A0386317031AF8877531113E7AE85B3 /* Pods_ShadowsocksX_NG.framework */, - 9D53819EF5340308C8063DF8A283FF17 /* Pods_ShadowsocksX_NGTests.framework */, - 4DFFB68D124EDAD626A6C31E1B908D38 /* Pods_ShadowsocksX_NGUITests.framework */, + 12BCF1C09D16ED00E0A0C03AD448953B /* Alamofire.framework */, + EB3D87DD81083026AA4B2BB574BACFCD /* libBRLOptionParser.a */, + A7A9514A6586BD41159CCE759971ABDA /* libPods-proxy_conf_helper.a */, + 2BA204827CA968C6E89479E30AED3795 /* Pods_ShadowsocksX_NG.framework */, + 40EC632D84D677A232275F3C9137FAB5 /* Pods_ShadowsocksX_NGTests.framework */, + 530A72A04C7861BE81E8E15846B4BF83 /* Pods_ShadowsocksX_NGUITests.framework */, ); name = Products; sourceTree = ""; }; - 501D416ED73059A756F9E291EDEE7FC7 /* Pods-ShadowsocksX-NGTests */ = { + 73962834D576875CCEDDC2C4E2AF5B86 /* BRLOptionParser */ = { isa = PBXGroup; children = ( - DB971A97845C7C69582CF5AD184CE534 /* Info.plist */, - DA1D50F2DE39D3693F5FE2A3A91357CF /* Pods-ShadowsocksX-NGTests.modulemap */, - D75363524A7811C1BEECC6A3447CEB72 /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */, - 4D122592FF413A03421361CF79642365 /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */, - ACB93EF018CCB0BC041BA7DB39E1279F /* Pods-ShadowsocksX-NGTests-dummy.m */, - 9D0B126BFB98A1371D34CEE2FCD6F6E7 /* Pods-ShadowsocksX-NGTests-frameworks.sh */, - 995EADB17C6F5BFCD92D1278D1E10997 /* Pods-ShadowsocksX-NGTests-resources.sh */, - 388CCDB8A2AEB0C011D16C2ECD0E7FEC /* Pods-ShadowsocksX-NGTests-umbrella.h */, - 1F84BF4B53C3F4DC127BE48BFBE1B485 /* Pods-ShadowsocksX-NGTests.debug.xcconfig */, - 7514C46F1EDB85D5170D42789C650A86 /* Pods-ShadowsocksX-NGTests.release.xcconfig */, + 49CF30264F11A2DCE553DBC24D556739 /* BRLOptionParser.h */, + A6E50432546249DB325571396BC3E3E9 /* BRLOptionParser.m */, + C412838B269977875C90C3EDA99B7FF5 /* Support Files */, ); - name = "Pods-ShadowsocksX-NGTests"; - path = "Target Support Files/Pods-ShadowsocksX-NGTests"; - sourceTree = ""; - }; - 68F6D4CBC8B6CDE1D634D9F379F37168 /* Support Files */ = { - isa = PBXGroup; - children = ( - 5C5763A83A1E028B6C4A073221CB764F /* Alamofire.modulemap */, - A149BF2819128352A98494A4402603EE /* Alamofire.xcconfig */, - 9FD74E0A1B7122513F9BCD2B66B65219 /* Alamofire-dummy.m */, - 8FFF564423DBE209836D47626963E9D4 /* Alamofire-prefix.pch */, - AE6827D6CBD3F8B59B79641ABF6ED159 /* Alamofire-umbrella.h */, - 5175E677ADC3F810A4FB10B104C4332B /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/Alamofire"; - sourceTree = ""; - }; - 6E519FC8760483F5D136181B2EBCBDEB /* Alamofire */ = { - isa = PBXGroup; - children = ( - 7ED443D528393D61A04FBD88603DE5F3 /* Alamofire.swift */, - 50BCAC7849E43619A0E6BA6D3291D195 /* Download.swift */, - 6D1F9022AC9979CD59E8F83962DAF51D /* Error.swift */, - 101C763FD5409006D69EDB82815E4A61 /* Manager.swift */, - 5B09F376C277F027BDCD54137D76C547 /* MultipartFormData.swift */, - F9278DA00F41E390EE68B6F3C8161C54 /* NetworkReachabilityManager.swift */, - 79E32C97D15B18BFEB591B4A8B5C8477 /* Notifications.swift */, - AB714D2EF499EE0EF3E1957151533A5D /* ParameterEncoding.swift */, - 1E2A29BA50E80B66E36C94B60FAD8863 /* Request.swift */, - DDC2C7A48545D8C54D52554343225FB8 /* Response.swift */, - 2959D264574F227296E36F7CDF2E4F4F /* ResponseSerialization.swift */, - 4E393CF47FE31F265B29AA2D9B67C656 /* Result.swift */, - 4E07E98001DB6C163294A39CAB05963D /* ServerTrustPolicy.swift */, - F9039D48B1E893EF8AD87645A4FF820F /* Stream.swift */, - 0DBA7F3642776C1964512C9A38829081 /* Timeline.swift */, - 09DC3EB7B14F56C5823591E484CC06DC /* Upload.swift */, - 658CBED44D4009D80F990A188D7A8B3F /* Validation.swift */, - 68F6D4CBC8B6CDE1D634D9F379F37168 /* Support Files */, - ); - path = Alamofire; + path = BRLOptionParser; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -261,38 +262,120 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 39E9EE8210D861DFD82346C1F5EB7218 /* Frameworks */, - 35F128EB69B6F7FB7DA93BBF6C130FAE /* Pods */, - 4D29F486A6F1D7F9E6525B8EEE65BBD9 /* Products */, - B9292CBD22DF4BC0E5B5371E34DE6A86 /* Targets Support Files */, + B275BD1C8199926FAEBD653BA19217B0 /* Pods */, + 63703CB4C84C26080698DAB916EC0EF3 /* Products */, + 114265C4FCE90A19C063A2283E6E81F7 /* Targets Support Files */, ); sourceTree = ""; }; - B504B4F6F0B2CB77FDF38D008FDC96C4 /* Pods-ShadowsocksX-NG */ = { + 810427ED9E603BAB18BB2A5690F5ADC0 /* Alamofire */ = { isa = PBXGroup; children = ( - 9148AF771CC25435F5BAA4B608FB419E /* Info.plist */, - 3DA35AC79F2C5E6680B61641606DCF1D /* Pods-ShadowsocksX-NG.modulemap */, - 62AD10F9155EEB3045E71571F8A8682E /* Pods-ShadowsocksX-NG-acknowledgements.markdown */, - B0F1CF96F8670B80705E17E66398AFB5 /* Pods-ShadowsocksX-NG-acknowledgements.plist */, - 146877FADE3D950CE648CEC0CD63A9F7 /* Pods-ShadowsocksX-NG-dummy.m */, - EB6E22101AF0AF5ED2B83116656571B2 /* Pods-ShadowsocksX-NG-frameworks.sh */, - CA9DFE9D14BFD1A3B91B96DCF2F2EB82 /* Pods-ShadowsocksX-NG-resources.sh */, - 468467C513E265D0EB493C2256A20744 /* Pods-ShadowsocksX-NG-umbrella.h */, - B12900CD0C5DD4E3BAA6B0E99E86E88B /* Pods-ShadowsocksX-NG.debug.xcconfig */, - 66BB50CE6148DA175B15FB88B716A432 /* Pods-ShadowsocksX-NG.release.xcconfig */, + BA620A99600631CDE5EB09E7B6CB477B /* Alamofire.swift */, + 7E740CE10676BB2B8A83CBE55A231947 /* Download.swift */, + D096B0E248487E0D75E1639559665F00 /* Error.swift */, + 64A5654106D19BBCCA98086C975C2255 /* Manager.swift */, + 1A9494AD31063618F619B185BCE19CC1 /* MultipartFormData.swift */, + 5B17ECFC5893AE37EF56BE8F812BEC51 /* NetworkReachabilityManager.swift */, + D372E7E55D345CF275C393B584AA40F2 /* Notifications.swift */, + 27FB77423BC41EF0A28FF2DC87141788 /* ParameterEncoding.swift */, + 72425CE32EE256A9B60D7E337B33A8EA /* Request.swift */, + 2F3923B5A348074195C1F3412F866F2D /* Response.swift */, + 214228A32010BAFC3A11964996BA6CCF /* ResponseSerialization.swift */, + 62B6C41B51A5C2A961EFEAA57613D32A /* Result.swift */, + 1A0B246E1562362768549E6D4EC4581B /* ServerTrustPolicy.swift */, + 6B6350BA5CA562733F4200F29DF6F392 /* Stream.swift */, + FF4372CA18C7AEB3B076F0B9C4F37C22 /* Timeline.swift */, + 60E286DC997C97527D4F0C604F20EB02 /* Upload.swift */, + 07D3B0CB3F30536204C2F49BABFEC817 /* Validation.swift */, + F9C15B0D83A81063FC95E2E984F769FC /* Support Files */, + ); + path = Alamofire; + sourceTree = ""; + }; + 8D34342C9A0D24BE8794EAD32FF4B612 /* Pods-ShadowsocksX-NG */ = { + isa = PBXGroup; + children = ( + 344D22D7630792C24D198B23D60761E0 /* Info.plist */, + 96531C433F90CFE333468D15C01B143C /* Pods-ShadowsocksX-NG.modulemap */, + F21E0553DDFB388845B929FC1530342C /* Pods-ShadowsocksX-NG-acknowledgements.markdown */, + 3BA938587D601431268DFECBFF530945 /* Pods-ShadowsocksX-NG-acknowledgements.plist */, + F942E6517D473F38973BA58D87DFEB15 /* Pods-ShadowsocksX-NG-dummy.m */, + 3B3216EE8FD7FF8BF90032B59EAA3BA4 /* Pods-ShadowsocksX-NG-frameworks.sh */, + 4A038CEED6D36E3CA7FB588271509D07 /* Pods-ShadowsocksX-NG-resources.sh */, + 53124EA95F735D4E10B6DF3C005F26AA /* Pods-ShadowsocksX-NG-umbrella.h */, + 8FA72CABF17A62C808E9532DC97A1E0B /* Pods-ShadowsocksX-NG.debug.xcconfig */, + 7641DF24E577F8EC64CA861723E8F092 /* Pods-ShadowsocksX-NG.release.xcconfig */, ); name = "Pods-ShadowsocksX-NG"; path = "Target Support Files/Pods-ShadowsocksX-NG"; sourceTree = ""; }; - B9292CBD22DF4BC0E5B5371E34DE6A86 /* Targets Support Files */ = { + B275BD1C8199926FAEBD653BA19217B0 /* Pods */ = { isa = PBXGroup; children = ( - B504B4F6F0B2CB77FDF38D008FDC96C4 /* Pods-ShadowsocksX-NG */, - 501D416ED73059A756F9E291EDEE7FC7 /* Pods-ShadowsocksX-NGTests */, - 3E9610B1C91981B863022F56781F2359 /* Pods-ShadowsocksX-NGUITests */, + 810427ED9E603BAB18BB2A5690F5ADC0 /* Alamofire */, + 73962834D576875CCEDDC2C4E2AF5B86 /* BRLOptionParser */, ); - name = "Targets Support Files"; + name = Pods; + sourceTree = ""; + }; + C412838B269977875C90C3EDA99B7FF5 /* Support Files */ = { + isa = PBXGroup; + children = ( + 774723B57789DD1DBE95EC5F0BCBD551 /* BRLOptionParser.xcconfig */, + 3F433AD014FA270BBC782559C8360DE4 /* BRLOptionParser-dummy.m */, + 6E4F48D667C86DC7DD6F0E2899B155FB /* BRLOptionParser-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/BRLOptionParser"; + sourceTree = ""; + }; + C96621590DC5539C2295BDCD539E9196 /* Pods-ShadowsocksX-NGTests */ = { + isa = PBXGroup; + children = ( + 884F8C760A37C789CE94F8081748D1FC /* Info.plist */, + FFE8D34BD9DA37F7AC8E02DBD77276CC /* Pods-ShadowsocksX-NGTests.modulemap */, + 6CFA39714E1A134569812A6D0F6DBDAA /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */, + 15FE600C1B98B01C3497EDD5581C9F84 /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */, + B6E587120F8C00DE490D711EB8355C61 /* Pods-ShadowsocksX-NGTests-dummy.m */, + 3447501773497F7E2C49014760C1D897 /* Pods-ShadowsocksX-NGTests-frameworks.sh */, + 2577A840C945439C44898B5965CF9F72 /* Pods-ShadowsocksX-NGTests-resources.sh */, + 69623EC55B7A9ADA7457D7D7B1303EB5 /* Pods-ShadowsocksX-NGTests-umbrella.h */, + B34263B730C3B89322185246664228DB /* Pods-ShadowsocksX-NGTests.debug.xcconfig */, + B1A565E9D0E5E3929B6293F3517BF5C5 /* Pods-ShadowsocksX-NGTests.release.xcconfig */, + ); + name = "Pods-ShadowsocksX-NGTests"; + path = "Target Support Files/Pods-ShadowsocksX-NGTests"; + sourceTree = ""; + }; + E17930314C9067B0D693FA67EF206AB3 /* Pods-proxy_conf_helper */ = { + isa = PBXGroup; + children = ( + 8E1FDF542848BDCC77947783E6FF96D5 /* Pods-proxy_conf_helper-acknowledgements.markdown */, + 7B4E3032697142D8483EAF95D1339BF0 /* Pods-proxy_conf_helper-acknowledgements.plist */, + 4F3F6DB4863E2BF6DD9B3404A7347E97 /* Pods-proxy_conf_helper-dummy.m */, + 633A6E2E196DD954426FD41ABD9BFC02 /* Pods-proxy_conf_helper-frameworks.sh */, + 26E02FA4AB890BE221D861934BAAD565 /* Pods-proxy_conf_helper-resources.sh */, + EB8FBABDB5FF6EFE1FA4DD0F67D0E416 /* Pods-proxy_conf_helper.debug.xcconfig */, + 115FC915544A7D72B3D616B0FBAB6447 /* Pods-proxy_conf_helper.release.xcconfig */, + ); + name = "Pods-proxy_conf_helper"; + path = "Target Support Files/Pods-proxy_conf_helper"; + sourceTree = ""; + }; + F9C15B0D83A81063FC95E2E984F769FC /* Support Files */ = { + isa = PBXGroup; + children = ( + 5A500FADE0FEDDDE27A3FD5888D85A6B /* Alamofire.modulemap */, + 1F0C65FEB29E96761774D63877EFB727 /* Alamofire.xcconfig */, + 7A2B7F0E799C92BEB089D172B858F042 /* Alamofire-dummy.m */, + 43D5AA9B51489E458EA7C4C1C0FED763 /* Alamofire-prefix.pch */, + 1E8066197D85005930E069DBDFE56EF1 /* Alamofire-umbrella.h */, + 57C31EC0602E17A27DCFF3ABC12FFC16 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; sourceTree = ""; }; /* End PBXGroup section */ @@ -306,6 +389,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 121728020127207BFCA6A27073898473 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 466989E9288E7804B50D2D9FDCAD8F19 /* BRLOptionParser.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4859AB07FA07028EC4A57D468E1A7B1B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -347,9 +438,26 @@ ); name = "Pods-ShadowsocksX-NGUITests"; productName = "Pods-ShadowsocksX-NGUITests"; - productReference = 4DFFB68D124EDAD626A6C31E1B908D38 /* Pods_ShadowsocksX_NGUITests.framework */; + productReference = 530A72A04C7861BE81E8E15846B4BF83 /* Pods_ShadowsocksX_NGUITests.framework */; productType = "com.apple.product-type.framework"; }; + 3F0FDAFB5467946C22EE9F2EC643E2B0 /* Pods-proxy_conf_helper */ = { + isa = PBXNativeTarget; + buildConfigurationList = F1E46DE142216CD3C0327D20F3073961 /* Build configuration list for PBXNativeTarget "Pods-proxy_conf_helper" */; + buildPhases = ( + 4EAA284BFC07AC421BF366F1EB9B757F /* Sources */, + F0EA5BEE5D5781833D5031FB44647FD1 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7C10FF72EF971F45066B238F3B2BCDC2 /* PBXTargetDependency */, + ); + name = "Pods-proxy_conf_helper"; + productName = "Pods-proxy_conf_helper"; + productReference = A7A9514A6586BD41159CCE759971ABDA /* libPods-proxy_conf_helper.a */; + productType = "com.apple.product-type.library.static"; + }; 5FCD6487BC23CDDDB21857856F7E93F4 /* Pods-ShadowsocksX-NG */ = { isa = PBXNativeTarget; buildConfigurationList = B62E3AEFE50B7165CC5E5D6DF29C600F /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NG" */; @@ -365,7 +473,7 @@ ); name = "Pods-ShadowsocksX-NG"; productName = "Pods-ShadowsocksX-NG"; - productReference = 3A0386317031AF8877531113E7AE85B3 /* Pods_ShadowsocksX_NG.framework */; + productReference = 2BA204827CA968C6E89479E30AED3795 /* Pods_ShadowsocksX_NG.framework */; productType = "com.apple.product-type.framework"; }; 79C040AFDDCE1BCBF6D8B5EB0B85887F /* Alamofire */ = { @@ -382,9 +490,26 @@ ); name = Alamofire; productName = Alamofire; - productReference = 04E9C2C8C04C54A23946358777C46365 /* Alamofire.framework */; + productReference = 12BCF1C09D16ED00E0A0C03AD448953B /* Alamofire.framework */; productType = "com.apple.product-type.framework"; }; + 7AD154F318B10A340D705FD3003EAAC6 /* BRLOptionParser */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0174BA27A62F6F29EEDC03CA3FB0A9C4 /* Build configuration list for PBXNativeTarget "BRLOptionParser" */; + buildPhases = ( + 53EDB8E624E634651BB754FE71BCB15E /* Sources */, + AB147E21E0AB36B5E26650D526EE24B0 /* Frameworks */, + 121728020127207BFCA6A27073898473 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BRLOptionParser; + productName = BRLOptionParser; + productReference = EB3D87DD81083026AA4B2BB574BACFCD /* libBRLOptionParser.a */; + productType = "com.apple.product-type.library.static"; + }; 9D7253CF594B2D7CB8127F7CCAFF916F /* Pods-ShadowsocksX-NGTests */ = { isa = PBXNativeTarget; buildConfigurationList = 757EEB566CE14B3A8210DD4A32EBDD7A /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NGTests" */; @@ -399,7 +524,7 @@ ); name = "Pods-ShadowsocksX-NGTests"; productName = "Pods-ShadowsocksX-NGTests"; - productReference = 9D53819EF5340308C8063DF8A283FF17 /* Pods_ShadowsocksX_NGTests.framework */; + productReference = 40EC632D84D677A232275F3C9137FAB5 /* Pods_ShadowsocksX_NGTests.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -419,11 +544,13 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 4D29F486A6F1D7F9E6525B8EEE65BBD9 /* Products */; + productRefGroup = 63703CB4C84C26080698DAB916EC0EF3 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 79C040AFDDCE1BCBF6D8B5EB0B85887F /* Alamofire */, + 7AD154F318B10A340D705FD3003EAAC6 /* BRLOptionParser */, + 3F0FDAFB5467946C22EE9F2EC643E2B0 /* Pods-proxy_conf_helper */, 5FCD6487BC23CDDDB21857856F7E93F4 /* Pods-ShadowsocksX-NG */, 9D7253CF594B2D7CB8127F7CCAFF916F /* Pods-ShadowsocksX-NGTests */, 2E8F9EE6712BE7E70662A4A13408079D /* Pods-ShadowsocksX-NGUITests */, @@ -448,6 +575,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4EAA284BFC07AC421BF366F1EB9B757F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C434F05C1EE617DA4557EF41FBE55B3E /* Pods-proxy_conf_helper-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53EDB8E624E634651BB754FE71BCB15E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 06BA2F5A0BF79A08FA2DAB3E0FFD5498 /* BRLOptionParser-dummy.m in Sources */, + F2D887DA7E26C2F5533160A074B05EF0 /* BRLOptionParser.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95CC2C7E06DC188A05DAAEE9CAA555A3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -490,12 +634,18 @@ target = 79C040AFDDCE1BCBF6D8B5EB0B85887F /* Alamofire */; targetProxy = 3E52B24B5E41F5D13CC97594A957110F /* PBXContainerItemProxy */; }; + 7C10FF72EF971F45066B238F3B2BCDC2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BRLOptionParser; + target = 7AD154F318B10A340D705FD3003EAAC6 /* BRLOptionParser */; + targetProxy = F1C53463E9DF7371C2384C5C32B425B6 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 2D559D45482D878D6DC27E4DF783B16E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C07DC7D75BC62D5D4717E8A1A203AD90 /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */; + baseConfigurationReference = D9DFBFFA4EE2458A9C1814A1F94778FD /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -529,7 +679,7 @@ }; 371E0500757286AB22CAE64ADAE8D83B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F84BF4B53C3F4DC127BE48BFBE1B485 /* Pods-ShadowsocksX-NGTests.debug.xcconfig */; + baseConfigurationReference = B34263B730C3B89322185246664228DB /* Pods-ShadowsocksX-NGTests.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -601,7 +751,7 @@ }; 4E96338F016ACB3AF872F99AAB8FB291 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66BB50CE6148DA175B15FB88B716A432 /* Pods-ShadowsocksX-NG.release.xcconfig */; + baseConfigurationReference = 7641DF24E577F8EC64CA861723E8F092 /* Pods-ShadowsocksX-NG.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -635,7 +785,7 @@ }; 81B3096945D568104AC14EE4F805950B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A149BF2819128352A98494A4402603EE /* Alamofire.xcconfig */; + baseConfigurationReference = 1F0C65FEB29E96761774D63877EFB727 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -665,7 +815,7 @@ }; 82B1EC5E8815E78991717D970C44B8D8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A149BF2819128352A98494A4402603EE /* Alamofire.xcconfig */; + baseConfigurationReference = 1F0C65FEB29E96761774D63877EFB727 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -696,7 +846,7 @@ }; 8A2A1FB2B9F55A664E92C5F52B674F7B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7514C46F1EDB85D5170D42789C650A86 /* Pods-ShadowsocksX-NGTests.release.xcconfig */; + baseConfigurationReference = B1A565E9D0E5E3929B6293F3517BF5C5 /* Pods-ShadowsocksX-NGTests.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -728,9 +878,30 @@ }; name = Release; }; + 92B477579DE5EFCC17E358B57A3A599E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 774723B57789DD1DBE95EC5F0BCBD551 /* BRLOptionParser.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Debug; + }; B1F9CA2C4D4C287086A57B5A5E5632F1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B12900CD0C5DD4E3BAA6B0E99E86E88B /* Pods-ShadowsocksX-NG.debug.xcconfig */; + baseConfigurationReference = 8FA72CABF17A62C808E9532DC97A1E0B /* Pods-ShadowsocksX-NG.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -763,6 +934,49 @@ }; name = Debug; }; + B9E2E17CACCD9DB6ACE1EE1508A63590 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 774723B57789DD1DBE95EC5F0BCBD551 /* BRLOptionParser.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Release; + }; + D417E7ADCBE0A1D6A25FE6C098AAADA2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EB8FBABDB5FF6EFE1FA4DD0F67D0E416 /* Pods-proxy_conf_helper.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; DA2E206EB90DF75A25332AE4AA713F31 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -805,9 +1019,31 @@ }; name = Debug; }; + DC5E375DDCED3F5F2F128B9210CE69CA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 115FC915544A7D72B3D616B0FBAB6447 /* Pods-proxy_conf_helper.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; E1D71F02B6C64B509793C7FC35A3ED8A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5318DBE000F4927B7CF84ED7D1FA186D /* Pods-ShadowsocksX-NGUITests.release.xcconfig */; + baseConfigurationReference = 9C0D9B9B2B2F4080487D871E0C67767B /* Pods-ShadowsocksX-NGUITests.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -842,6 +1078,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 0174BA27A62F6F29EEDC03CA3FB0A9C4 /* Build configuration list for PBXNativeTarget "BRLOptionParser" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 92B477579DE5EFCC17E358B57A3A599E /* Debug */, + B9E2E17CACCD9DB6ACE1EE1508A63590 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -887,6 +1132,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F1E46DE142216CD3C0327D20F3073961 /* Build configuration list for PBXNativeTarget "Pods-proxy_conf_helper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D417E7ADCBE0A1D6A25FE6C098AAADA2 /* Debug */, + DC5E375DDCED3F5F2F128B9210CE69CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/Pods/Target Support Files/Alamofire/Alamofire.xcconfig b/Pods/Target Support Files/Alamofire/Alamofire.xcconfig index 085c786..572419f 100644 --- a/Pods/Target Support Files/Alamofire/Alamofire.xcconfig +++ b/Pods/Target Support Files/Alamofire/Alamofire.xcconfig @@ -1,7 +1,7 @@ CODE_SIGN_IDENTITY = CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Alamofire GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRLOptionParser" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-dummy.m b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-dummy.m new file mode 100644 index 0000000..4f03dd8 --- /dev/null +++ b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_BRLOptionParser : NSObject +@end +@implementation PodsDummy_BRLOptionParser +@end diff --git a/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch new file mode 100644 index 0000000..b9c163b --- /dev/null +++ b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Pods/Target Support Files/BRLOptionParser/BRLOptionParser.xcconfig b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser.xcconfig new file mode 100644 index 0000000..1660b8d --- /dev/null +++ b/Pods/Target Support Files/BRLOptionParser/BRLOptionParser.xcconfig @@ -0,0 +1,8 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BRLOptionParser +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRLOptionParser" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRLOptionParser" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.markdown b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.markdown new file mode 100644 index 0000000..22ed19d --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.markdown @@ -0,0 +1,29 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## BRLOptionParser + +(The MIT License) + +Copyright © 2013-2015 Stephen Celis () + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.plist b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.plist new file mode 100644 index 0000000..42b0d2c --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-acknowledgements.plist @@ -0,0 +1,59 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + (The MIT License) + +Copyright © 2013-2015 Stephen Celis (<stephen@stephencelis.com>) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + Title + BRLOptionParser + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-dummy.m b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-dummy.m new file mode 100644 index 0000000..256c8af --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_proxy_conf_helper : NSObject +@end +@implementation PodsDummy_Pods_proxy_conf_helper +@end diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-resources.sh b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-resources.sh new file mode 100755 index 0000000..0a15615 --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-resources.sh @@ -0,0 +1,102 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.debug.xcconfig b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.debug.xcconfig new file mode 100644 index 0000000..7a9c2fa --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.debug.xcconfig @@ -0,0 +1,8 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRLOptionParser" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRLOptionParser" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRLOptionParser" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRLOptionParser" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.release.xcconfig b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.release.xcconfig new file mode 100644 index 0000000..7a9c2fa --- /dev/null +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.release.xcconfig @@ -0,0 +1,8 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRLOptionParser" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRLOptionParser" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRLOptionParser" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRLOptionParser" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/ShadowsocksX-NG.xcodeproj/project.pbxproj b/ShadowsocksX-NG.xcodeproj/project.pbxproj index 74531a2..3da3273 100644 --- a/ShadowsocksX-NG.xcodeproj/project.pbxproj +++ b/ShadowsocksX-NG.xcodeproj/project.pbxproj @@ -27,13 +27,16 @@ 9B3FFF231D088E8D0019A709 /* abp.js in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF221D088E8D0019A709 /* abp.js */; }; 9B3FFF271D0898EB0019A709 /* gfwlist.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF261D0898EB0019A709 /* gfwlist.txt */; }; 9B3FFF291D08A1DF0019A709 /* user-rule.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF281D08A1DF0019A709 /* user-rule.txt */; }; - 9B3FFF2D1D08A71E0019A709 /* Sysconf.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3FFF2C1D08A71E0019A709 /* Sysconf.m */; }; 9B3FFF321D08CEE40019A709 /* SWBQRCodeWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3FFF311D08CEE40019A709 /* SWBQRCodeWindowController.m */; }; 9B3FFF341D08CEF70019A709 /* SWBQRCodeWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF331D08CEF70019A709 /* SWBQRCodeWindowController.xib */; }; 9B3FFF381D08CF110019A709 /* jquery.min.js in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF351D08CF110019A709 /* jquery.min.js */; }; 9B3FFF391D08CF110019A709 /* qrcode.min.js in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF361D08CF110019A709 /* qrcode.min.js */; }; 9B3FFF3A1D08CF110019A709 /* qrcode.htm in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF371D08CF110019A709 /* qrcode.htm */; }; 9B3FFF3E1D08D9910019A709 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B3FFF3D1D08D9910019A709 /* SystemConfiguration.framework */; }; + 9B3FFF471D09CD3B0019A709 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3FFF461D09CD3B0019A709 /* main.m */; }; + 9B3FFF4C1D09D8F70019A709 /* install_helper.sh in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF4B1D09D8F70019A709 /* install_helper.sh */; }; + 9B3FFF4F1D09D9D50019A709 /* ProxyConfHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B3FFF4E1D09D9D50019A709 /* ProxyConfHelper.m */; }; + 9B3FFF541D09E2D10019A709 /* proxy_conf_helper in Resources */ = {isa = PBXBuildFile; fileRef = 9B3FFF441D09CD3B0019A709 /* proxy_conf_helper */; }; 9BEEF0691D04D4D500FC52B3 /* install_ss_local.sh in Resources */ = {isa = PBXBuildFile; fileRef = 9BEEF0651D04CB8500FC52B3 /* install_ss_local.sh */; }; 9BEEF06A1D04D4D500FC52B3 /* start_ss_local.sh in Resources */ = {isa = PBXBuildFile; fileRef = 9BEEF0661D04CE8D00FC52B3 /* start_ss_local.sh */; }; 9BEEF06B1D04D4D500FC52B3 /* stop_ss_local.sh in Resources */ = {isa = PBXBuildFile; fileRef = 9BEEF0671D04CE9A00FC52B3 /* stop_ss_local.sh */; }; @@ -46,6 +49,7 @@ 9BEEF07B1D05631500FC52B3 /* AdvPreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BEEF0791D05631500FC52B3 /* AdvPreferencesWindowController.swift */; }; 9BEEF07C1D05631500FC52B3 /* AdvPreferencesWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9BEEF07A1D05631500FC52B3 /* AdvPreferencesWindowController.xib */; }; E0E57CCA7EB34B90F9D340F2 /* Pods_ShadowsocksX_NGTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 388120F062D7EB7DD0D8DDCA /* Pods_ShadowsocksX_NGTests.framework */; }; + F0809FF1595BE2966343D3C7 /* libPods-proxy_conf_helper.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E7783AEDB4A3BDDC9FF16AC /* libPods-proxy_conf_helper.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -63,11 +67,32 @@ remoteGlobalIDString = 9B0BFFE41D0460A70040E62B; remoteInfo = "ShadowsocksX-NG"; }; + 9B3FFF521D09E2B30019A709 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9B0BFFDD1D0460A70040E62B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B3FFF431D09CD3B0019A709; + remoteInfo = proxy_conf_helper; + }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 9B3FFF421D09CD3B0019A709 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 19083CFCED87354F006967FF /* Pods_ShadowsocksX_NGUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E7783AEDB4A3BDDC9FF16AC /* libPods-proxy_conf_helper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-proxy_conf_helper.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 283ED1A8E9B711AC65670031 /* Pods_ShadowsocksX_NG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 297AF069022A197FD8E9D226 /* Pods-proxy_conf_helper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-proxy_conf_helper.release.xcconfig"; path = "Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.release.xcconfig"; sourceTree = ""; }; 388120F062D7EB7DD0D8DDCA /* Pods_ShadowsocksX_NGTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3AC7CD9886196A997D6FC78D /* Pods-ShadowsocksX-NGTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShadowsocksX-NGTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.release.xcconfig"; sourceTree = ""; }; 50D54926AA21B0D4D8DD9C4F /* Pods-ShadowsocksX-NGUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShadowsocksX-NGUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ShadowsocksX-NGUITests/Pods-ShadowsocksX-NGUITests.release.xcconfig"; sourceTree = ""; }; @@ -90,7 +115,6 @@ 9B0BFFFA1D0460A70040E62B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9B0BFFFF1D0460A70040E62B /* ShadowsocksX-NGUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ShadowsocksX-NGUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 9B3FFF0C1D05FEB30019A709 /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; - 9B3FFF101D05FFAC0019A709 /* ShadowsocksX-NG-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ShadowsocksX-NG-Bridging-Header.h"; sourceTree = SOURCE_ROOT; }; 9B3FFF131D0705810019A709 /* Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = ""; }; 9B3FFF151D072FDE0019A709 /* LaunchAtLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchAtLoginController.h; sourceTree = ""; }; 9B3FFF161D072FDE0019A709 /* LaunchAtLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchAtLoginController.m; sourceTree = ""; }; @@ -100,7 +124,6 @@ 9B3FFF221D088E8D0019A709 /* abp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = abp.js; sourceTree = ""; }; 9B3FFF261D0898EB0019A709 /* gfwlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gfwlist.txt; sourceTree = ""; }; 9B3FFF281D08A1DF0019A709 /* user-rule.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "user-rule.txt"; sourceTree = ""; }; - 9B3FFF2C1D08A71E0019A709 /* Sysconf.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Sysconf.m; sourceTree = ""; }; 9B3FFF301D08CEE40019A709 /* SWBQRCodeWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWBQRCodeWindowController.h; sourceTree = ""; }; 9B3FFF311D08CEE40019A709 /* SWBQRCodeWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SWBQRCodeWindowController.m; sourceTree = ""; }; 9B3FFF331D08CEF70019A709 /* SWBQRCodeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SWBQRCodeWindowController.xib; sourceTree = ""; }; @@ -109,6 +132,13 @@ 9B3FFF371D08CF110019A709 /* qrcode.htm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = qrcode.htm; sourceTree = ""; }; 9B3FFF3B1D08D93B0019A709 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 9B3FFF3D1D08D9910019A709 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 9B3FFF441D09CD3B0019A709 /* proxy_conf_helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = proxy_conf_helper; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B3FFF461D09CD3B0019A709 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 9B3FFF4B1D09D8F70019A709 /* install_helper.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = install_helper.sh; sourceTree = ""; }; + 9B3FFF4D1D09D9D50019A709 /* ProxyConfHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyConfHelper.h; sourceTree = ""; }; + 9B3FFF4E1D09D9D50019A709 /* ProxyConfHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxyConfHelper.m; sourceTree = ""; }; + 9B3FFF501D09DAEA0019A709 /* proxy_conf_helper_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = proxy_conf_helper_version.h; sourceTree = ""; }; + 9B3FFF511D09DBA20019A709 /* ShadowsocksX-NG-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ShadowsocksX-NG-Bridging-Header.h"; sourceTree = ""; }; 9BEEF0651D04CB8500FC52B3 /* install_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = install_ss_local.sh; sourceTree = ""; }; 9BEEF0661D04CE8D00FC52B3 /* start_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = start_ss_local.sh; sourceTree = ""; }; 9BEEF0671D04CE9A00FC52B3 /* stop_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = stop_ss_local.sh; sourceTree = ""; }; @@ -120,6 +150,7 @@ 9BEEF0771D04FE8A00FC52B3 /* LaunchAgentUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchAgentUtils.swift; sourceTree = ""; }; 9BEEF0791D05631500FC52B3 /* AdvPreferencesWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdvPreferencesWindowController.swift; sourceTree = ""; }; 9BEEF07A1D05631500FC52B3 /* AdvPreferencesWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdvPreferencesWindowController.xib; sourceTree = ""; }; + B4E6A97CA843F3943524B686 /* Pods-proxy_conf_helper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-proxy_conf_helper.debug.xcconfig"; path = "Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper.debug.xcconfig"; sourceTree = ""; }; E9E9FB3855DA55D0710EE7BD /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShadowsocksX-NG.release.xcconfig"; path = "Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = ""; }; FE3237E9FB24D9B924A0E630 /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShadowsocksX-NG.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -150,6 +181,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B3FFF411D09CD3B0019A709 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F0809FF1595BE2966343D3C7 /* libPods-proxy_conf_helper.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -162,6 +201,8 @@ 3AC7CD9886196A997D6FC78D /* Pods-ShadowsocksX-NGTests.release.xcconfig */, 58907E7F50405104B42CB189 /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */, 50D54926AA21B0D4D8DD9C4F /* Pods-ShadowsocksX-NGUITests.release.xcconfig */, + B4E6A97CA843F3943524B686 /* Pods-proxy_conf_helper.debug.xcconfig */, + 297AF069022A197FD8E9D226 /* Pods-proxy_conf_helper.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -169,6 +210,7 @@ 9B07EFB01D048E900052D9DF /* Support Files */ = { isa = PBXGroup; children = ( + 9B3FFF4B1D09D8F70019A709 /* install_helper.sh */, 9B3FFF351D08CF110019A709 /* jquery.min.js */, 9B3FFF361D08CF110019A709 /* qrcode.min.js */, 9B3FFF371D08CF110019A709 /* qrcode.htm */, @@ -203,6 +245,7 @@ 9B0BFFE71D0460A70040E62B /* ShadowsocksX-NG */, 9B0BFFF71D0460A70040E62B /* ShadowsocksX-NGTests */, 9B0B00021D0460A70040E62B /* ShadowsocksX-NGUITests */, + 9B3FFF451D09CD3B0019A709 /* proxy_conf_helper */, 9B0BFFE61D0460A70040E62B /* Products */, 33F4F299F89330966F4526E4 /* Pods */, D3CE66CC039F651F28057DDB /* Frameworks */, @@ -215,6 +258,7 @@ 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG.app */, 9B0BFFF41D0460A70040E62B /* ShadowsocksX-NGTests.xctest */, 9B0BFFFF1D0460A70040E62B /* ShadowsocksX-NGUITests.xctest */, + 9B3FFF441D09CD3B0019A709 /* proxy_conf_helper */, ); name = Products; sourceTree = ""; @@ -222,9 +266,9 @@ 9B0BFFE71D0460A70040E62B /* ShadowsocksX-NG */ = { isa = PBXGroup; children = ( + 9B3FFF511D09DBA20019A709 /* ShadowsocksX-NG-Bridging-Header.h */, 9B3FFF151D072FDE0019A709 /* LaunchAtLoginController.h */, 9B3FFF161D072FDE0019A709 /* LaunchAtLoginController.m */, - 9B3FFF101D05FFAC0019A709 /* ShadowsocksX-NG-Bridging-Header.h */, 9B3FFF0B1D05D8B80019A709 /* UI */, 9B07EFB01D048E900052D9DF /* Support Files */, 9B0BFFE81D0460A70040E62B /* AppDelegate.swift */, @@ -239,7 +283,9 @@ 9B3FFF131D0705810019A709 /* Notifications.swift */, 9B3FFF1D1D0732660019A709 /* Utils.m */, 9B3FFF1F1D0734060019A709 /* Utils.h */, - 9B3FFF2C1D08A71E0019A709 /* Sysconf.m */, + 9B3FFF4D1D09D9D50019A709 /* ProxyConfHelper.h */, + 9B3FFF4E1D09D9D50019A709 /* ProxyConfHelper.m */, + 9B3FFF501D09DAEA0019A709 /* proxy_conf_helper_version.h */, ); path = "ShadowsocksX-NG"; sourceTree = ""; @@ -267,6 +313,14 @@ name = UI; sourceTree = ""; }; + 9B3FFF451D09CD3B0019A709 /* proxy_conf_helper */ = { + isa = PBXGroup; + children = ( + 9B3FFF461D09CD3B0019A709 /* main.m */, + ); + path = proxy_conf_helper; + sourceTree = ""; + }; D3CE66CC039F651F28057DDB /* Frameworks */ = { isa = PBXGroup; children = ( @@ -275,6 +329,7 @@ 283ED1A8E9B711AC65670031 /* Pods_ShadowsocksX_NG.framework */, 388120F062D7EB7DD0D8DDCA /* Pods_ShadowsocksX_NGTests.framework */, 19083CFCED87354F006967FF /* Pods_ShadowsocksX_NGUITests.framework */, + 1E7783AEDB4A3BDDC9FF16AC /* libPods-proxy_conf_helper.a */, ); name = Frameworks; sourceTree = ""; @@ -296,6 +351,7 @@ buildRules = ( ); dependencies = ( + 9B3FFF531D09E2B30019A709 /* PBXTargetDependency */, ); name = "ShadowsocksX-NG"; productName = "ShadowsocksX-NG"; @@ -343,6 +399,25 @@ productReference = 9B0BFFFF1D0460A70040E62B /* ShadowsocksX-NGUITests.xctest */; productType = "com.apple.product-type.bundle.ui-testing"; }; + 9B3FFF431D09CD3B0019A709 /* proxy_conf_helper */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9B3FFF481D09CD3B0019A709 /* Build configuration list for PBXNativeTarget "proxy_conf_helper" */; + buildPhases = ( + 3545247EFCD033C3FA63EA6C /* [CP] Check Pods Manifest.lock */, + 9B3FFF401D09CD3B0019A709 /* Sources */, + 9B3FFF411D09CD3B0019A709 /* Frameworks */, + 9B3FFF421D09CD3B0019A709 /* CopyFiles */, + 0BD38C8FA95AA74C8D7003EC /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = proxy_conf_helper; + productName = proxy_conf_helper; + productReference = 9B3FFF441D09CD3B0019A709 /* proxy_conf_helper */; + productType = "com.apple.product-type.tool"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -364,6 +439,9 @@ CreatedOnToolsVersion = 7.3.1; TestTargetID = 9B0BFFE41D0460A70040E62B; }; + 9B3FFF431D09CD3B0019A709 = { + CreatedOnToolsVersion = 7.3.1; + }; }; }; buildConfigurationList = 9B0BFFE01D0460A70040E62B /* Build configuration list for PBXProject "ShadowsocksX-NG" */; @@ -382,6 +460,7 @@ 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG */, 9B0BFFF31D0460A70040E62B /* ShadowsocksX-NGTests */, 9B0BFFFE1D0460A70040E62B /* ShadowsocksX-NGUITests */, + 9B3FFF431D09CD3B0019A709 /* proxy_conf_helper */, ); }; /* End PBXProject section */ @@ -391,6 +470,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 9B3FFF541D09E2D10019A709 /* proxy_conf_helper in Resources */, 9BEEF0691D04D4D500FC52B3 /* install_ss_local.sh in Resources */, 9BEEF0761D04EF3E00FC52B3 /* PreferencesWindowController.xib in Resources */, 9B3FFF291D08A1DF0019A709 /* user-rule.txt in Resources */, @@ -407,6 +487,7 @@ 9B3FFF381D08CF110019A709 /* jquery.min.js in Resources */, 9B3FFF271D0898EB0019A709 /* gfwlist.txt in Resources */, 9B0BFFEE1D0460A70040E62B /* MainMenu.xib in Resources */, + 9B3FFF4C1D09D8F70019A709 /* install_helper.sh in Resources */, 9B07EFAC1D048E880052D9DF /* menu_icon@2x.png in Resources */, 9B07EFA71D048BBB0052D9DF /* ss-local in Resources */, 9B07EFAF1D048E880052D9DF /* menu_icon_disabled@2x.png in Resources */, @@ -431,6 +512,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0BD38C8FA95AA74C8D7003EC /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 22E2FC257F00091B923B1A15 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -446,6 +542,21 @@ 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"; showEnvVarsInLog = 0; }; + 3545247EFCD033C3FA63EA6C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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"; + showEnvVarsInLog = 0; + }; 3C502B10B4D52DA1C63A2BE5 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -559,12 +670,12 @@ buildActionMask = 2147483647; files = ( 9B3FFF171D072FDE0019A709 /* LaunchAtLoginController.m in Sources */, + 9B3FFF4F1D09D9D50019A709 /* ProxyConfHelper.m in Sources */, 9B3FFF1E1D0732660019A709 /* Utils.m in Sources */, 9B3FFF321D08CEE40019A709 /* SWBQRCodeWindowController.m in Sources */, 9B3FFF211D08826E0019A709 /* PACUtils.swift in Sources */, 9B3FFF141D0705810019A709 /* Notifications.swift in Sources */, 9BEEF0701D04DDB100FC52B3 /* ServerProfileManager.swift in Sources */, - 9B3FFF2D1D08A71E0019A709 /* Sysconf.m in Sources */, 9BEEF07B1D05631500FC52B3 /* AdvPreferencesWindowController.swift in Sources */, 9BEEF06E1D04DCE400FC52B3 /* ServerProfile.swift in Sources */, 9B3FFF0D1D05FEB30019A709 /* Utils.swift in Sources */, @@ -590,6 +701,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B3FFF401D09CD3B0019A709 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B3FFF471D09CD3B0019A709 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -603,6 +722,11 @@ target = 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG */; targetProxy = 9B0BFFF51D0460A70040E62B /* PBXContainerItemProxy */; }; + 9B3FFF531D09E2B30019A709 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9B3FFF431D09CD3B0019A709 /* proxy_conf_helper */; + targetProxy = 9B3FFF521D09E2B30019A709 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -719,7 +843,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; @@ -744,7 +868,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG-Bridging-Header.h"; + SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h"; }; name = Release; }; @@ -802,6 +926,22 @@ }; name = Release; }; + 9B3FFF491D09CD3B0019A709 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B4E6A97CA843F3943524B686 /* Pods-proxy_conf_helper.debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 9B3FFF4A1D09CD3B0019A709 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 297AF069022A197FD8E9D226 /* Pods-proxy_conf_helper.release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -841,6 +981,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9B3FFF481D09CD3B0019A709 /* Build configuration list for PBXNativeTarget "proxy_conf_helper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B3FFF491D09CD3B0019A709 /* Debug */, + 9B3FFF4A1D09CD3B0019A709 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 9B0BFFDD1D0460A70040E62B /* Project object */; diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift index e62eddc..338f163 100644 --- a/ShadowsocksX-NG/AppDelegate.swift +++ b/ShadowsocksX-NG/AppDelegate.swift @@ -43,6 +43,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele let defaults = NSUserDefaults.standardUserDefaults() defaults.registerDefaults([ "ShadowsocksOn": true, + "ShadowsocksRunningMode": "auto", "LocalSocks5.ListenPort": NSNumber(unsignedShort: 1086), "LocalSocks5.ListenAddress": "localhost", "LocalSocks5.Timeout": NSNumber(unsignedInteger: 60), @@ -108,13 +109,37 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele } updateMainMenu() - SyncSSLocal() + updateRunningModeMenu() + ProxyConfHelper.install() + applyConfig() } func applicationWillTerminate(aNotification: NSNotification) { // Insert code here to tear down your application } + func applyConfig() { + let defaults = NSUserDefaults.standardUserDefaults() + let isOn = defaults.boolForKey("ShadowsocksOn") + let mode = defaults.stringForKey("ShadowsocksRunningMode") + + if isOn { + StartSSLocal() + if mode == "auto" { + autoModeMenuItem.state = 1 + globalModeMenuItem.state = 0 + ProxyConfHelper.enablePACProxy() + } else if mode == "global" { + autoModeMenuItem.state = 0 + globalModeMenuItem.state = 1 + ProxyConfHelper.enableGlobalProxy() + } + } else { + StopSSLocal() + ProxyConfHelper.disableProxy() + } + } + @IBAction func toggleRunning(sender: NSMenuItem) { let defaults = NSUserDefaults.standardUserDefaults() var isOn = defaults.boolForKey("ShadowsocksOn") @@ -123,11 +148,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele updateMainMenu() - if isOn { - StartSSLocal() - } else { - StopSSLocal() - } + applyConfig() } @IBAction func updateGFWList(sender: NSMenuItem) { @@ -173,11 +194,17 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele } @IBAction func selectPACMode(sender: NSMenuItem) { - + let defaults = NSUserDefaults.standardUserDefaults() + defaults.setValue("auto", forKey: "ShadowsocksRunningMode") + updateRunningModeMenu() + applyConfig() } @IBAction func selectGlobalMode(sender: NSMenuItem) { - + let defaults = NSUserDefaults.standardUserDefaults() + defaults.setValue("global", forKey: "ShadowsocksRunningMode") + updateRunningModeMenu() + applyConfig() } @IBAction func editServerPreferences(sender: NSMenuItem) { @@ -215,6 +242,18 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele } } + func updateRunningModeMenu() { + let defaults = NSUserDefaults.standardUserDefaults() + let mode = defaults.stringForKey("ShadowsocksRunningMode") + if mode == "auto" { + autoModeMenuItem.state = 1 + globalModeMenuItem.state = 0 + } else if mode == "global" { + autoModeMenuItem.state = 0 + globalModeMenuItem.state = 1 + } + } + func updateMainMenu() { let defaults = NSUserDefaults.standardUserDefaults() let isOn = defaults.boolForKey("ShadowsocksOn") diff --git a/ShadowsocksX-NG/LaunchAgentUtils.swift b/ShadowsocksX-NG/LaunchAgentUtils.swift index 0a98257..b2df3e4 100644 --- a/ShadowsocksX-NG/LaunchAgentUtils.swift +++ b/ShadowsocksX-NG/LaunchAgentUtils.swift @@ -31,7 +31,7 @@ func generateSSLocalLauchAgentPlist() -> Bool { let enableUdpRelay = NSUserDefaults.standardUserDefaults().boolForKey("LocalSocks5.EnableUDPRelay") - var arguments = [sslocalPath, "-c", "ss-local-config.json", "--fast-open"] + var arguments = [sslocalPath, "-c", "ss-local-config.json"] if enableUdpRelay { arguments.append("-u") } diff --git a/ShadowsocksX-NG/PACUtils.swift b/ShadowsocksX-NG/PACUtils.swift index d99bb1d..9bb1c12 100644 --- a/ShadowsocksX-NG/PACUtils.swift +++ b/ShadowsocksX-NG/PACUtils.swift @@ -66,13 +66,13 @@ func GeneratePACFile() -> Bool { // Filter empty and comment lines lines = lines.filter({ (s: String) -> Bool in if s.isEmpty { - return true + return false } let c = s[s.startIndex] if c == "!" || c == "[" { - return true + return false } - return false + return true }) do { diff --git a/ShadowsocksX-NG/ProxyConfHelper.h b/ShadowsocksX-NG/ProxyConfHelper.h new file mode 100644 index 0000000..46ec2c8 --- /dev/null +++ b/ShadowsocksX-NG/ProxyConfHelper.h @@ -0,0 +1,21 @@ +// +// ProxyConfHelper.h +// ShadowsocksX-NG +// +// Created by 邱宇舟 on 16/6/10. +// Copyright © 2016年 qiuyuzhou. All rights reserved. +// + +#import + +@interface ProxyConfHelper : NSObject + ++ (void)install; + ++ (void)enablePACProxy; + ++ (void)enableGlobalProxy; + ++ (void)disableProxy; + +@end diff --git a/ShadowsocksX-NG/ProxyConfHelper.m b/ShadowsocksX-NG/ProxyConfHelper.m new file mode 100644 index 0000000..9f336a3 --- /dev/null +++ b/ShadowsocksX-NG/ProxyConfHelper.m @@ -0,0 +1,117 @@ +// +// ProxyConfHelper.m +// ShadowsocksX-NG +// +// Created by 邱宇舟 on 16/6/10. +// Copyright © 2016年 qiuyuzhou. All rights reserved. +// + +#import "ProxyConfHelper.h" +#import "proxy_conf_helper_version.h" + +#define kShadowsocksHelper @"/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" + +@implementation ProxyConfHelper + + ++ (BOOL)isVersionOk { + NSTask *task; + task = [[NSTask alloc] init]; + [task setLaunchPath:kShadowsocksHelper]; + + NSArray *args; + args = [NSArray arrayWithObjects:@"-v", nil]; + [task setArguments: args]; + + NSPipe *pipe; + pipe = [NSPipe pipe]; + [task setStandardOutput:pipe]; + + NSFileHandle *fd; + fd = [pipe fileHandleForReading]; + + [task launch]; + + NSData *data; + data = [fd readDataToEndOfFile]; + + NSString *str; + str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + + if (![str isEqualToString:kProxyConfHelperVersion]) { + return NO; + } + return YES; +} + ++ (void)install { + NSFileManager *fileManager = [NSFileManager defaultManager]; + if (![fileManager fileExistsAtPath:kShadowsocksHelper] || ![self isVersionOk]) { + NSString *helperPath = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"install_helper.sh"]; + NSLog(@"run install script: %@", helperPath); + NSDictionary *error; + NSString *script = [NSString stringWithFormat:@"do shell script \"bash %@\" with administrator privileges", helperPath]; + NSAppleScript *appleScript = [[NSAppleScript new] initWithSource:script]; + if ([appleScript executeAndReturnError:&error]) { + NSLog(@"installation success"); + } else { + NSLog(@"installation failure"); + } + } +} + ++ (void)callHelper:(NSArray*) arguments { + NSTask *task; + task = [[NSTask alloc] init]; + [task setLaunchPath:kShadowsocksHelper]; + + // this log is very important + NSLog(@"run shadowsocks helper: %@", kShadowsocksHelper); + [task setArguments:arguments]; + + NSPipe *stdoutpipe; + stdoutpipe = [NSPipe pipe]; + [task setStandardOutput:stdoutpipe]; + + NSPipe *stderrpipe; + stderrpipe = [NSPipe pipe]; + [task setStandardError:stderrpipe]; + + NSFileHandle *file; + file = [stdoutpipe fileHandleForReading]; + + [task launch]; + + NSData *data; + data = [file readDataToEndOfFile]; + + NSString *string; + string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if (string.length > 0) { + NSLog(@"%@", string); + } + + file = [stderrpipe fileHandleForReading]; + data = [file readDataToEndOfFile]; + string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if (string.length > 0) { + NSLog(@"%@", string); + } +} + ++ (void)enablePACProxy { + NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NE/gfwlist.js", NSHomeDirectory()]; + NSURL* url = [NSURL fileURLWithPath:urlString]; + [self callHelper:@[@"--mode", @"auto", @"--pac-url", [url absoluteString]]]; +} + ++ (void)enableGlobalProxy { + NSUInteger port = [[NSUserDefaults standardUserDefaults]integerForKey:@"LocalSocks5.ListenPort"]; + [self callHelper:@[@"--mode", @"global", @"--port", [NSString stringWithFormat:@"%lu", (unsigned long)port] ]]; +} + ++ (void)disableProxy { + [self callHelper:@[@"--mode", @"off"]]; +} + +@end diff --git a/ShadowsocksX-NG/ServerProfileManager.swift b/ShadowsocksX-NG/ServerProfileManager.swift index 1a39312..3b678da 100644 --- a/ShadowsocksX-NG/ServerProfileManager.swift +++ b/ShadowsocksX-NG/ServerProfileManager.swift @@ -43,12 +43,15 @@ class ServerProfileManager: NSObject { } defaults.setObject(_profiles, forKey: "ServerProfiles") + if getActiveProfile() == nil { + activeProfileId = nil + } - // TODO if activeProfileId != nil { defaults.setObject(activeProfileId, forKey: "ActiveServerProfileId") writeSSLocalConfFile((getActiveProfile()?.toJsonConfig())!) } else { + defaults.removeObjectForKey("ActiveServerProfileId") removeSSLocalConfFile() } } diff --git a/ShadowsocksX-NG-Bridging-Header.h b/ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h similarity index 89% rename from ShadowsocksX-NG-Bridging-Header.h rename to ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h index e59b230..186788a 100644 --- a/ShadowsocksX-NG-Bridging-Header.h +++ b/ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h @@ -7,3 +7,4 @@ #import "LaunchAtLoginController.h" #import "SWBQRCodeWindowController.h" #import "Utils.h" +#import "ProxyConfHelper.h" \ No newline at end of file diff --git a/ShadowsocksX-NG/Sysconf.m b/ShadowsocksX-NG/Sysconf.m deleted file mode 100644 index c8dea03..0000000 --- a/ShadowsocksX-NG/Sysconf.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// Sysconf.m -// ShadowsocksX-NG -// -// Created by 邱宇舟 on 16/6/9. -// Copyright © 2016年 qiuyuzhou. All rights reserved. -// - -#import -#import - - -void ConfProxy() { - -} \ No newline at end of file diff --git a/ShadowsocksX-NG/install_helper.sh b/ShadowsocksX-NG/install_helper.sh new file mode 100644 index 0000000..fe34eba --- /dev/null +++ b/ShadowsocksX-NG/install_helper.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# install_helper.sh +# shadowsocks +# +# Created by clowwindy on 14-3-15. + +cd `dirname "${BASH_SOURCE[0]}"` +sudo mkdir -p "/Library/Application Support/ShadowsocksX-NG/" +sudo cp proxy_conf_helper "/Library/Application Support/ShadowsocksX-NG/" +sudo chown root:admin "/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" +sudo chmod +s "/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" + +echo done \ No newline at end of file diff --git a/ShadowsocksX-NG/proxy_conf_helper_version.h b/ShadowsocksX-NG/proxy_conf_helper_version.h new file mode 100644 index 0000000..b6b94aa --- /dev/null +++ b/ShadowsocksX-NG/proxy_conf_helper_version.h @@ -0,0 +1,14 @@ +// +// proxy_conf_helper_version.h +// ShadowsocksX-NG +// +// Created by 邱宇舟 on 16/6/10. +// Copyright © 2016年 qiuyuzhou. All rights reserved. +// + +#ifndef proxy_conf_helper_version_h +#define proxy_conf_helper_version_h + +#define kProxyConfHelperVersion @"1.0.0" + +#endif /* proxy_conf_helper_version_h */ diff --git a/ShadowsocksX-NG/reload_conf_ss_local.sh b/ShadowsocksX-NG/reload_conf_ss_local.sh index 000a895..95bc22d 100755 --- a/ShadowsocksX-NG/reload_conf_ss_local.sh +++ b/ShadowsocksX-NG/reload_conf_ss_local.sh @@ -8,4 +8,5 @@ #launchctl kill SIGHUP "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NE.local.plist" -launchctl kickstart -k "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NE.local.plist" +launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NE.local.plist" +launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NE.local.plist" diff --git a/proxy_conf_helper/main.m b/proxy_conf_helper/main.m new file mode 100644 index 0000000..67e0cc1 --- /dev/null +++ b/proxy_conf_helper/main.m @@ -0,0 +1,143 @@ +// +// main.m +// shadowsocks_sysconf +// +// Created by clowwindy on 14-3-15. +// Copyright (c) 2014年 clowwindy. All rights reserved. +// +// Changed by QiuYuzhou + + +#import +#import +#import "../ShadowsocksX-NG/proxy_conf_helper_version.h" + +// A library for parsing command line. +// https://github.com/stephencelis/BRLOptionParser +#import + + +int main(int argc, const char * argv[]) +{ + NSString* mode; + NSString* pacURL; + NSString* portString; + + BRLOptionParser *options = [BRLOptionParser new]; + [options setBanner:@"Usage: %s [-v] [-m auto|global|off] [-u ] [-p ]", argv[0]]; + + // Version + [options addOption:"version" flag:'v' description:@"Print the version number." block:^{ + printf("%s", [kProxyConfHelperVersion UTF8String]); + exit(EXIT_SUCCESS); + }]; + + // Help + __weak typeof(options) weakOptions = options; + [options addOption:"help" flag:'h' description:@"Show this message" block:^{ + printf("%s", [[weakOptions description] UTF8String]); + exit(EXIT_SUCCESS); + }]; + + // Mode + [options addOption:"mode" flag:'m' description:@"Proxy mode, may be: auto,blobal,off" argument:&mode]; + + [options addOption:"pac-url" flag:'u' description:@"PAC file url for auto mode." argument:&pacURL]; + [options addOption:"port" flag:'p' description:@"Listen port for global mode." argument:&portString]; + + NSError *error = nil; + if (![options parseArgc:argc argv:argv error:&error]) { + const char * message = error.localizedDescription.UTF8String; + fprintf(stderr, "%s: %s\n", argv[0], message); + exit(EXIT_FAILURE); + } + + NSInteger port = 0; + if (mode) { + if ([@"auto" isEqualToString:mode]) { + if (!pacURL) { + return 1; + } + } else if ([@"global" isEqualToString:mode]) { + if (!portString) { + return 1; + } + port = [portString integerValue]; + if (0 == port) { + return 1; + } + } else if (![@"off" isEqualToString:mode]) { + return 1; + } + } else { + printf("%s", [kProxyConfHelperVersion UTF8String]); + return 0; + } + + + static AuthorizationRef authRef; + static AuthorizationFlags authFlags; + authFlags = kAuthorizationFlagDefaults + | kAuthorizationFlagExtendRights + | kAuthorizationFlagInteractionAllowed + | kAuthorizationFlagPreAuthorize; + OSStatus authErr = AuthorizationCreate(nil, kAuthorizationEmptyEnvironment, authFlags, &authRef); + if (authErr != noErr) { + authRef = nil; + NSLog(@"Error when create authorization"); + return 1; + } else { + if (authRef == NULL) { + NSLog(@"No authorization has been granted to modify network configuration"); + return 1; + } + + SCPreferencesRef prefRef = SCPreferencesCreateWithAuthorization(nil, CFSTR("Shadowsocks"), nil, authRef); + + NSDictionary *sets = (__bridge NSDictionary *)SCPreferencesGetValue(prefRef, kSCPrefNetworkServices); + + NSMutableDictionary *proxies = [[NSMutableDictionary alloc] init]; + [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesHTTPEnable]; + [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesHTTPSEnable]; + [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigEnable]; + [proxies setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCFNetworkProxiesSOCKSEnable]; + + // 遍历系统中的网络设备列表,设置 AirPort 和 Ethernet 的代理 + for (NSString *key in [sets allKeys]) { + NSMutableDictionary *dict = [sets objectForKey:key]; + NSString *hardware = [dict valueForKeyPath:@"Interface.Hardware"]; + // NSLog(@"%@", hardware); + if ([hardware isEqualToString:@"AirPort"] || [hardware isEqualToString:@"Wi-Fi"] || [hardware isEqualToString:@"Ethernet"]) { + + if ([mode isEqualToString:@"auto"]) { + + [proxies setObject:pacURL forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigURLString]; + [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString *)kCFNetworkProxiesProxyAutoConfigEnable]; + + } else if ([mode isEqualToString:@"global"]) { + + + [proxies setObject:@"127.0.0.1" forKey:(NSString *) + kCFNetworkProxiesSOCKSProxy]; + [proxies setObject:[NSNumber numberWithInteger:port] forKey:(NSString*) + kCFNetworkProxiesSOCKSPort]; + [proxies setObject:[NSNumber numberWithInt:1] forKey:(NSString*) + kCFNetworkProxiesSOCKSEnable]; + + } + + SCPreferencesPathSetValue(prefRef, (__bridge CFStringRef)[NSString stringWithFormat:@"/%@/%@/%@", kSCPrefNetworkServices, key, kSCEntNetProxies], (__bridge CFDictionaryRef)proxies); + } + } + + SCPreferencesCommitChanges(prefRef); + SCPreferencesApplyChanges(prefRef); + SCPreferencesSynchronize(prefRef); + + AuthorizationFree(authRef, kAuthorizationFlagDefaults); + } + + printf("pac proxy set to %s", [mode UTF8String]); + + return 0; +}