Look like working now.

This commit is contained in:
Charlie Qiu
2016-06-10 03:59:27 +08:00
parent 250dfc7b38
commit ccd666bc2a
34 changed files with 1774 additions and 231 deletions
+5 -1
View File
@@ -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
+4 -1
View File
@@ -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
+62
View File
@@ -0,0 +1,62 @@
// BRLOptionParser.h
//
// 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.
@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
+306
View File
@@ -0,0 +1,306 @@
// BRLOptionParser.m
//
// 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.
#import "BRLOptionParser.h"
#import <getopt.h>
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
+22
View File
@@ -0,0 +1,22 @@
(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.
+88
View File
@@ -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 <BRLOptionParser/BRLOptionParser.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *name = @"world";
BOOL verbose = NO;
BRLOptionParser *options = [BRLOptionParser new];
[options setBanner:@"usage: %s [-n <name>] [-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 <name>] [-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.
+1
View File
@@ -0,0 +1 @@
../../../BRLOptionParser/BRLOptionParser/BRLOptionParser.h
+1
View File
@@ -0,0 +1 @@
../../../BRLOptionParser/BRLOptionParser/BRLOptionParser.h
+4 -1
View File
@@ -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
+444 -190
View File
@@ -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 = "<group>"; };
0DBA7F3642776C1964512C9A38829081 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = "<group>"; };
101C763FD5409006D69EDB82815E4A61 /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = "<group>"; };
146877FADE3D950CE648CEC0CD63A9F7 /* Pods-ShadowsocksX-NG-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NG-dummy.m"; sourceTree = "<group>"; };
07D3B0CB3F30536204C2F49BABFEC817 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = "<group>"; };
115FC915544A7D72B3D616B0FBAB6447 /* Pods-proxy_conf_helper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-proxy_conf_helper.release.xcconfig"; sourceTree = "<group>"; };
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 = "<group>"; };
1A0B246E1562362768549E6D4EC4581B /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = "<group>"; };
1A9494AD31063618F619B185BCE19CC1 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = "<group>"; };
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 = "<group>"; };
1E2A29BA50E80B66E36C94B60FAD8863 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = "<group>"; };
1F84BF4B53C3F4DC127BE48BFBE1B485 /* Pods-ShadowsocksX-NGTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.debug.xcconfig"; sourceTree = "<group>"; };
2959D264574F227296E36F7CDF2E4F4F /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = "<group>"; };
388CCDB8A2AEB0C011D16C2ECD0E7FEC /* Pods-ShadowsocksX-NGTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGTests-umbrella.h"; sourceTree = "<group>"; };
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 = "<group>"; };
468467C513E265D0EB493C2256A20744 /* Pods-ShadowsocksX-NG-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NG-umbrella.h"; sourceTree = "<group>"; };
4D122592FF413A03421361CF79642365 /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGTests-acknowledgements.plist"; sourceTree = "<group>"; };
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 = "<group>"; };
4E393CF47FE31F265B29AA2D9B67C656 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = "<group>"; };
50BCAC7849E43619A0E6BA6D3291D195 /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = "<group>"; };
5175E677ADC3F810A4FB10B104C4332B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5318DBE000F4927B7CF84ED7D1FA186D /* Pods-ShadowsocksX-NGUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.release.xcconfig"; sourceTree = "<group>"; };
5B09F376C277F027BDCD54137D76C547 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = "<group>"; };
5C5763A83A1E028B6C4A073221CB764F /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = "<group>"; };
5F3009EF5DA8C39DDC8FE5A6B05E19CE /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.plist"; sourceTree = "<group>"; };
62AD10F9155EEB3045E71571F8A8682E /* Pods-ShadowsocksX-NG-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NG-acknowledgements.markdown"; sourceTree = "<group>"; };
658CBED44D4009D80F990A188D7A8B3F /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = "<group>"; };
66BB50CE6148DA175B15FB88B716A432 /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = "<group>"; };
6D1F9022AC9979CD59E8F83962DAF51D /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = "<group>"; };
7514C46F1EDB85D5170D42789C650A86 /* Pods-ShadowsocksX-NGTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.release.xcconfig"; sourceTree = "<group>"; };
79E32C97D15B18BFEB591B4A8B5C8477 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = "<group>"; };
7ED443D528393D61A04FBD88603DE5F3 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = "<group>"; };
8FFF564423DBE209836D47626963E9D4 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = "<group>"; };
9148AF771CC25435F5BAA4B608FB419E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
1E8066197D85005930E069DBDFE56EF1 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = "<group>"; };
1F0C65FEB29E96761774D63877EFB727 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = "<group>"; };
214228A32010BAFC3A11964996BA6CCF /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = "<group>"; };
2577A840C945439C44898B5965CF9F72 /* Pods-ShadowsocksX-NGTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-resources.sh"; sourceTree = "<group>"; };
26E02FA4AB890BE221D861934BAAD565 /* Pods-proxy_conf_helper-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-resources.sh"; sourceTree = "<group>"; };
27FB77423BC41EF0A28FF2DC87141788 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = "<group>"; };
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 = "<group>"; };
3447501773497F7E2C49014760C1D897 /* Pods-ShadowsocksX-NGTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-frameworks.sh"; sourceTree = "<group>"; };
344D22D7630792C24D198B23D60761E0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3B3216EE8FD7FF8BF90032B59EAA3BA4 /* Pods-ShadowsocksX-NG-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-frameworks.sh"; sourceTree = "<group>"; };
3BA938587D601431268DFECBFF530945 /* Pods-ShadowsocksX-NG-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NG-acknowledgements.plist"; sourceTree = "<group>"; };
3F433AD014FA270BBC782559C8360DE4 /* BRLOptionParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRLOptionParser-dummy.m"; sourceTree = "<group>"; };
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 = "<group>"; };
43D5AA9B51489E458EA7C4C1C0FED763 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = "<group>"; };
49CF30264F11A2DCE553DBC24D556739 /* BRLOptionParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRLOptionParser.h; path = BRLOptionParser/BRLOptionParser.h; sourceTree = "<group>"; };
4A038CEED6D36E3CA7FB588271509D07 /* Pods-ShadowsocksX-NG-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-resources.sh"; sourceTree = "<group>"; };
4F3F6DB4863E2BF6DD9B3404A7347E97 /* Pods-proxy_conf_helper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-proxy_conf_helper-dummy.m"; sourceTree = "<group>"; };
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 = "<group>"; };
57C31EC0602E17A27DCFF3ABC12FFC16 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5A500FADE0FEDDDE27A3FD5888D85A6B /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = "<group>"; };
5B17ECFC5893AE37EF56BE8F812BEC51 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = "<group>"; };
5DAE5F863B7B5BB6108D82B0C313E755 /* Pods-ShadowsocksX-NGUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.plist"; sourceTree = "<group>"; };
60E286DC997C97527D4F0C604F20EB02 /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = "<group>"; };
62B6C41B51A5C2A961EFEAA57613D32A /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = "<group>"; };
633A6E2E196DD954426FD41ABD9BFC02 /* Pods-proxy_conf_helper-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-frameworks.sh"; sourceTree = "<group>"; };
64A5654106D19BBCCA98086C975C2255 /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = "<group>"; };
69623EC55B7A9ADA7457D7D7B1303EB5 /* Pods-ShadowsocksX-NGTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGTests-umbrella.h"; sourceTree = "<group>"; };
6B6350BA5CA562733F4200F29DF6F392 /* Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stream.swift; path = Source/Stream.swift; sourceTree = "<group>"; };
6CFA39714E1A134569812A6D0F6DBDAA /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGTests-acknowledgements.markdown"; sourceTree = "<group>"; };
6E4F48D667C86DC7DD6F0E2899B155FB /* BRLOptionParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRLOptionParser-prefix.pch"; sourceTree = "<group>"; };
72425CE32EE256A9B60D7E337B33A8EA /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = "<group>"; };
7641DF24E577F8EC64CA861723E8F092 /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = "<group>"; };
774723B57789DD1DBE95EC5F0BCBD551 /* BRLOptionParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRLOptionParser.xcconfig; sourceTree = "<group>"; };
7A2B7F0E799C92BEB089D172B858F042 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = "<group>"; };
7B4E3032697142D8483EAF95D1339BF0 /* Pods-proxy_conf_helper-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-proxy_conf_helper-acknowledgements.plist"; sourceTree = "<group>"; };
7E740CE10676BB2B8A83CBE55A231947 /* Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Download.swift; path = Source/Download.swift; sourceTree = "<group>"; };
7F45E0CBEB08D8EFAAF065F90F5F99DC /* Pods-ShadowsocksX-NGUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGUITests-dummy.m"; sourceTree = "<group>"; };
876AA27889CCD350241460E35100BDB9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
884F8C760A37C789CE94F8081748D1FC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8E1FDF542848BDCC77947783E6FF96D5 /* Pods-proxy_conf_helper-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-proxy_conf_helper-acknowledgements.markdown"; sourceTree = "<group>"; };
8FA72CABF17A62C808E9532DC97A1E0B /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = "<group>"; };
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 = "<group>"; };
9D0B126BFB98A1371D34CEE2FCD6F6E7 /* Pods-ShadowsocksX-NGTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-frameworks.sh"; sourceTree = "<group>"; };
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 = "<group>"; };
A149BF2819128352A98494A4402603EE /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = "<group>"; };
AB714D2EF499EE0EF3E1957151533A5D /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = "<group>"; };
ACB93EF018CCB0BC041BA7DB39E1279F /* Pods-ShadowsocksX-NGTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGTests-dummy.m"; sourceTree = "<group>"; };
AE6827D6CBD3F8B59B79641ABF6ED159 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = "<group>"; };
B0F1CF96F8670B80705E17E66398AFB5 /* Pods-ShadowsocksX-NG-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NG-acknowledgements.plist"; sourceTree = "<group>"; };
B12900CD0C5DD4E3BAA6B0E99E86E88B /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = "<group>"; };
C07DC7D75BC62D5D4717E8A1A203AD90 /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.debug.xcconfig"; sourceTree = "<group>"; };
C8DE572C7DD5B4FEE9DDA66B03C62877 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.markdown"; sourceTree = "<group>"; };
CA9DFE9D14BFD1A3B91B96DCF2F2EB82 /* Pods-ShadowsocksX-NG-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-resources.sh"; sourceTree = "<group>"; };
D75363524A7811C1BEECC6A3447CEB72 /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGTests-acknowledgements.markdown"; sourceTree = "<group>"; };
DA0CFA03D38149FEC35AF0161BD4B6FC /* Pods-ShadowsocksX-NGUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGUITests-umbrella.h"; sourceTree = "<group>"; };
DA1D50F2DE39D3693F5FE2A3A91357CF /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = "<group>"; };
DB971A97845C7C69582CF5AD184CE534 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
DDC2C7A48545D8C54D52554343225FB8 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = "<group>"; };
DEE9BB7109A5D38BDAAF1B40B0466095 /* Pods-ShadowsocksX-NGUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-frameworks.sh"; sourceTree = "<group>"; };
E23BFD924F87F9E00718BA0A16ED2DAE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
EB6E22101AF0AF5ED2B83116656571B2 /* Pods-ShadowsocksX-NG-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-frameworks.sh"; sourceTree = "<group>"; };
EF77C66B356F1513207C4988B97AF34A /* Pods-ShadowsocksX-NGUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGUITests.modulemap"; sourceTree = "<group>"; };
F9039D48B1E893EF8AD87645A4FF820F /* Stream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stream.swift; path = Source/Stream.swift; sourceTree = "<group>"; };
F9278DA00F41E390EE68B6F3C8161C54 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = "<group>"; };
FA28AAF8F177034CA26477B655DC85A2 /* Pods-ShadowsocksX-NGUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGUITests-dummy.m"; sourceTree = "<group>"; };
96531C433F90CFE333468D15C01B143C /* Pods-ShadowsocksX-NG.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NG.modulemap"; sourceTree = "<group>"; };
9C0D9B9B2B2F4080487D871E0C67767B /* Pods-ShadowsocksX-NGUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.release.xcconfig"; sourceTree = "<group>"; };
A6E50432546249DB325571396BC3E3E9 /* BRLOptionParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRLOptionParser.m; path = BRLOptionParser/BRLOptionParser.m; sourceTree = "<group>"; };
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 = "<group>"; };
B1F0019C3F168BED15E16ADB4DC8EB15 /* Pods-ShadowsocksX-NGUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGUITests.modulemap"; sourceTree = "<group>"; };
B34263B730C3B89322185246664228DB /* Pods-ShadowsocksX-NGTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.debug.xcconfig"; sourceTree = "<group>"; };
B6E587120F8C00DE490D711EB8355C61 /* Pods-ShadowsocksX-NGTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGTests-dummy.m"; sourceTree = "<group>"; };
BA620A99600631CDE5EB09E7B6CB477B /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = "<group>"; };
BB11239DC528C35FE54A370BA72E0691 /* Pods-ShadowsocksX-NGUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGUITests-acknowledgements.markdown"; sourceTree = "<group>"; };
D096B0E248487E0D75E1639559665F00 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = "<group>"; };
D372E7E55D345CF275C393B584AA40F2 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = "<group>"; };
D9DFBFFA4EE2458A9C1814A1F94778FD /* Pods-ShadowsocksX-NGUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGUITests.debug.xcconfig"; sourceTree = "<group>"; };
DCB80F1B54ED0E9C92682A5AFCA229A1 /* Pods-ShadowsocksX-NGUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-resources.sh"; sourceTree = "<group>"; };
DFD263E002936621FD6AA21700066E3C /* Pods-ShadowsocksX-NGUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGUITests-frameworks.sh"; sourceTree = "<group>"; };
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 = "<group>"; };
F21E0553DDFB388845B929FC1530342C /* Pods-ShadowsocksX-NG-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NG-acknowledgements.markdown"; sourceTree = "<group>"; };
F942E6517D473F38973BA58D87DFEB15 /* Pods-ShadowsocksX-NG-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NG-dummy.m"; sourceTree = "<group>"; };
FF4372CA18C7AEB3B076F0B9C4F37C22 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = "<group>"; };
FFE8D34BD9DA37F7AC8E02DBD77276CC /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = "<group>"; };
/* 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 = "<group>";
};
28C17CEF104526ACA07B6EEE217EC43E /* OS X */ = {
isa = PBXGroup;
children = (
@@ -154,14 +208,6 @@
name = "OS X";
sourceTree = "<group>";
};
35F128EB69B6F7FB7DA93BBF6C130FAE /* Pods */ = {
isa = PBXGroup;
children = (
6E519FC8760483F5D136181B2EBCBDEB /* Alamofire */,
);
name = Pods;
sourceTree = "<group>";
};
39E9EE8210D861DFD82346C1F5EB7218 /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -170,90 +216,45 @@
name = Frameworks;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
/* 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 */;
+1 -1
View File
@@ -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)
@@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
@interface PodsDummy_BRLOptionParser : NSObject
@end
@implementation PodsDummy_BRLOptionParser
@end
@@ -0,0 +1,4 @@
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
@@ -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
@@ -0,0 +1,29 @@
# Acknowledgements
This application makes use of the following third party libraries:
## BRLOptionParser
(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.
Generated by CocoaPods - https://cocoapods.org
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>FooterText</key>
<string>This application makes use of the following third party libraries:</string>
<key>Title</key>
<string>Acknowledgements</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>(The MIT License)
Copyright &#169; 2013-2015 Stephen Celis (&lt;stephen@stephencelis.com&gt;)
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.
</string>
<key>Title</key>
<string>BRLOptionParser</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string>
<key>Title</key>
<string></string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
</array>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>Title</key>
<string>Acknowledgements</string>
</dict>
</plist>
@@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
@interface PodsDummy_Pods_proxy_conf_helper : NSObject
@end
@implementation PodsDummy_Pods_proxy_conf_helper
@end
@@ -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
}
@@ -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
@@ -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
@@ -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
+157 -8
View File
@@ -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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
@@ -90,7 +115,6 @@
9B0BFFFA1D0460A70040E62B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
9B3FFF151D072FDE0019A709 /* LaunchAtLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchAtLoginController.h; sourceTree = "<group>"; };
9B3FFF161D072FDE0019A709 /* LaunchAtLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchAtLoginController.m; sourceTree = "<group>"; };
@@ -100,7 +124,6 @@
9B3FFF221D088E8D0019A709 /* abp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = abp.js; sourceTree = "<group>"; };
9B3FFF261D0898EB0019A709 /* gfwlist.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gfwlist.txt; sourceTree = "<group>"; };
9B3FFF281D08A1DF0019A709 /* user-rule.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "user-rule.txt"; sourceTree = "<group>"; };
9B3FFF2C1D08A71E0019A709 /* Sysconf.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Sysconf.m; sourceTree = "<group>"; };
9B3FFF301D08CEE40019A709 /* SWBQRCodeWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWBQRCodeWindowController.h; sourceTree = "<group>"; };
9B3FFF311D08CEE40019A709 /* SWBQRCodeWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SWBQRCodeWindowController.m; sourceTree = "<group>"; };
9B3FFF331D08CEF70019A709 /* SWBQRCodeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SWBQRCodeWindowController.xib; sourceTree = "<group>"; };
@@ -109,6 +132,13 @@
9B3FFF371D08CF110019A709 /* qrcode.htm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = qrcode.htm; sourceTree = "<group>"; };
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 = "<group>"; };
9B3FFF4B1D09D8F70019A709 /* install_helper.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = install_helper.sh; sourceTree = "<group>"; };
9B3FFF4D1D09D9D50019A709 /* ProxyConfHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyConfHelper.h; sourceTree = "<group>"; };
9B3FFF4E1D09D9D50019A709 /* ProxyConfHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxyConfHelper.m; sourceTree = "<group>"; };
9B3FFF501D09DAEA0019A709 /* proxy_conf_helper_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = proxy_conf_helper_version.h; sourceTree = "<group>"; };
9B3FFF511D09DBA20019A709 /* ShadowsocksX-NG-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ShadowsocksX-NG-Bridging-Header.h"; sourceTree = "<group>"; };
9BEEF0651D04CB8500FC52B3 /* install_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = install_ss_local.sh; sourceTree = "<group>"; };
9BEEF0661D04CE8D00FC52B3 /* start_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = start_ss_local.sh; sourceTree = "<group>"; };
9BEEF0671D04CE9A00FC52B3 /* stop_ss_local.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = stop_ss_local.sh; sourceTree = "<group>"; };
@@ -120,6 +150,7 @@
9BEEF0771D04FE8A00FC52B3 /* LaunchAgentUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchAgentUtils.swift; sourceTree = "<group>"; };
9BEEF0791D05631500FC52B3 /* AdvPreferencesWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdvPreferencesWindowController.swift; sourceTree = "<group>"; };
9BEEF07A1D05631500FC52B3 /* AdvPreferencesWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AdvPreferencesWindowController.xib; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
/* 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 = "<group>";
@@ -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 = "<group>";
@@ -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 = "<group>";
@@ -267,6 +313,14 @@
name = UI;
sourceTree = "<group>";
};
9B3FFF451D09CD3B0019A709 /* proxy_conf_helper */ = {
isa = PBXGroup;
children = (
9B3FFF461D09CD3B0019A709 /* main.m */,
);
path = proxy_conf_helper;
sourceTree = "<group>";
};
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 = "<group>";
@@ -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 */;
+47 -8
View File
@@ -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")
+1 -1
View File
@@ -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")
}
+3 -3
View File
@@ -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 {
+21
View File
@@ -0,0 +1,21 @@
//
// ProxyConfHelper.h
// ShadowsocksX-NG
//
// Created by 邱宇舟 on 16/6/10.
// Copyright © 2016年 qiuyuzhou. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface ProxyConfHelper : NSObject
+ (void)install;
+ (void)enablePACProxy;
+ (void)enableGlobalProxy;
+ (void)disableProxy;
@end
+117
View File
@@ -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
+4 -1
View File
@@ -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()
}
}
@@ -7,3 +7,4 @@
#import "LaunchAtLoginController.h"
#import "SWBQRCodeWindowController.h"
#import "Utils.h"
#import "ProxyConfHelper.h"
-15
View File
@@ -1,15 +0,0 @@
//
// Sysconf.m
// ShadowsocksX-NG
//
// Created by 邱宇舟 on 16/6/9.
// Copyright © 2016年 qiuyuzhou. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
void ConfProxy() {
}
+14
View File
@@ -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
@@ -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 */
+2 -1
View File
@@ -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"
+143
View File
@@ -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 <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>
#import "../ShadowsocksX-NG/proxy_conf_helper_version.h"
// A library for parsing command line.
// https://github.com/stephencelis/BRLOptionParser
#import <BRLOptionParser/BRLOptionParser.h>
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 <url>] [-p <port>]", 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;
}