From 52709213e44169ebf5c2008af3760ade086178d4 Mon Sep 17 00:00:00 2001 From: Charlie Qiu Date: Fri, 10 Mar 2017 22:35:50 +0800 Subject: [PATCH] Add pod MASShortcut 2.3.6 --- Podfile | 1 + Podfile.lock | 7 +- .../Framework/MASDictionaryTransformer.h | 19 + .../Framework/MASDictionaryTransformer.m | 51 + Pods/MASShortcut/Framework/MASHotKey.h | 12 + Pods/MASShortcut/Framework/MASHotKey.m | 44 + Pods/MASShortcut/Framework/MASKeyCodes.h | 44 + Pods/MASShortcut/Framework/MASKeyMasks.h | 18 + Pods/MASShortcut/Framework/MASLocalization.h | 13 + Pods/MASShortcut/Framework/MASLocalization.m | 34 + Pods/MASShortcut/Framework/MASShortcut.h | 81 ++ Pods/MASShortcut/Framework/MASShortcut.m | 242 ++++ .../Framework/MASShortcut.modulemap | 6 + .../MASShortcut/Framework/MASShortcutBinder.h | 67 + .../MASShortcut/Framework/MASShortcutBinder.m | 121 ++ .../Framework/MASShortcutMonitor.h | 27 + .../Framework/MASShortcutMonitor.m | 108 ++ .../Framework/MASShortcutValidator.h | 29 + .../Framework/MASShortcutValidator.m | 112 ++ .../Framework/MASShortcutView+Bindings.h | 25 + .../Framework/MASShortcutView+Bindings.m | 50 + Pods/MASShortcut/Framework/MASShortcutView.h | 26 + Pods/MASShortcut/Framework/MASShortcutView.m | 615 +++++++++ Pods/MASShortcut/Framework/Shortcut.h | 8 + Pods/MASShortcut/LICENSE | 22 + Pods/MASShortcut/README.md | 136 ++ Pods/MASShortcut/cs.lproj/Localizable.strings | 47 + Pods/MASShortcut/de.lproj/Localizable.strings | 47 + Pods/MASShortcut/en.lproj/Localizable.strings | 47 + Pods/MASShortcut/es.lproj/Localizable.strings | 47 + Pods/MASShortcut/fr.lproj/Localizable.strings | 47 + Pods/MASShortcut/it.lproj/Localizable.strings | 47 + Pods/MASShortcut/ja.lproj/Localizable.strings | 47 + Pods/MASShortcut/ko.lproj/Localizable.strings | 47 + Pods/MASShortcut/nl.lproj/Localizable.strings | 47 + Pods/MASShortcut/pl.lproj/Localizable.strings | 47 + Pods/MASShortcut/ru.lproj/Localizable.strings | 47 + .../zh-Hans.lproj/Localizable.strings | 47 + .../zh-Hant.lproj/Localizable.strings | 47 + Pods/Manifest.lock | 7 +- Pods/Pods.xcodeproj/project.pbxproj | 1143 ++++++++++++----- .../MASShortcut/Info.plist | 26 + .../MASShortcut/MASShortcut-dummy.m | 5 + .../MASShortcut/MASShortcut-prefix.pch | 12 + .../MASShortcut/MASShortcut-umbrella.h | 28 + .../MASShortcut/MASShortcut.modulemap | 6 + .../MASShortcut/MASShortcut.xcconfig | 11 + .../ResourceBundle-MASShortcut-Info.plist | 24 + ...-ShadowsocksX-NG-acknowledgements.markdown | 26 + ...ods-ShadowsocksX-NG-acknowledgements.plist | 32 + .../Pods-ShadowsocksX-NG-frameworks.sh | 4 +- .../Pods-ShadowsocksX-NG.debug.xcconfig | 6 +- .../Pods-ShadowsocksX-NG.release.xcconfig | 6 +- .../Pods-ShadowsocksX-NGTests-frameworks.sh | 2 +- .../Pods-ShadowsocksX-NGTests.debug.xcconfig | 4 +- ...Pods-ShadowsocksX-NGTests.release.xcconfig | 4 +- .../Pods-proxy_conf_helper-frameworks.sh | 2 +- 57 files changed, 3504 insertions(+), 373 deletions(-) create mode 100644 Pods/MASShortcut/Framework/MASDictionaryTransformer.h create mode 100644 Pods/MASShortcut/Framework/MASDictionaryTransformer.m create mode 100644 Pods/MASShortcut/Framework/MASHotKey.h create mode 100644 Pods/MASShortcut/Framework/MASHotKey.m create mode 100644 Pods/MASShortcut/Framework/MASKeyCodes.h create mode 100644 Pods/MASShortcut/Framework/MASKeyMasks.h create mode 100644 Pods/MASShortcut/Framework/MASLocalization.h create mode 100644 Pods/MASShortcut/Framework/MASLocalization.m create mode 100644 Pods/MASShortcut/Framework/MASShortcut.h create mode 100644 Pods/MASShortcut/Framework/MASShortcut.m create mode 100644 Pods/MASShortcut/Framework/MASShortcut.modulemap create mode 100644 Pods/MASShortcut/Framework/MASShortcutBinder.h create mode 100644 Pods/MASShortcut/Framework/MASShortcutBinder.m create mode 100644 Pods/MASShortcut/Framework/MASShortcutMonitor.h create mode 100644 Pods/MASShortcut/Framework/MASShortcutMonitor.m create mode 100644 Pods/MASShortcut/Framework/MASShortcutValidator.h create mode 100644 Pods/MASShortcut/Framework/MASShortcutValidator.m create mode 100644 Pods/MASShortcut/Framework/MASShortcutView+Bindings.h create mode 100644 Pods/MASShortcut/Framework/MASShortcutView+Bindings.m create mode 100644 Pods/MASShortcut/Framework/MASShortcutView.h create mode 100644 Pods/MASShortcut/Framework/MASShortcutView.m create mode 100644 Pods/MASShortcut/Framework/Shortcut.h create mode 100644 Pods/MASShortcut/LICENSE create mode 100644 Pods/MASShortcut/README.md create mode 100644 Pods/MASShortcut/cs.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/de.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/en.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/es.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/fr.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/it.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/ja.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/ko.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/nl.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/pl.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/ru.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/zh-Hans.lproj/Localizable.strings create mode 100644 Pods/MASShortcut/zh-Hant.lproj/Localizable.strings create mode 100644 Pods/Target Support Files/MASShortcut/Info.plist create mode 100644 Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m create mode 100644 Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch create mode 100644 Pods/Target Support Files/MASShortcut/MASShortcut-umbrella.h create mode 100644 Pods/Target Support Files/MASShortcut/MASShortcut.modulemap create mode 100644 Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig create mode 100644 Pods/Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist diff --git a/Podfile b/Podfile index 7f52142..2ff3fcf 100644 --- a/Podfile +++ b/Podfile @@ -8,6 +8,7 @@ target 'ShadowsocksX-NG' do # Pods for ShadowsocksX-NG pod 'Alamofire', '~> 4.2.0' pod "GCDWebServer", "~> 3.0" + pod 'MASShortcut', '~> 2' target 'ShadowsocksX-NGTests' do inherit! :search_paths diff --git a/Podfile.lock b/Podfile.lock index 539ffd5..0fde6da 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -4,17 +4,20 @@ PODS: - GCDWebServer (3.3.3): - GCDWebServer/Core (= 3.3.3) - GCDWebServer/Core (3.3.3) + - MASShortcut (2.3.6) DEPENDENCIES: - Alamofire (~> 4.2.0) - BRLOptionParser (~> 0.3.1) - GCDWebServer (~> 3.0) + - MASShortcut (~> 2) SPEC CHECKSUMS: Alamofire: aa2e09d871c9160ac53c90e83c68064a94e3dfbe BRLOptionParser: a03256a8ff003ca1f5376c55f55f210e085a3958 GCDWebServer: 1c39a1f0763e4eb492bee021e4270fce097d3555 + MASShortcut: 9c215e8a8a78f3d01ce56da48e2730ab66b538fa -PODFILE CHECKSUM: d717746ef98bb719d87cee4fc334a392005fd32e +PODFILE CHECKSUM: e8b6cac515675274e39470f4662a5082eedee9e8 -COCOAPODS: 1.2.0.beta.1 +COCOAPODS: 1.2.0 diff --git a/Pods/MASShortcut/Framework/MASDictionaryTransformer.h b/Pods/MASShortcut/Framework/MASDictionaryTransformer.h new file mode 100644 index 0000000..6e53fd8 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASDictionaryTransformer.h @@ -0,0 +1,19 @@ +extern NSString *const MASDictionaryTransformerName; + +/** + Converts shortcuts for storage in user defaults. + + User defaults can’t stored custom types directly, they have to + be serialized to `NSData` or some other supported type like an + `NSDictionary`. In Cocoa Bindings, the conversion can be done + using value transformers like this one. + + There’s a built-in transformer (`NSKeyedUnarchiveFromDataTransformerName`) + that converts any `NSCoding` types to `NSData`, but with shortcuts + it makes sense to use a dictionary instead – the defaults look better + when inspected with the `defaults` command-line utility and the + format is compatible with an older sortcut library called Shortcut + Recorder. +*/ +@interface MASDictionaryTransformer : NSValueTransformer +@end diff --git a/Pods/MASShortcut/Framework/MASDictionaryTransformer.m b/Pods/MASShortcut/Framework/MASDictionaryTransformer.m new file mode 100644 index 0000000..9e4c82b --- /dev/null +++ b/Pods/MASShortcut/Framework/MASDictionaryTransformer.m @@ -0,0 +1,51 @@ +#import "MASDictionaryTransformer.h" +#import "MASShortcut.h" + +NSString *const MASDictionaryTransformerName = @"MASDictionaryTransformer"; + +static NSString *const MASKeyCodeKey = @"keyCode"; +static NSString *const MASModifierFlagsKey = @"modifierFlags"; + +@implementation MASDictionaryTransformer + ++ (BOOL) allowsReverseTransformation +{ + return YES; +} + +// Storing nil values as an empty dictionary lets us differ between +// “not available, use default value” and “explicitly set to none”. +// See http://stackoverflow.com/questions/5540760 for details. +- (NSDictionary*) reverseTransformedValue: (MASShortcut*) shortcut +{ + if (shortcut == nil) { + return [NSDictionary dictionary]; + } else { + return @{ + MASKeyCodeKey: @([shortcut keyCode]), + MASModifierFlagsKey: @([shortcut modifierFlags]) + }; + } +} + +- (MASShortcut*) transformedValue: (NSDictionary*) dictionary +{ + // We have to be defensive here as the value may come from user defaults. + if (![dictionary isKindOfClass:[NSDictionary class]]) { + return nil; + } + + id keyCodeBox = [dictionary objectForKey:MASKeyCodeKey]; + id modifierFlagsBox = [dictionary objectForKey:MASModifierFlagsKey]; + + SEL integerValue = @selector(integerValue); + if (![keyCodeBox respondsToSelector:integerValue] || ![modifierFlagsBox respondsToSelector:integerValue]) { + return nil; + } + + return [MASShortcut + shortcutWithKeyCode:[keyCodeBox integerValue] + modifierFlags:[modifierFlagsBox integerValue]]; +} + +@end diff --git a/Pods/MASShortcut/Framework/MASHotKey.h b/Pods/MASShortcut/Framework/MASHotKey.h new file mode 100644 index 0000000..1d267e4 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASHotKey.h @@ -0,0 +1,12 @@ +#import "MASShortcut.h" + +extern FourCharCode const MASHotKeySignature; + +@interface MASHotKey : NSObject + +@property(readonly) UInt32 carbonID; +@property(copy) dispatch_block_t action; + ++ (instancetype) registeredHotKeyWithShortcut: (MASShortcut*) shortcut; + +@end diff --git a/Pods/MASShortcut/Framework/MASHotKey.m b/Pods/MASShortcut/Framework/MASHotKey.m new file mode 100644 index 0000000..c5ab744 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASHotKey.m @@ -0,0 +1,44 @@ +#import "MASHotKey.h" + +FourCharCode const MASHotKeySignature = 'MASS'; + +@interface MASHotKey () +@property(assign) EventHotKeyRef hotKeyRef; +@property(assign) UInt32 carbonID; +@end + +@implementation MASHotKey + +- (instancetype) initWithShortcut: (MASShortcut*) shortcut +{ + self = [super init]; + + static UInt32 CarbonHotKeyID = 0; + + _carbonID = ++CarbonHotKeyID; + EventHotKeyID hotKeyID = { .signature = MASHotKeySignature, .id = _carbonID }; + + OSStatus status = RegisterEventHotKey([shortcut carbonKeyCode], [shortcut carbonFlags], + hotKeyID, GetEventDispatcherTarget(), 0, &_hotKeyRef); + + if (status != noErr) { + return nil; + } + + return self; +} + ++ (instancetype) registeredHotKeyWithShortcut: (MASShortcut*) shortcut +{ + return [[self alloc] initWithShortcut:shortcut]; +} + +- (void) dealloc +{ + if (_hotKeyRef) { + UnregisterEventHotKey(_hotKeyRef); + _hotKeyRef = NULL; + } +} + +@end diff --git a/Pods/MASShortcut/Framework/MASKeyCodes.h b/Pods/MASShortcut/Framework/MASKeyCodes.h new file mode 100644 index 0000000..b89cd3c --- /dev/null +++ b/Pods/MASShortcut/Framework/MASKeyCodes.h @@ -0,0 +1,44 @@ +#import +#import +#import "MASKeyMasks.h" + +// These glyphs are missed in Carbon.h +enum { + kMASShortcutGlyphEject = 0x23CF, + kMASShortcutGlyphClear = 0x2715, + kMASShortcutGlyphDeleteLeft = 0x232B, + kMASShortcutGlyphDeleteRight = 0x2326, + kMASShortcutGlyphLeftArrow = 0x2190, + kMASShortcutGlyphRightArrow = 0x2192, + kMASShortcutGlyphUpArrow = 0x2191, + kMASShortcutGlyphDownArrow = 0x2193, + kMASShortcutGlyphEscape = 0x238B, + kMASShortcutGlyphHelp = 0x003F, + kMASShortcutGlyphPageDown = 0x21DF, + kMASShortcutGlyphPageUp = 0x21DE, + kMASShortcutGlyphTabRight = 0x21E5, + kMASShortcutGlyphReturn = 0x2305, + kMASShortcutGlyphReturnR2L = 0x21A9, + kMASShortcutGlyphPadClear = 0x2327, + kMASShortcutGlyphNorthwestArrow = 0x2196, + kMASShortcutGlyphSoutheastArrow = 0x2198, +}; + +NS_INLINE NSString* NSStringFromMASKeyCode(unsigned short ch) +{ + return [NSString stringWithFormat:@"%C", ch]; +} + +NS_INLINE NSUInteger MASPickCocoaModifiers(NSUInteger flags) +{ + return (flags & (NSEventModifierFlagControl | NSEventModifierFlagShift | NSEventModifierFlagOption | NSEventModifierFlagCommand)); +} + +NS_INLINE UInt32 MASCarbonModifiersFromCocoaModifiers(NSUInteger cocoaFlags) +{ + return + (cocoaFlags & NSEventModifierFlagCommand ? cmdKey : 0) + | (cocoaFlags & NSEventModifierFlagOption ? optionKey : 0) + | (cocoaFlags & NSEventModifierFlagControl ? controlKey : 0) + | (cocoaFlags & NSEventModifierFlagShift ? shiftKey : 0); +} diff --git a/Pods/MASShortcut/Framework/MASKeyMasks.h b/Pods/MASShortcut/Framework/MASKeyMasks.h new file mode 100644 index 0000000..5813c1d --- /dev/null +++ b/Pods/MASShortcut/Framework/MASKeyMasks.h @@ -0,0 +1,18 @@ +#import + +// https://github.com/shpakovski/MASShortcut/issues/99 +// +// Long story short: NSControlKeyMask and friends were replaced with NSEventModifierFlagControl +// and similar in macOS Sierra. The project builds fine & clean, but including MASShortcut in +// a project with deployment target set to 10.12 results in several deprecation warnings because +// of the control masks. Simply replacing the old symbols with the new ones isn’t an option, +// since it breaks the build on older SDKs – in Travis, for example. +// +// It should be safe to remove this whole thing once the 10.12 SDK is ubiquitous. + +#if __MAC_OS_X_VERSION_MAX_ALLOWED < 101200 +#define NSEventModifierFlagCommand NSCommandKeyMask +#define NSEventModifierFlagControl NSControlKeyMask +#define NSEventModifierFlagOption NSAlternateKeyMask +#define NSEventModifierFlagShift NSShiftKeyMask +#endif diff --git a/Pods/MASShortcut/Framework/MASLocalization.h b/Pods/MASShortcut/Framework/MASLocalization.h new file mode 100644 index 0000000..466a969 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASLocalization.h @@ -0,0 +1,13 @@ +/** + Reads a localized string from the framework’s bundle. + + Normally you would use NSLocalizedString to read the localized + strings, but that’s just a shortcut for loading the strings from + the main bundle. And once the framework ends up in an app, the + main bundle will be the app’s bundle and won’t contain our strings. + So we introduced this helper function that makes sure to load the + strings from the framework’s bundle. Please avoid using + NSLocalizedString throughout the framework, it wouldn’t work + properly. +*/ +NSString *MASLocalizedString(NSString *key, NSString *comment); \ No newline at end of file diff --git a/Pods/MASShortcut/Framework/MASLocalization.m b/Pods/MASShortcut/Framework/MASLocalization.m new file mode 100644 index 0000000..5e119a7 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASLocalization.m @@ -0,0 +1,34 @@ +#import "MASLocalization.h" +#import "MASShortcut.h" + +static NSString *const MASLocalizationTableName = @"Localizable"; +static NSString *const MASPlaceholderLocalizationString = @"XXX"; + +// The CocoaPods trickery here is needed because when the code +// is built as a part of CocoaPods, it won’t make a separate framework +// and the Localized.strings file won’t be bundled correctly. +// See https://github.com/shpakovski/MASShortcut/issues/74 +NSString *MASLocalizedString(NSString *key, NSString *comment) { + static NSBundle *localizationBundle = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *frameworkBundle = [NSBundle bundleForClass:[MASShortcut class]]; + // first we'll check if resources bundle was copied to MASShortcut framework bundle when !use_frameworks option is active + NSURL *cocoaPodsBundleURL = [frameworkBundle URLForResource:@"MASShortcut" withExtension:@"bundle"]; + if (cocoaPodsBundleURL) { + localizationBundle = [NSBundle bundleWithURL: cocoaPodsBundleURL]; + } else { + // trying to fetch cocoapods bundle from main bundle + cocoaPodsBundleURL = [[NSBundle mainBundle] URLForResource: @"MASShortcut" withExtension:@"bundle"]; + if (cocoaPodsBundleURL) { + localizationBundle = [NSBundle bundleWithURL: cocoaPodsBundleURL]; + } else { + // fallback to framework bundle + localizationBundle = frameworkBundle; + } + } + }); + return [localizationBundle localizedStringForKey:key + value:MASPlaceholderLocalizationString + table:MASLocalizationTableName]; +} diff --git a/Pods/MASShortcut/Framework/MASShortcut.h b/Pods/MASShortcut/Framework/MASShortcut.h new file mode 100644 index 0000000..8f420e4 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcut.h @@ -0,0 +1,81 @@ +#import "MASKeyCodes.h" + +/** + A model class to hold a key combination. + + This class just represents a combination of keys. It does not care if + the combination is valid or can be used as a hotkey, it doesn’t watch + the input system for the shortcut appearance, nor it does access user + defaults. +*/ +@interface MASShortcut : NSObject + +/** + The virtual key code for the keyboard key. + + Hardware independent, same as in `NSEvent`. See `Events.h` in the HIToolbox + framework for a complete list, or Command-click this symbol: `kVK_ANSI_A`. +*/ +@property (nonatomic, readonly) NSUInteger keyCode; + +/** + Cocoa keyboard modifier flags. + + Same as in `NSEvent`: `NSCommandKeyMask`, `NSAlternateKeyMask`, etc. +*/ +@property (nonatomic, readonly) NSUInteger modifierFlags; + +/** + Same as `keyCode`, just a different type. +*/ +@property (nonatomic, readonly) UInt32 carbonKeyCode; + +/** + Carbon modifier flags. + + A bit sum of `cmdKey`, `optionKey`, etc. +*/ +@property (nonatomic, readonly) UInt32 carbonFlags; + +/** + A string representing the “key” part of a shortcut, like the `5` in `⌘5`. + + @warning The value may change depending on the active keyboard layout. + For example for the `^2` keyboard shortcut (`kVK_ANSI_2+NSControlKeyMask` + to be precise) the `keyCodeString` is `2` on the US keyboard, but `ě` when + the Czech keyboard layout is active. See the spec for details. +*/ +@property (nonatomic, readonly) NSString *keyCodeString; + +/** + A key-code string used in key equivalent matching. + + For precise meaning of “key equivalents” see the `keyEquivalent` + property of `NSMenuItem`. Here the string is used to support shortcut + validation (“is the shortcut already taken in this menu?”) and + for display in `NSMenu`. + + The value of this property may differ from `keyCodeString`. For example + the Russian keyboard has a `Г` (Ge) Cyrillic character in place of the + latin `U` key. This means you can create a `^Г` shortcut, but in menus + that’s always displayed as `^U`. So the `keyCodeString` returns `Г` + and `keyCodeStringForKeyEquivalent` returns `U`. +*/ +@property (nonatomic, readonly) NSString *keyCodeStringForKeyEquivalent; + +/** + A string representing the shortcut modifiers, like the `⌘` in `⌘5`. +*/ +@property (nonatomic, readonly) NSString *modifierFlagsString; + +- (instancetype)initWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags; ++ (instancetype)shortcutWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags; + +/** + Creates a new shortcut from an `NSEvent` object. + + This is just a convenience initializer that reads the key code and modifiers from an `NSEvent`. +*/ ++ (instancetype)shortcutWithEvent:(NSEvent *)anEvent; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcut.m b/Pods/MASShortcut/Framework/MASShortcut.m new file mode 100644 index 0000000..511f2b2 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcut.m @@ -0,0 +1,242 @@ +#import "MASShortcut.h" +#import "MASLocalization.h" + +static NSString *const MASShortcutKeyCode = @"KeyCode"; +static NSString *const MASShortcutModifierFlags = @"ModifierFlags"; + +@implementation MASShortcut + +#pragma mark Initialization + +- (instancetype)initWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags +{ + self = [super init]; + if (self) { + _keyCode = code; + _modifierFlags = MASPickCocoaModifiers(flags); + } + return self; +} + ++ (instancetype)shortcutWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags +{ + return [[self alloc] initWithKeyCode:code modifierFlags:flags]; +} + ++ (instancetype)shortcutWithEvent:(NSEvent *)event +{ + return [[self alloc] initWithKeyCode:event.keyCode modifierFlags:event.modifierFlags]; +} + +#pragma mark Shortcut Accessors + +- (UInt32)carbonKeyCode +{ + return (self.keyCode == NSNotFound ? 0 : (UInt32)self.keyCode); +} + +- (UInt32)carbonFlags +{ + return MASCarbonModifiersFromCocoaModifiers(self.modifierFlags); +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"%@%@", self.modifierFlagsString, self.keyCodeString]; +} + +- (NSString *)keyCodeStringForKeyEquivalent +{ + NSString *keyCodeString = self.keyCodeString; + if (keyCodeString.length > 1) { + switch (self.keyCode) { + case kVK_F1: return NSStringFromMASKeyCode(0xF704); + case kVK_F2: return NSStringFromMASKeyCode(0xF705); + case kVK_F3: return NSStringFromMASKeyCode(0xF706); + case kVK_F4: return NSStringFromMASKeyCode(0xF707); + case kVK_F5: return NSStringFromMASKeyCode(0xF708); + case kVK_F6: return NSStringFromMASKeyCode(0xF709); + case kVK_F7: return NSStringFromMASKeyCode(0xF70a); + case kVK_F8: return NSStringFromMASKeyCode(0xF70b); + case kVK_F9: return NSStringFromMASKeyCode(0xF70c); + case kVK_F10: return NSStringFromMASKeyCode(0xF70d); + case kVK_F11: return NSStringFromMASKeyCode(0xF70e); + case kVK_F12: return NSStringFromMASKeyCode(0xF70f); + // From this point down I am guessing F13 etc come sequentially, I don't have a keyboard to test. + case kVK_F13: return NSStringFromMASKeyCode(0xF710); + case kVK_F14: return NSStringFromMASKeyCode(0xF711); + case kVK_F15: return NSStringFromMASKeyCode(0xF712); + case kVK_F16: return NSStringFromMASKeyCode(0xF713); + case kVK_F17: return NSStringFromMASKeyCode(0xF714); + case kVK_F18: return NSStringFromMASKeyCode(0xF715); + case kVK_F19: return NSStringFromMASKeyCode(0xF716); + case kVK_Space: return NSStringFromMASKeyCode(0x20); + default: return @""; + } + } + return keyCodeString.lowercaseString; +} + +- (NSString *)keyCodeString +{ + // Some key codes don't have an equivalent + switch (self.keyCode) { + case NSNotFound: return @""; + case kVK_F1: return @"F1"; + case kVK_F2: return @"F2"; + case kVK_F3: return @"F3"; + case kVK_F4: return @"F4"; + case kVK_F5: return @"F5"; + case kVK_F6: return @"F6"; + case kVK_F7: return @"F7"; + case kVK_F8: return @"F8"; + case kVK_F9: return @"F9"; + case kVK_F10: return @"F10"; + case kVK_F11: return @"F11"; + case kVK_F12: return @"F12"; + case kVK_F13: return @"F13"; + case kVK_F14: return @"F14"; + case kVK_F15: return @"F15"; + case kVK_F16: return @"F16"; + case kVK_F17: return @"F17"; + case kVK_F18: return @"F18"; + case kVK_F19: return @"F19"; + case kVK_Space: return MASLocalizedString(@"Space", @"Shortcut glyph name for SPACE key"); + case kVK_Escape: return NSStringFromMASKeyCode(kMASShortcutGlyphEscape); + case kVK_Delete: return NSStringFromMASKeyCode(kMASShortcutGlyphDeleteLeft); + case kVK_ForwardDelete: return NSStringFromMASKeyCode(kMASShortcutGlyphDeleteRight); + case kVK_LeftArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphLeftArrow); + case kVK_RightArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphRightArrow); + case kVK_UpArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphUpArrow); + case kVK_DownArrow: return NSStringFromMASKeyCode(kMASShortcutGlyphDownArrow); + case kVK_Help: return NSStringFromMASKeyCode(kMASShortcutGlyphHelp); + case kVK_PageUp: return NSStringFromMASKeyCode(kMASShortcutGlyphPageUp); + case kVK_PageDown: return NSStringFromMASKeyCode(kMASShortcutGlyphPageDown); + case kVK_Tab: return NSStringFromMASKeyCode(kMASShortcutGlyphTabRight); + case kVK_Return: return NSStringFromMASKeyCode(kMASShortcutGlyphReturnR2L); + + // Keypad + case kVK_ANSI_Keypad0: return @"0"; + case kVK_ANSI_Keypad1: return @"1"; + case kVK_ANSI_Keypad2: return @"2"; + case kVK_ANSI_Keypad3: return @"3"; + case kVK_ANSI_Keypad4: return @"4"; + case kVK_ANSI_Keypad5: return @"5"; + case kVK_ANSI_Keypad6: return @"6"; + case kVK_ANSI_Keypad7: return @"7"; + case kVK_ANSI_Keypad8: return @"8"; + case kVK_ANSI_Keypad9: return @"9"; + case kVK_ANSI_KeypadDecimal: return @"."; + case kVK_ANSI_KeypadMultiply: return @"*"; + case kVK_ANSI_KeypadPlus: return @"+"; + case kVK_ANSI_KeypadClear: return NSStringFromMASKeyCode(kMASShortcutGlyphPadClear); + case kVK_ANSI_KeypadDivide: return @"/"; + case kVK_ANSI_KeypadEnter: return NSStringFromMASKeyCode(kMASShortcutGlyphReturn); + case kVK_ANSI_KeypadMinus: return @"–"; + case kVK_ANSI_KeypadEquals: return @"="; + + // Hardcode + case 119: return NSStringFromMASKeyCode(kMASShortcutGlyphSoutheastArrow); + case 115: return NSStringFromMASKeyCode(kMASShortcutGlyphNorthwestArrow); + } + + // Everything else should be printable so look it up in the current ASCII capable keyboard layout + OSStatus error = noErr; + NSString *keystroke = nil; + TISInputSourceRef inputSource = TISCopyCurrentASCIICapableKeyboardLayoutInputSource(); + if (inputSource) { + CFDataRef layoutDataRef = TISGetInputSourceProperty(inputSource, kTISPropertyUnicodeKeyLayoutData); + if (layoutDataRef) { + UCKeyboardLayout *layoutData = (UCKeyboardLayout *)CFDataGetBytePtr(layoutDataRef); + UniCharCount length = 0; + UniChar chars[256] = { 0 }; + UInt32 deadKeyState = 0; + error = UCKeyTranslate(layoutData, (UInt16)self.keyCode, kUCKeyActionDisplay, 0, // No modifiers + LMGetKbdType(), kUCKeyTranslateNoDeadKeysMask, &deadKeyState, + sizeof(chars) / sizeof(UniChar), &length, chars); + keystroke = ((error == noErr) && length ? [NSString stringWithCharacters:chars length:length] : @""); + } + CFRelease(inputSource); + } + + // Validate keystroke + if (keystroke.length) { + static NSMutableCharacterSet *validChars = nil; + if (validChars == nil) { + validChars = [[NSMutableCharacterSet alloc] init]; + [validChars formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; + [validChars formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; + [validChars formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]]; + } + for (NSUInteger i = 0, length = keystroke.length; i < length; i++) { + if (![validChars characterIsMember:[keystroke characterAtIndex:i]]) { + keystroke = @""; + break; + } + } + } + + // Finally, we've got a shortcut! + return keystroke.uppercaseString; +} + +- (NSString *)modifierFlagsString +{ + unichar chars[4]; + NSUInteger count = 0; + // These are in the same order as the menu manager shows them + if (self.modifierFlags & NSControlKeyMask) chars[count++] = kControlUnicode; + if (self.modifierFlags & NSAlternateKeyMask) chars[count++] = kOptionUnicode; + if (self.modifierFlags & NSShiftKeyMask) chars[count++] = kShiftUnicode; + if (self.modifierFlags & NSCommandKeyMask) chars[count++] = kCommandUnicode; + return (count ? [NSString stringWithCharacters:chars length:count] : @""); +} + +#pragma mark NSObject + +- (BOOL) isEqual: (MASShortcut*) object +{ + return [object isKindOfClass:[self class]] + && (object.keyCode == self.keyCode) + && (object.modifierFlags == self.modifierFlags); +} + +- (NSUInteger) hash +{ + return self.keyCode + self.modifierFlags; +} + +#pragma mark NSCoding + +- (void)encodeWithCoder:(NSCoder *)coder +{ + [coder encodeInteger:(self.keyCode != NSNotFound ? (NSInteger)self.keyCode : - 1) forKey:MASShortcutKeyCode]; + [coder encodeInteger:(NSInteger)self.modifierFlags forKey:MASShortcutModifierFlags]; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + self = [super init]; + if (self) { + NSInteger code = [decoder decodeIntegerForKey:MASShortcutKeyCode]; + _keyCode = (code < 0 ? NSNotFound : (NSUInteger)code); + _modifierFlags = [decoder decodeIntegerForKey:MASShortcutModifierFlags]; + } + return self; +} + +#pragma mark NSSecureCoding + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +#pragma mark NSCopying + +- (instancetype) copyWithZone:(NSZone *)zone +{ + return [[self class] shortcutWithKeyCode:_keyCode modifierFlags:_modifierFlags]; +} + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcut.modulemap b/Pods/MASShortcut/Framework/MASShortcut.modulemap new file mode 100644 index 0000000..e6307a1 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcut.modulemap @@ -0,0 +1,6 @@ +framework module MASShortcut { + umbrella header "Shortcut.h" + + export * + module * { export * } +} diff --git a/Pods/MASShortcut/Framework/MASShortcutBinder.h b/Pods/MASShortcut/Framework/MASShortcutBinder.h new file mode 100644 index 0000000..e7406de --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutBinder.h @@ -0,0 +1,67 @@ +#import "MASShortcutMonitor.h" + +/** + Binds actions to user defaults keys. + + If you store shortcuts in user defaults (for example by binding + a `MASShortcutView` to user defaults), you can use this class to + connect an action directly to a user defaults key. If the shortcut + stored under the key changes, the action will get automatically + updated to the new one. + + This class is mostly a wrapper around a `MASShortcutMonitor`. It + watches the changes in user defaults and updates the shortcut monitor + accordingly with the new shortcuts. +*/ +@interface MASShortcutBinder : NSObject + +/** + A convenience shared instance. + + You may use it so that you don’t have to manage an instance by hand, + but it’s perfectly fine to allocate and use a separate instance instead. +*/ ++ (instancetype) sharedBinder; + +/** + The underlying shortcut monitor. +*/ +@property(strong) MASShortcutMonitor *shortcutMonitor; + +/** + Binding options customizing the access to user defaults. + + As an example, you can use `NSValueTransformerNameBindingOption` to customize + the storage format used for the shortcuts. By default the shortcuts are converted + from `NSData` (`NSKeyedUnarchiveFromDataTransformerName`). Note that if the + binder is to work with `MASShortcutView`, both object have to use the same storage + format. +*/ +@property(copy) NSDictionary *bindingOptions; + +/** + Binds given action to a shortcut stored under the given defaults key. + + In other words, no matter what shortcut you store under the given key, + pressing it will always trigger the given action. +*/ +- (void) bindShortcutWithDefaultsKey: (NSString*) defaultsKeyName toAction: (dispatch_block_t) action; + +/** + Disconnect the binding between user defaults and action. + + In other words, the shortcut stored under the given key will no longer trigger an action. +*/ +- (void) breakBindingWithDefaultsKey: (NSString*) defaultsKeyName; + +/** + Register default shortcuts in user defaults. + + This is a convenience frontent to `[NSUserDefaults registerDefaults]`. + The dictionary should contain a map of user defaults’ keys to appropriate + keyboard shortcuts. The shortcuts will be transformed according to + `bindingOptions` and registered using `registerDefaults`. +*/ +- (void) registerDefaultShortcuts: (NSDictionary*) defaultShortcuts; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutBinder.m b/Pods/MASShortcut/Framework/MASShortcutBinder.m new file mode 100644 index 0000000..4c0d7f9 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutBinder.m @@ -0,0 +1,121 @@ +#import "MASShortcutBinder.h" +#import "MASShortcut.h" + +@interface MASShortcutBinder () +@property(strong) NSMutableDictionary *actions; +@property(strong) NSMutableDictionary *shortcuts; +@end + +@implementation MASShortcutBinder + +#pragma mark Initialization + +- (id) init +{ + self = [super init]; + [self setActions:[NSMutableDictionary dictionary]]; + [self setShortcuts:[NSMutableDictionary dictionary]]; + [self setShortcutMonitor:[MASShortcutMonitor sharedMonitor]]; + [self setBindingOptions:@{NSValueTransformerNameBindingOption: NSKeyedUnarchiveFromDataTransformerName}]; + return self; +} + +- (void) dealloc +{ + for (NSString *bindingName in [_actions allKeys]) { + [self unbind:bindingName]; + } +} + ++ (instancetype) sharedBinder +{ + static dispatch_once_t once; + static MASShortcutBinder *sharedInstance; + dispatch_once(&once, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +#pragma mark Registration + +- (void) bindShortcutWithDefaultsKey: (NSString*) defaultsKeyName toAction: (dispatch_block_t) action +{ + NSAssert([defaultsKeyName rangeOfString:@"."].location == NSNotFound, + @"Illegal character in binding name (“.”), please see http://git.io/x5YS."); + NSAssert([defaultsKeyName rangeOfString:@" "].location == NSNotFound, + @"Illegal character in binding name (“ ”), please see http://git.io/x5YS."); + [_actions setObject:[action copy] forKey:defaultsKeyName]; + [self bind:defaultsKeyName + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:[@"values." stringByAppendingString:defaultsKeyName] + options:_bindingOptions]; +} + +- (void) breakBindingWithDefaultsKey: (NSString*) defaultsKeyName +{ + [_shortcutMonitor unregisterShortcut:[_shortcuts objectForKey:defaultsKeyName]]; + [_shortcuts removeObjectForKey:defaultsKeyName]; + [_actions removeObjectForKey:defaultsKeyName]; + [self unbind:defaultsKeyName]; +} + +- (void) registerDefaultShortcuts: (NSDictionary*) defaultShortcuts +{ + NSValueTransformer *transformer = [_bindingOptions valueForKey:NSValueTransformerBindingOption]; + if (transformer == nil) { + NSString *transformerName = [_bindingOptions valueForKey:NSValueTransformerNameBindingOption]; + if (transformerName) { + transformer = [NSValueTransformer valueTransformerForName:transformerName]; + } + } + + NSAssert(transformer != nil, @"Can’t register default shortcuts without a transformer."); + + [defaultShortcuts enumerateKeysAndObjectsUsingBlock:^(NSString *defaultsKey, MASShortcut *shortcut, BOOL *stop) { + id value = [transformer reverseTransformedValue:shortcut]; + [[NSUserDefaults standardUserDefaults] registerDefaults:@{defaultsKey:value}]; + }]; +} + +#pragma mark Bindings + +- (BOOL) isRegisteredAction: (NSString*) name +{ + return !![_actions objectForKey:name]; +} + +- (id) valueForUndefinedKey: (NSString*) key +{ + return [self isRegisteredAction:key] ? + [_shortcuts objectForKey:key] : + [super valueForUndefinedKey:key]; +} + +- (void) setValue: (id) value forUndefinedKey: (NSString*) key +{ + if (![self isRegisteredAction:key]) { + [super setValue:value forUndefinedKey:key]; + return; + } + + MASShortcut *newShortcut = value; + MASShortcut *currentShortcut = [_shortcuts objectForKey:key]; + + // Unbind previous shortcut if any + if (currentShortcut != nil) { + [_shortcutMonitor unregisterShortcut:currentShortcut]; + } + + // Just deleting the old shortcut + if (newShortcut == nil) { + [_shortcuts removeObjectForKey:key]; + return; + } + + // Bind new shortcut + [_shortcuts setObject:newShortcut forKey:key]; + [_shortcutMonitor registerShortcut:newShortcut withAction:[_actions objectForKey:key]]; +} + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutMonitor.h b/Pods/MASShortcut/Framework/MASShortcutMonitor.h new file mode 100644 index 0000000..dc3d458 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutMonitor.h @@ -0,0 +1,27 @@ +#import "MASShortcut.h" + +/** + Executes action when a shortcut is pressed. + + There can only be one instance of this class, otherwise things + will probably not work. (There’s a Carbon event handler inside + and there can only be one Carbon event handler of a given type.) +*/ +@interface MASShortcutMonitor : NSObject + +- (instancetype) init __unavailable; ++ (instancetype) sharedMonitor; + +/** + Register a shortcut along with an action. + + Attempting to insert an already registered shortcut probably won’t work. + It may burn your house or cut your fingers. You have been warned. +*/ +- (BOOL) registerShortcut: (MASShortcut*) shortcut withAction: (dispatch_block_t) action; +- (BOOL) isShortcutRegistered: (MASShortcut*) shortcut; + +- (void) unregisterShortcut: (MASShortcut*) shortcut; +- (void) unregisterAllShortcuts; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutMonitor.m b/Pods/MASShortcut/Framework/MASShortcutMonitor.m new file mode 100644 index 0000000..fce8022 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutMonitor.m @@ -0,0 +1,108 @@ +#import "MASShortcutMonitor.h" +#import "MASHotKey.h" + +@interface MASShortcutMonitor () +@property(assign) EventHandlerRef eventHandlerRef; +@property(strong) NSMutableDictionary *hotKeys; +@end + +static OSStatus MASCarbonEventCallback(EventHandlerCallRef, EventRef, void*); + +@implementation MASShortcutMonitor + +#pragma mark Initialization + +- (instancetype) init +{ + self = [super init]; + [self setHotKeys:[NSMutableDictionary dictionary]]; + EventTypeSpec hotKeyPressedSpec = { .eventClass = kEventClassKeyboard, .eventKind = kEventHotKeyPressed }; + OSStatus status = InstallEventHandler(GetEventDispatcherTarget(), MASCarbonEventCallback, + 1, &hotKeyPressedSpec, (__bridge void*)self, &_eventHandlerRef); + if (status != noErr) { + return nil; + } + return self; +} + +- (void) dealloc +{ + if (_eventHandlerRef) { + RemoveEventHandler(_eventHandlerRef); + _eventHandlerRef = NULL; + } +} + ++ (instancetype) sharedMonitor +{ + static dispatch_once_t once; + static MASShortcutMonitor *sharedInstance; + dispatch_once(&once, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +#pragma mark Registration + +- (BOOL) registerShortcut: (MASShortcut*) shortcut withAction: (dispatch_block_t) action +{ + MASHotKey *hotKey = [MASHotKey registeredHotKeyWithShortcut:shortcut]; + if (hotKey) { + [hotKey setAction:action]; + [_hotKeys setObject:hotKey forKey:shortcut]; + return YES; + } else { + return NO; + } +} + +- (void) unregisterShortcut: (MASShortcut*) shortcut +{ + if (shortcut) { + [_hotKeys removeObjectForKey:shortcut]; + } +} + +- (void) unregisterAllShortcuts +{ + [_hotKeys removeAllObjects]; +} + +- (BOOL) isShortcutRegistered: (MASShortcut*) shortcut +{ + return !![_hotKeys objectForKey:shortcut]; +} + +#pragma mark Event Handling + +- (void) handleEvent: (EventRef) event +{ + if (GetEventClass(event) != kEventClassKeyboard) { + return; + } + + EventHotKeyID hotKeyID; + OSStatus status = GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyID), NULL, &hotKeyID); + if (status != noErr || hotKeyID.signature != MASHotKeySignature) { + return; + } + + [_hotKeys enumerateKeysAndObjectsUsingBlock:^(MASShortcut *shortcut, MASHotKey *hotKey, BOOL *stop) { + if (hotKeyID.id == [hotKey carbonID]) { + if ([hotKey action]) { + dispatch_async(dispatch_get_main_queue(), [hotKey action]); + } + *stop = YES; + } + }]; +} + +@end + +static OSStatus MASCarbonEventCallback(EventHandlerCallRef _, EventRef event, void *context) +{ + MASShortcutMonitor *dispatcher = (__bridge id)context; + [dispatcher handleEvent:event]; + return noErr; +} diff --git a/Pods/MASShortcut/Framework/MASShortcutValidator.h b/Pods/MASShortcut/Framework/MASShortcutValidator.h new file mode 100644 index 0000000..95fe828 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutValidator.h @@ -0,0 +1,29 @@ +#import "MASShortcut.h" + +/** + This class is used by the recording control to tell which shortcuts are acceptable. + + There are two kinds of shortcuts that are not considered acceptable: shortcuts that + are too simple (like single letter keys) and shortcuts that are already used by the + operating system. +*/ +@interface MASShortcutValidator : NSObject + +/** + Set to `YES` if you want to accept Option-something shortcuts. + + `NO` by default, since Option-something shortcuts are often used by system, + for example Option-G will type the © sign. This also applies to Option-Shift + shortcuts – in other words, shortcut recorder will not accept shortcuts like + Option-Shift-K by default. (Again, since Option-Shift-K inserts the Apple + logo sign by default.) +*/ +@property(assign) BOOL allowAnyShortcutWithOptionModifier; + ++ (instancetype) sharedValidator; + +- (BOOL) isShortcutValid: (MASShortcut*) shortcut; +- (BOOL) isShortcut: (MASShortcut*) shortcut alreadyTakenInMenu: (NSMenu*) menu explanation: (NSString**) explanation; +- (BOOL) isShortcutAlreadyTakenBySystem: (MASShortcut*) shortcut explanation: (NSString**) explanation; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutValidator.m b/Pods/MASShortcut/Framework/MASShortcutValidator.m new file mode 100644 index 0000000..b14815c --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutValidator.m @@ -0,0 +1,112 @@ +#import "MASShortcutValidator.h" +#import "MASLocalization.h" + +@implementation MASShortcutValidator + ++ (instancetype) sharedValidator +{ + static dispatch_once_t once; + static MASShortcutValidator *sharedInstance; + dispatch_once(&once, ^{ + sharedInstance = [[self alloc] init]; + }); + return sharedInstance; +} + +- (BOOL) isShortcutValid: (MASShortcut*) shortcut +{ + NSUInteger keyCode = [shortcut keyCode]; + NSUInteger modifiers = [shortcut modifierFlags]; + + // Allow any function key with any combination of modifiers + BOOL includesFunctionKey = ((keyCode == kVK_F1) || (keyCode == kVK_F2) || (keyCode == kVK_F3) || (keyCode == kVK_F4) || + (keyCode == kVK_F5) || (keyCode == kVK_F6) || (keyCode == kVK_F7) || (keyCode == kVK_F8) || + (keyCode == kVK_F9) || (keyCode == kVK_F10) || (keyCode == kVK_F11) || (keyCode == kVK_F12) || + (keyCode == kVK_F13) || (keyCode == kVK_F14) || (keyCode == kVK_F15) || (keyCode == kVK_F16) || + (keyCode == kVK_F17) || (keyCode == kVK_F18) || (keyCode == kVK_F19) || (keyCode == kVK_F20)); + if (includesFunctionKey) return YES; + + // Do not allow any other key without modifiers + BOOL hasModifierFlags = (modifiers > 0); + if (!hasModifierFlags) return NO; + + // Allow any hotkey containing Control or Command modifier + BOOL includesCommand = ((modifiers & NSCommandKeyMask) > 0); + BOOL includesControl = ((modifiers & NSControlKeyMask) > 0); + if (includesCommand || includesControl) return YES; + + // Allow Option key only in selected cases + BOOL includesOption = ((modifiers & NSAlternateKeyMask) > 0); + if (includesOption) { + + // Always allow Option-Space and Option-Escape because they do not have any bind system commands + if ((keyCode == kVK_Space) || (keyCode == kVK_Escape)) return YES; + + // Allow Option modifier with any key even if it will break the system binding + if (_allowAnyShortcutWithOptionModifier) return YES; + } + + // The hotkey does not have any modifiers or violates system bindings + return NO; +} + +- (BOOL) isShortcut: (MASShortcut*) shortcut alreadyTakenInMenu: (NSMenu*) menu explanation: (NSString**) explanation +{ + NSString *keyEquivalent = [shortcut keyCodeStringForKeyEquivalent]; + NSUInteger flags = [shortcut modifierFlags]; + + for (NSMenuItem *menuItem in menu.itemArray) { + if (menuItem.hasSubmenu && [self isShortcut:shortcut alreadyTakenInMenu:[menuItem submenu] explanation:explanation]) return YES; + + BOOL equalFlags = (MASPickCocoaModifiers(menuItem.keyEquivalentModifierMask) == flags); + BOOL equalHotkeyLowercase = [menuItem.keyEquivalent.lowercaseString isEqualToString:keyEquivalent]; + + // Check if the cases are different, we know ours is lower and that shift is included in our modifiers + // If theirs is capitol, we need to add shift to their modifiers + if (equalHotkeyLowercase && ![menuItem.keyEquivalent isEqualToString:keyEquivalent]) { + equalFlags = (MASPickCocoaModifiers(menuItem.keyEquivalentModifierMask | NSShiftKeyMask) == flags); + } + + if (equalFlags && equalHotkeyLowercase) { + if (explanation) { + *explanation = MASLocalizedString(@"This shortcut cannot be used because it is already used by the menu item ‘%@’.", + @"Message for alert when shortcut is already used"); + *explanation = [NSString stringWithFormat:*explanation, menuItem.title]; + } + return YES; + } + } + return NO; +} + +- (BOOL) isShortcutAlreadyTakenBySystem: (MASShortcut*) shortcut explanation: (NSString**) explanation +{ + CFArrayRef globalHotKeys; + if (CopySymbolicHotKeys(&globalHotKeys) == noErr) { + + // Enumerate all global hotkeys and check if any of them matches current shortcut + for (CFIndex i = 0, count = CFArrayGetCount(globalHotKeys); i < count; i++) { + CFDictionaryRef hotKeyInfo = CFArrayGetValueAtIndex(globalHotKeys, i); + CFNumberRef code = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyCode); + CFNumberRef flags = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyModifiers); + CFNumberRef enabled = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyEnabled); + + if (([(__bridge NSNumber *)code unsignedIntegerValue] == [shortcut keyCode]) && + ([(__bridge NSNumber *)flags unsignedIntegerValue] == [shortcut carbonFlags]) && + ([(__bridge NSNumber *)enabled boolValue])) { + + if (explanation) { + *explanation = MASLocalizedString(@"This combination cannot be used because it is already used by a system-wide " + @"keyboard shortcut.\nIf you really want to use this key combination, most shortcuts " + @"can be changed in the Keyboard & Mouse panel in System Preferences.", + @"Message for alert when shortcut is already used by the system"); + } + return YES; + } + } + CFRelease(globalHotKeys); + } + return [self isShortcut:shortcut alreadyTakenInMenu:[NSApp mainMenu] explanation:explanation]; +} + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutView+Bindings.h b/Pods/MASShortcut/Framework/MASShortcutView+Bindings.h new file mode 100644 index 0000000..01b2246 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutView+Bindings.h @@ -0,0 +1,25 @@ +#import "MASShortcutView.h" + +/** + A simplified interface to bind the recorder value to user defaults. + + You can bind the `shortcutValue` to user defaults using the standard + `bind:toObject:withKeyPath:options:` call, but since that’s a lot to type + and read, here’s a simpler option. + + Setting the `associatedUserDefaultsKey` binds the view’s shortcut value + to the given user defaults key. You can supply a value transformer to convert + values between user defaults and `MASShortcut`. If you don’t supply + a transformer, the `NSUnarchiveFromDataTransformerName` will be used + automatically. + + Set `associatedUserDefaultsKey` to `nil` to disconnect the binding. +*/ +@interface MASShortcutView (Bindings) + +@property(copy) NSString *associatedUserDefaultsKey; + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformer: (NSValueTransformer*) transformer; +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformerName: (NSString*) transformerName; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutView+Bindings.m b/Pods/MASShortcut/Framework/MASShortcutView+Bindings.m new file mode 100644 index 0000000..54c5111 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutView+Bindings.m @@ -0,0 +1,50 @@ +#import "MASShortcutView+Bindings.h" + +@implementation MASShortcutView (Bindings) + +- (NSString*) associatedUserDefaultsKey +{ + NSDictionary* bindingInfo = [self infoForBinding:MASShortcutBinding]; + if (bindingInfo != nil) { + NSString *keyPath = [bindingInfo objectForKey:NSObservedKeyPathKey]; + NSString *key = [keyPath stringByReplacingOccurrencesOfString:@"values." withString:@""]; + return key; + } else { + return nil; + } +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformer: (NSValueTransformer*) transformer +{ + // Break previous binding if any + NSString *currentKey = [self associatedUserDefaultsKey]; + if (currentKey != nil) { + [self unbind:currentKey]; + } + + // Stop if the new binding is nil + if (newKey == nil) { + return; + } + + NSDictionary *options = transformer ? + @{NSValueTransformerBindingOption:transformer} : + nil; + + [self bind:MASShortcutBinding + toObject:[NSUserDefaultsController sharedUserDefaultsController] + withKeyPath:[@"values." stringByAppendingString:newKey] + options:options]; +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey withTransformerName: (NSString*) transformerName +{ + [self setAssociatedUserDefaultsKey:newKey withTransformer:[NSValueTransformer valueTransformerForName:transformerName]]; +} + +- (void) setAssociatedUserDefaultsKey: (NSString*) newKey +{ + [self setAssociatedUserDefaultsKey:newKey withTransformerName:NSKeyedUnarchiveFromDataTransformerName]; +} + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutView.h b/Pods/MASShortcut/Framework/MASShortcutView.h new file mode 100644 index 0000000..656f4e4 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutView.h @@ -0,0 +1,26 @@ +@class MASShortcut, MASShortcutValidator; + +extern NSString *const MASShortcutBinding; + +typedef enum { + MASShortcutViewStyleDefault = 0, // Height = 19 px + MASShortcutViewStyleTexturedRect, // Height = 25 px + MASShortcutViewStyleRounded, // Height = 43 px + MASShortcutViewStyleFlat +} MASShortcutViewStyle; + +@interface MASShortcutView : NSView + +@property (nonatomic, strong) MASShortcut *shortcutValue; +@property (nonatomic, strong) MASShortcutValidator *shortcutValidator; +@property (nonatomic, getter = isRecording) BOOL recording; +@property (nonatomic, getter = isEnabled) BOOL enabled; +@property (nonatomic, copy) void (^shortcutValueChange)(MASShortcutView *sender); +@property (nonatomic, assign) MASShortcutViewStyle style; + +/// Returns custom class for drawing control. ++ (Class)shortcutCellClass; + +- (void)setAcceptsFirstResponder:(BOOL)value; + +@end diff --git a/Pods/MASShortcut/Framework/MASShortcutView.m b/Pods/MASShortcut/Framework/MASShortcutView.m new file mode 100644 index 0000000..8540e61 --- /dev/null +++ b/Pods/MASShortcut/Framework/MASShortcutView.m @@ -0,0 +1,615 @@ +#import "MASShortcutView.h" +#import "MASShortcutValidator.h" +#import "MASLocalization.h" + +NSString *const MASShortcutBinding = @"shortcutValue"; + +static const CGFloat MASHintButtonWidth = 23; +static const CGFloat MASButtonFontSize = 11; + +#pragma mark - + +@interface MASShortcutView () // Private accessors + +@property (nonatomic, getter = isHinting) BOOL hinting; +@property (nonatomic, copy) NSString *shortcutPlaceholder; +@property (nonatomic, assign) BOOL showsDeleteButton; + +@end + +#pragma mark - + +@implementation MASShortcutView { + NSButtonCell *_shortcutCell; + NSInteger _shortcutToolTipTag; + NSInteger _hintToolTipTag; + NSTrackingArea *_hintArea; + BOOL _acceptsFirstResponder; +} + +#pragma mark - + ++ (Class)shortcutCellClass +{ + return [NSButtonCell class]; +} + +- (id)initWithFrame:(CGRect)frameRect +{ + self = [super initWithFrame:frameRect]; + if (self) { + [self commonInit]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (self) { + [self commonInit]; + } + return self; +} + +- (void)commonInit +{ + _shortcutCell = [[[self.class shortcutCellClass] alloc] init]; + _shortcutCell.buttonType = NSPushOnPushOffButton; + _shortcutCell.font = [[NSFontManager sharedFontManager] convertFont:_shortcutCell.font toSize:MASButtonFontSize]; + _shortcutValidator = [MASShortcutValidator sharedValidator]; + _enabled = YES; + _showsDeleteButton = YES; + _acceptsFirstResponder = NO; + [self resetShortcutCellStyle]; +} + +- (void)dealloc +{ + [self activateEventMonitoring:NO]; + [self activateResignObserver:NO]; +} + +#pragma mark - Public accessors + +- (void)setEnabled:(BOOL)flag +{ + if (_enabled != flag) { + _enabled = flag; + [self updateTrackingAreas]; + self.recording = NO; + [self setNeedsDisplay:YES]; + } +} + +- (void)setStyle:(MASShortcutViewStyle)newStyle +{ + if (_style != newStyle) { + _style = newStyle; + [self resetShortcutCellStyle]; + [self setNeedsDisplay:YES]; + } +} + +- (void)resetShortcutCellStyle +{ + switch (_style) { + case MASShortcutViewStyleDefault: { + _shortcutCell.bezelStyle = NSRoundRectBezelStyle; + break; + } + case MASShortcutViewStyleTexturedRect: { + _shortcutCell.bezelStyle = NSTexturedRoundedBezelStyle; + break; + } + case MASShortcutViewStyleRounded: { + _shortcutCell.bezelStyle = NSRoundedBezelStyle; + break; + } + case MASShortcutViewStyleFlat: { + self.wantsLayer = YES; + _shortcutCell.backgroundColor = [NSColor clearColor]; + _shortcutCell.bordered = NO; + break; + } + } +} + +- (void)setRecording:(BOOL)flag +{ + // Only one recorder can be active at the moment + static MASShortcutView *currentRecorder = nil; + if (flag && (currentRecorder != self)) { + currentRecorder.recording = NO; + currentRecorder = flag ? self : nil; + } + + // Only enabled view supports recording + if (flag && !self.enabled) return; + + // Only care about changes in state + if (flag == _recording) return; + + _recording = flag; + self.shortcutPlaceholder = nil; + [self resetToolTips]; + [self activateEventMonitoring:_recording]; + [self activateResignObserver:_recording]; + [self setNeedsDisplay:YES]; + + // Give VoiceOver users feedback on the result. Requires at least 10.9 to run. + // We’re silencing the “tautological compare” warning here so that if someone + // takes the naked source files and compiles them with -Wall, the following + // NSAccessibilityPriorityKey comparison doesn’t cause a warning. See: + // https://github.com/shpakovski/MASShortcut/issues/76 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wtautological-compare" + if (_recording == NO && (&NSAccessibilityPriorityKey != NULL)) { + NSString* msg = _shortcutValue ? + MASLocalizedString(@"Shortcut set", @"VoiceOver: Shortcut set") : + MASLocalizedString(@"Shortcut cleared", @"VoiceOver: Shortcut cleared"); + NSDictionary *announcementInfo = @{ + NSAccessibilityAnnouncementKey : msg, + NSAccessibilityPriorityKey : @(NSAccessibilityPriorityHigh), + }; + NSAccessibilityPostNotificationWithUserInfo(self, NSAccessibilityAnnouncementRequestedNotification, announcementInfo); + } + #pragma clang diagnostic pop +} + +- (void)setShortcutValue:(MASShortcut *)shortcutValue +{ + _shortcutValue = shortcutValue; + [self resetToolTips]; + [self setNeedsDisplay:YES]; + [self propagateValue:shortcutValue forBinding:MASShortcutBinding]; + + if (self.shortcutValueChange) { + self.shortcutValueChange(self); + } +} + +- (void)setShortcutPlaceholder:(NSString *)shortcutPlaceholder +{ + _shortcutPlaceholder = shortcutPlaceholder.copy; + [self setNeedsDisplay:YES]; +} + +#pragma mark - Drawing + +- (BOOL)isFlipped +{ + return YES; +} + +- (void)drawInRect:(CGRect)frame withTitle:(NSString *)title alignment:(NSTextAlignment)alignment state:(NSInteger)state +{ + _shortcutCell.title = title; + _shortcutCell.alignment = alignment; + _shortcutCell.state = state; + _shortcutCell.enabled = self.enabled; + + switch (_style) { + case MASShortcutViewStyleDefault: { + [_shortcutCell drawWithFrame:frame inView:self]; + break; + } + case MASShortcutViewStyleTexturedRect: { + [_shortcutCell drawWithFrame:CGRectOffset(frame, 0.0, 1.0) inView:self]; + break; + } + case MASShortcutViewStyleRounded: { + [_shortcutCell drawWithFrame:CGRectOffset(frame, 0.0, 1.0) inView:self]; + break; + } + case MASShortcutViewStyleFlat: { + [_shortcutCell drawWithFrame:frame inView:self]; + break; + } + } +} + +- (void)drawRect:(CGRect)dirtyRect +{ + if (self.shortcutValue) { + NSString *buttonTitle; + if (self.recording) { + buttonTitle = NSStringFromMASKeyCode(kMASShortcutGlyphEscape); + } else if (self.showsDeleteButton) { + buttonTitle = NSStringFromMASKeyCode(kMASShortcutGlyphClear); + } + if (buttonTitle != nil) { + [self drawInRect:self.bounds withTitle:buttonTitle alignment:NSRightTextAlignment state:NSOffState]; + } + CGRect shortcutRect; + [self getShortcutRect:&shortcutRect hintRect:NULL]; + NSString *title = (self.recording + ? (_hinting + ? MASLocalizedString(@"Use Old Shortcut", @"Cancel action button for non-empty shortcut in recording state") + : (self.shortcutPlaceholder.length > 0 + ? self.shortcutPlaceholder + : MASLocalizedString(@"Type New Shortcut", @"Non-empty shortcut button in recording state"))) + : _shortcutValue ? _shortcutValue.description : @""); + [self drawInRect:shortcutRect withTitle:title alignment:NSCenterTextAlignment state:self.isRecording ? NSOnState : NSOffState]; + } + else { + if (self.recording) + { + [self drawInRect:self.bounds withTitle:NSStringFromMASKeyCode(kMASShortcutGlyphEscape) alignment:NSRightTextAlignment state:NSOffState]; + + CGRect shortcutRect; + [self getShortcutRect:&shortcutRect hintRect:NULL]; + NSString *title = (_hinting + ? MASLocalizedString(@"Cancel", @"Cancel action button in recording state") + : (self.shortcutPlaceholder.length > 0 + ? self.shortcutPlaceholder + : MASLocalizedString(@"Type Shortcut", @"Empty shortcut button in recording state"))); + [self drawInRect:shortcutRect withTitle:title alignment:NSCenterTextAlignment state:NSOnState]; + } + else + { + [self drawInRect:self.bounds withTitle:MASLocalizedString(@"Record Shortcut", @"Empty shortcut button in normal state") + alignment:NSCenterTextAlignment state:NSOffState]; + } + } +} + +#pragma mark - Mouse handling + +- (void)getShortcutRect:(CGRect *)shortcutRectRef hintRect:(CGRect *)hintRectRef +{ + CGRect shortcutRect, hintRect; + CGFloat hintButtonWidth = MASHintButtonWidth; + switch (self.style) { + case MASShortcutViewStyleTexturedRect: hintButtonWidth += 2.0; break; + case MASShortcutViewStyleRounded: hintButtonWidth += 3.0; break; + case MASShortcutViewStyleFlat: hintButtonWidth -= 8.0 - (_shortcutCell.font.pointSize - MASButtonFontSize); break; + default: break; + } + CGRectDivide(self.bounds, &hintRect, &shortcutRect, hintButtonWidth, CGRectMaxXEdge); + if (shortcutRectRef) *shortcutRectRef = shortcutRect; + if (hintRectRef) *hintRectRef = hintRect; +} + +- (BOOL)locationInShortcutRect:(CGPoint)location +{ + CGRect shortcutRect; + [self getShortcutRect:&shortcutRect hintRect:NULL]; + return CGRectContainsPoint(shortcutRect, [self convertPoint:location fromView:nil]); +} + +- (BOOL)locationInHintRect:(CGPoint)location +{ + CGRect hintRect; + [self getShortcutRect:NULL hintRect:&hintRect]; + return CGRectContainsPoint(hintRect, [self convertPoint:location fromView:nil]); +} + +- (void)mouseDown:(NSEvent *)event +{ + if (self.enabled) { + if (self.shortcutValue) { + if (self.recording) { + if ([self locationInHintRect:event.locationInWindow]) { + self.recording = NO; + } + } + else { + if ([self locationInShortcutRect:event.locationInWindow]) { + self.recording = YES; + } + else { + self.shortcutValue = nil; + } + } + } + else { + if (self.recording) { + if ([self locationInHintRect:event.locationInWindow]) { + self.recording = NO; + } + } + else { + self.recording = YES; + } + } + } + else { + [super mouseDown:event]; + } +} + +#pragma mark - Handling mouse over + +- (void)updateTrackingAreas +{ + [super updateTrackingAreas]; + + if (_hintArea) { + [self removeTrackingArea:_hintArea]; + _hintArea = nil; + } + + // Forbid hinting if view is disabled + if (!self.enabled) return; + + CGRect hintRect; + [self getShortcutRect:NULL hintRect:&hintRect]; + NSTrackingAreaOptions options = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingAssumeInside); + _hintArea = [[NSTrackingArea alloc] initWithRect:hintRect options:options owner:self userInfo:nil]; + [self addTrackingArea:_hintArea]; +} + +- (void)setHinting:(BOOL)flag +{ + if (_hinting != flag) { + _hinting = flag; + [self setNeedsDisplay:YES]; + } +} + +- (void)mouseEntered:(NSEvent *)event +{ + self.hinting = YES; +} + +- (void)mouseExited:(NSEvent *)event +{ + self.hinting = NO; +} + +void *kUserDataShortcut = &kUserDataShortcut; +void *kUserDataHint = &kUserDataHint; + +- (void)resetToolTips +{ + if (_shortcutToolTipTag) { + [self removeToolTip:_shortcutToolTipTag], _shortcutToolTipTag = 0; + } + if (_hintToolTipTag) { + [self removeToolTip:_hintToolTipTag], _hintToolTipTag = 0; + } + + if ((self.shortcutValue == nil) || self.recording || !self.enabled) return; + + CGRect shortcutRect, hintRect; + [self getShortcutRect:&shortcutRect hintRect:&hintRect]; + _shortcutToolTipTag = [self addToolTipRect:shortcutRect owner:self userData:kUserDataShortcut]; + _hintToolTipTag = [self addToolTipRect:hintRect owner:self userData:kUserDataHint]; +} + +- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(CGPoint)point userData:(void *)data +{ + if (data == kUserDataShortcut) { + return MASLocalizedString(@"Click to record new shortcut", @"Tooltip for non-empty shortcut button"); + } + else if (data == kUserDataHint) { + return MASLocalizedString(@"Delete shortcut", @"Tooltip for hint button near the non-empty shortcut"); + } + return nil; +} + +#pragma mark - Event monitoring + +- (void)activateEventMonitoring:(BOOL)shouldActivate +{ + static BOOL isActive = NO; + if (isActive == shouldActivate) return; + isActive = shouldActivate; + + static id eventMonitor = nil; + if (shouldActivate) { + __unsafe_unretained MASShortcutView *weakSelf = self; + NSEventMask eventMask = (NSKeyDownMask | NSFlagsChangedMask); + eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:eventMask handler:^(NSEvent *event) { + + // Create a shortcut from the event + MASShortcut *shortcut = [MASShortcut shortcutWithEvent:event]; + + // Tab key must pass through. + if (shortcut.keyCode == kVK_Tab){ + return event; + } + + // If the shortcut is a plain Delete or Backspace, clear the current shortcut and cancel recording + if (!shortcut.modifierFlags && ((shortcut.keyCode == kVK_Delete) || (shortcut.keyCode == kVK_ForwardDelete))) { + weakSelf.shortcutValue = nil; + weakSelf.recording = NO; + event = nil; + } + + // If the shortcut is a plain Esc, cancel recording + else if (!shortcut.modifierFlags && shortcut.keyCode == kVK_Escape) { + weakSelf.recording = NO; + event = nil; + } + + // If the shortcut is Cmd-W or Cmd-Q, cancel recording and pass the event through + else if ((shortcut.modifierFlags == NSCommandKeyMask) && (shortcut.keyCode == kVK_ANSI_W || shortcut.keyCode == kVK_ANSI_Q)) { + weakSelf.recording = NO; + } + + else { + // Verify possible shortcut + if (shortcut.keyCodeString.length > 0) { + if ([_shortcutValidator isShortcutValid:shortcut]) { + // Verify that shortcut is not used + NSString *explanation = nil; + if ([_shortcutValidator isShortcutAlreadyTakenBySystem:shortcut explanation:&explanation]) { + // Prevent cancel of recording when Alert window is key + [weakSelf activateResignObserver:NO]; + [weakSelf activateEventMonitoring:NO]; + NSString *format = MASLocalizedString(@"The key combination %@ cannot be used", + @"Title for alert when shortcut is already used"); + NSAlert* alert = [[NSAlert alloc]init]; + alert.alertStyle = NSCriticalAlertStyle; + alert.informativeText = explanation; + alert.messageText = [NSString stringWithFormat:format, shortcut]; + [alert addButtonWithTitle:MASLocalizedString(@"OK", @"Alert button when shortcut is already used")]; + + [alert runModal]; + weakSelf.shortcutPlaceholder = nil; + [weakSelf activateResignObserver:YES]; + [weakSelf activateEventMonitoring:YES]; + } + else { + weakSelf.shortcutValue = shortcut; + weakSelf.recording = NO; + } + } + else { + // Key press with or without SHIFT is not valid input + NSBeep(); + } + } + else { + // User is playing with modifier keys + weakSelf.shortcutPlaceholder = shortcut.modifierFlagsString; + } + event = nil; + } + return event; + }]; + } + else { + [NSEvent removeMonitor:eventMonitor]; + } +} + +- (void)activateResignObserver:(BOOL)shouldActivate +{ + static BOOL isActive = NO; + if (isActive == shouldActivate) return; + isActive = shouldActivate; + + static id observer = nil; + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + if (shouldActivate) { + __unsafe_unretained MASShortcutView *weakSelf = self; + observer = [notificationCenter addObserverForName:NSWindowDidResignKeyNotification object:self.window + queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + weakSelf.recording = NO; + }]; + } + else { + [notificationCenter removeObserver:observer]; + } +} + +#pragma mark Bindings + +// http://tomdalling.com/blog/cocoa/implementing-your-own-cocoa-bindings/ +-(void) propagateValue:(id)value forBinding:(NSString*)binding +{ + NSParameterAssert(binding != nil); + + //WARNING: bindingInfo contains NSNull, so it must be accounted for + NSDictionary* bindingInfo = [self infoForBinding:binding]; + if(!bindingInfo) + return; //there is no binding + + //apply the value transformer, if one has been set + NSDictionary* bindingOptions = [bindingInfo objectForKey:NSOptionsKey]; + if(bindingOptions){ + NSValueTransformer* transformer = [bindingOptions valueForKey:NSValueTransformerBindingOption]; + if(!transformer || (id)transformer == [NSNull null]){ + NSString* transformerName = [bindingOptions valueForKey:NSValueTransformerNameBindingOption]; + if(transformerName && (id)transformerName != [NSNull null]){ + transformer = [NSValueTransformer valueTransformerForName:transformerName]; + } + } + + if(transformer && (id)transformer != [NSNull null]){ + if([[transformer class] allowsReverseTransformation]){ + value = [transformer reverseTransformedValue:value]; + } else { + NSLog(@"WARNING: binding \"%@\" has value transformer, but it doesn't allow reverse transformations in %s", binding, __PRETTY_FUNCTION__); + } + } + } + + id boundObject = [bindingInfo objectForKey:NSObservedObjectKey]; + if(!boundObject || boundObject == [NSNull null]){ + NSLog(@"ERROR: NSObservedObjectKey was nil for binding \"%@\" in %s", binding, __PRETTY_FUNCTION__); + return; + } + + NSString* boundKeyPath = [bindingInfo objectForKey:NSObservedKeyPathKey]; + if(!boundKeyPath || (id)boundKeyPath == [NSNull null]){ + NSLog(@"ERROR: NSObservedKeyPathKey was nil for binding \"%@\" in %s", binding, __PRETTY_FUNCTION__); + return; + } + + [boundObject setValue:value forKeyPath:boundKeyPath]; +} + +#pragma mark - Accessibility + +- (BOOL)accessibilityIsIgnored +{ + return NO; +} + +- (NSString *)accessibilityHelp +{ + return MASLocalizedString(@"To record a new shortcut, click this button, and then type the" + @" new shortcut, or press delete to clear an existing shortcut.", + @"VoiceOver shortcut help"); +} + +- (NSString *)accessibilityLabel +{ + NSString* title = _shortcutValue.description ?: @"Empty"; + title = [title stringByAppendingFormat:@" %@", MASLocalizedString(@"keyboard shortcut", @"VoiceOver title")]; + return title; +} + +- (BOOL)accessibilityPerformPress +{ + if (self.isRecording == NO) { + self.recording = YES; + return YES; + } + else { + return NO; + } +} + +- (NSString *)accessibilityRole +{ + return NSAccessibilityButtonRole; +} + +- (BOOL)acceptsFirstResponder +{ + return _acceptsFirstResponder; +} + +- (void)setAcceptsFirstResponder:(BOOL)value +{ + _acceptsFirstResponder = value; +} + +- (BOOL)becomeFirstResponder +{ + [self setNeedsDisplay:YES]; + return [super becomeFirstResponder]; +} + +- (BOOL)resignFirstResponder +{ + [self setNeedsDisplay:YES]; + return [super resignFirstResponder]; +} + +- (void)drawFocusRingMask +{ + [_shortcutCell drawFocusRingMaskWithFrame:[self bounds] inView:self]; +} + +- (NSRect)focusRingMaskBounds +{ + return [self bounds]; +} + +@end diff --git a/Pods/MASShortcut/Framework/Shortcut.h b/Pods/MASShortcut/Framework/Shortcut.h new file mode 100644 index 0000000..5a8de8e --- /dev/null +++ b/Pods/MASShortcut/Framework/Shortcut.h @@ -0,0 +1,8 @@ +#import "MASKeyMasks.h" +#import "MASShortcut.h" +#import "MASShortcutValidator.h" +#import "MASShortcutMonitor.h" +#import "MASShortcutBinder.h" +#import "MASDictionaryTransformer.h" +#import "MASShortcutView.h" +#import "MASShortcutView+Bindings.h" diff --git a/Pods/MASShortcut/LICENSE b/Pods/MASShortcut/LICENSE new file mode 100644 index 0000000..e768631 --- /dev/null +++ b/Pods/MASShortcut/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2012-2013, Vadim Shpakovski +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Pods/MASShortcut/README.md b/Pods/MASShortcut/README.md new file mode 100644 index 0000000..dc83c1a --- /dev/null +++ b/Pods/MASShortcut/README.md @@ -0,0 +1,136 @@ +[![Build Status](https://travis-ci.org/shpakovski/MASShortcut.svg?branch=master)](https://travis-ci.org/shpakovski/MASShortcut) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +# Intro + +Some time ago Cocoa developers used a brilliant framework [ShortcutRecorder](http://wafflesoftware.net/shortcut/) for managing keyboard shortcuts in application preferences. However, it became incompatible with the new plugin architecture of Xcode 4. + +The MASShortcut project introduces a modern API and user interface for recording, storing and using system-wide keyboard shortcuts. + +![Screenshot of the demo project](https://raw.githubusercontent.com/shpakovski/MASShortcut/master/Demo/screenshot.png "This is how the demo looks like") + +Features: + +* Record and display keyboard shortcuts +* Watch for shortcuts and execute actions, system-wide +* A nice, [documented API](http://cocoadocs.org/docsets/MASShortcut/) +* Can be configured to be compatible with Shortcut Recorder +* Can be installed both through CocoaPods and as a Git submodule +* Mac App Store friendly +* Works on OS X 10.6 and up +* Hacking-friendly codebase covered with tests + +Partially done: + +* Accessibility support. There’s some basic accessibility code, testers and feedback welcome. +* Localisation. The English and Czech localization should be complete, there’s basic support for German, French, Spanish, Italian, and Japanese. If you’re a native speaker in one of the mentioned languages, please test the localization and report issues or add missing strings. + +Pull requests welcome :) + +# Installation + +You can use [CocoaPods](http://cocoapods.org/), adding the following line to your Podfile: + + pod 'MASShortcut' + +If you want to stick to the 1.x branch, you can use the version smart match operator: + + pod 'MASShortcut', '~> 1' + +You can also install via [Carthage](https://github.com/Carthage/Carthage), or you can use Git submodules and link against the MASShortcut framework manually. + +To build from the command line, type 'make release'. The framework will be created in a temporary directory and revealed in Finder when the build is complete. + +# Usage + +I hope, it is really easy: + +```objective-c +#import + +// Drop a custom view into XIB, set its class to MASShortcutView +// and its height to 19. If you select another appearance style, +// look up the correct height values in MASShortcutView.h. +@property (nonatomic, weak) IBOutlet MASShortcutView *shortcutView; + +// Pick a preference key to store the shortcut between launches +static NSString *const kPreferenceGlobalShortcut = @"GlobalShortcut"; + +// Associate the shortcut view with user defaults +self.shortcutView.associatedUserDefaultsKey = kPreferenceGlobalShortcut; + +// Associate the preference key with an action +[[MASShortcutBinder sharedBinder] + bindShortcutWithDefaultsKey:kPreferenceGlobalShortcut + toAction:^{ + // Let me know if you find a better or a more convenient API. +}]; +``` + +You can see a real usage example in the Demo target. Enjoy! + +# Shortcut Recorder Compatibility + +By default, MASShortcut uses a different User Defaults storage format incompatible with Shortcut Recorder. But it’s easily possible to change that, so that you can replace Shortcut Recorder with MASShortcut without having to migrate the shortcuts previously stored by your apps. There are two parts of the story: + +If you bind the recorder control (`MASShortcutView`) to User defaults, set the Value Transformer field in the Interface Builder to `MASDictionaryTransformer`. This makes sure the shortcuts are written in the Shortcut Recorder format. + +If you use `MASShortcutBinder` to automatically load shortcuts from User Defaults, set the `bindingOptions` accordingly: + +```objective-c +[[MASShortcutBinder sharedBinder] setBindingOptions:@{NSValueTransformerNameBindingOption:MASDictionaryTransformerName}]; +``` + +This makes sure that the shortcuts in the Shortcut Recorder format are loaded correctly. + +# Notifications + +By registering for KVO notifications from `NSUserDefaultsController`, you can get a callback whenever a user changes the shortcut, allowing you to perform any UI updates, or other code handling tasks. + +This is just as easy to implement: + +```objective-c +// Declare an ivar for key path in the user defaults controller +NSString *_observableKeyPath; + +// Make a global context reference +void *kGlobalShortcutContext = &kGlobalShortcutContext; + +// Implement when loading view +_observableKeyPath = [@"values." stringByAppendingString:kPreferenceGlobalShortcut]; +[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:_observableKeyPath + options:NSKeyValueObservingOptionInitial + context:kGlobalShortcutContext]; + +// Capture the KVO change and do something +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)obj + change:(NSDictionary *)change context:(void *)ctx +{ + if (ctx == kGlobalShortcutContext) { + NSLog(@"Shortcut has changed"); + } + else { + [super observeValueForKeyPath:keyPath ofObject:obj change:change context:ctx]; + } +} + +// Do not forget to remove the observer +[[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self + forKeyPath:_observableKeyPath + context:kGlobalShortcutContext]; +``` + +# Using in Swift projects + + 1. Install as a Pod using the latest CocoaPods with Swift support. + 2. Create a bridging header file [using the instructions here](http://swiftalicio.us/2014/11/using-cocoapods-from-swift/) + 3. Your bridging header file should contain the following [two](https://github.com/shpakovski/MASShortcut/issues/36) imports: + +```objective-c +#import +#import +``` + +# Copyright + +MASShortcut is licensed under the 2-clause BSD license. diff --git a/Pods/MASShortcut/cs.lproj/Localizable.strings b/Pods/MASShortcut/cs.lproj/Localizable.strings new file mode 100644 index 0000000..afefe2b --- /dev/null +++ b/Pods/MASShortcut/cs.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Zrušit"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Kliknutím nahrajete novou zkratku"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Smazat zkratku"; + +/* VoiceOver title */ +"keyboard shortcut" = "klávesová zkratka"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Nahrát zkratku"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "zkratka smazána"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "zkratka nastavena"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Mezerník"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "Kombinace %@ se nedá použít"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Tato zkratka se nedá použít, protože už ji obsadil systém.\nKdybyste na ní trvali, většina systémových zkratek se dá přenastavit v Předvolbách systému."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Tato zkratka se nedá použít, protože už je použita pro menu (%@)."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Pokud chcete nahrát novou zkratku, stiskněte toto tlačítko a následně vybranou zkratku. Stisknutím Delete vymažete stávající zkratku."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Stiskněte zkratku"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Stiskněte zkratku"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Vrátit se k původní"; diff --git a/Pods/MASShortcut/de.lproj/Localizable.strings b/Pods/MASShortcut/de.lproj/Localizable.strings new file mode 100644 index 0000000..986cdba --- /dev/null +++ b/Pods/MASShortcut/de.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Abbrechen"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Klicken um neuen Kurzbefehl aufzunehmen"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Kurzbefehl Löschen"; + +/* VoiceOver title */ +"keyboard shortcut" = "Kurzbefehl"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Kurzbefehl aufnehmen"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Kurzbefehl gelöscht"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Kurzbefehl gesetzt"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Leertaste"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "Die Tastenkombination %@ kann nicht genutzt werden"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Diese Kombination kann nicht genutzt werden, weil sie bereits als systemweiter Kurzbefehl genutzt wird.\nFalls du diese Tastenkombination wirklich benutzen willst, können die meisten Kurzbefehle in den Tastatur Systemeinstellungen geändert werden."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Dieser Kurzbefehl kann nicht genutzt werden, weil er bereits vom Menüpunkt „%@“ genutzt wird."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Drücke diesen Button, um einen neuen Kurzbefehl aufzunehmen. Tippe dann den neuen Kurzbefehl oder drücke Löschen, um den aktuellen Kurzbefehl zu löschen."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Neuen eingeben"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Kurzbefehl eingeben"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Alten nutzen"; diff --git a/Pods/MASShortcut/en.lproj/Localizable.strings b/Pods/MASShortcut/en.lproj/Localizable.strings new file mode 100644 index 0000000..bfa60a9 --- /dev/null +++ b/Pods/MASShortcut/en.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Cancel"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Click to record new shortcut"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Delete shortcut"; + +/* VoiceOver title */ +"keyboard shortcut" = "keyboard shortcut"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Record Shortcut"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Shortcut cleared"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Shortcut set"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Space"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "The key combination %@ cannot be used"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "This shortcut cannot be used because it is already used by the menu item ‘%@’."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Type New Shortcut"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Type Shortcut"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Use Old Shortcut"; diff --git a/Pods/MASShortcut/es.lproj/Localizable.strings b/Pods/MASShortcut/es.lproj/Localizable.strings new file mode 100644 index 0000000..55362cf --- /dev/null +++ b/Pods/MASShortcut/es.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Cancelar"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Haga clic para grabar nuevo atajo"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Borrar atajo"; + +/* VoiceOver title */ +"keyboard shortcut" = "atajo de teklado"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Grabar atajo"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Atajo borrado"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Atajo creado"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Espacio"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "La combinación de claves %@ no se puede utilizada"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Esta combinación no se puede utilizar debido a que ya es en us como atajo del sistema.\nSi realmente desea utilizar esta combinación de teclas, la mayoría de los atajos se puede cambiar en el panel de Teclado y Ratón de Preferencias del Sistema."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Este atajo no se puede utilizar debido a que ya es utilizado por el elemento de menú '%@'."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Para grabar un nuevo atajo, haga clic en este botón, a continuar, escriba el nuevo atajo, o pulse borrar para qutar un atajo existente."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Escribir atajo"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Escribir atajo"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Usa atajo anterior"; \ No newline at end of file diff --git a/Pods/MASShortcut/fr.lproj/Localizable.strings b/Pods/MASShortcut/fr.lproj/Localizable.strings new file mode 100644 index 0000000..003dbac --- /dev/null +++ b/Pods/MASShortcut/fr.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Annuler"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Cliquez pour enregistrer le raccourci"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Supprimer le raccourci"; + +/* VoiceOver title */ +"keyboard shortcut" = "raccourci clavier"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Enregistrer le raccourci"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Raccourci supprimé"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Raccourci configuré"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Espace"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "La combinaison %@ ne peut être utilisée"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Cette combinaison de touches ne peut être utilisée parce qu’elle est réservée pour un raccourci du système.\nSi vous désirez l’utiliser, la plupart des raccourcis peuvent être modifiés dans l’onglet Clavier, dans Préférences Système."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Ce raccourci ne peut être utilisé parce qu’il est déjà utilisé par le point de menu «%@»."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Pour enregistrer un nouveau raccourci, cliquez sur ce bouton et tapez le nouveau raccourci, ou bien, tapez sur «Supprimer» pour supprimer le raccourci configuré."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Saisir un raccourci"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Saisir un raccourci"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Revenir au raccourci précédent"; diff --git a/Pods/MASShortcut/it.lproj/Localizable.strings b/Pods/MASShortcut/it.lproj/Localizable.strings new file mode 100644 index 0000000..53ec560 --- /dev/null +++ b/Pods/MASShortcut/it.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Annulla"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Cliccare per registrare una nuova combinazione"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Cancella scorciatoia"; + +/* VoiceOver title */ +"keyboard shortcut" = "Scorciatoia da tastiera"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Registra scorciatoia"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Scorciatoia rimossa"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Scorciatoia impostata"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Spazio"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "Questa combinazione %@ di tasti non può essere usata"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Questa combinazione di tasti non può essere usata perchè è già usata da una scorciatoia da tastiera a livello di Sistema.\nSe volete davvero usare questa combinazione di tasti, la maggior parte delle scorciatoie possono essere cambiate nel pannello Tastiera e Mouse delle Preferenze di Sistema."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Questa combinazione di tasti non può essere usata perchè è già usata dalla voce di menù ‘%@’."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Per registrare una nuova scorciatoia, cliccare su questo pulsante e poi inserire la muova scorciatoia o premere cancella per resettare una scorciatoia esistente."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Digita nuova"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Digita scorciatoia"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Usare vecchia"; diff --git a/Pods/MASShortcut/ja.lproj/Localizable.strings b/Pods/MASShortcut/ja.lproj/Localizable.strings new file mode 100644 index 0000000..dec08eb --- /dev/null +++ b/Pods/MASShortcut/ja.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "キャンセルする"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "クリックしてショートカットを入力"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "ショートカットを削除"; + +/* VoiceOver title */ +"keyboard shortcut" = "キーボードショートカット"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "ショートカットを入力"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "ショートカットが削除されました"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "ショートカットが設定されました"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "スペース"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "%@ はショートカットに設定できません"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "このショートカットは、システム全体で使用されているショートカットのため、設定することができません。\nもしこのショートカットを使用したい場合、「システム環境設定」の「キーボード」、「マウス」のパネルから既に設定されているショートカットを変更してください。"; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "このショートカットは、メニュー操作の「%@」で使われているため、設定できません。"; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "このボタンをクリックし、ショートカットを入力すると、新しいショートカットが設定されます。また、削除ボタンをおすと、ショートカットが削除されます。"; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "ショートカットを入力"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "ショートカットを入力"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "古いショートカットを使用"; diff --git a/Pods/MASShortcut/ko.lproj/Localizable.strings b/Pods/MASShortcut/ko.lproj/Localizable.strings new file mode 100644 index 0000000..41c0796 --- /dev/null +++ b/Pods/MASShortcut/ko.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "취소"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "클릭해 단축 키를 입력"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "단축키 삭제"; + +/* VoiceOver title */ +"keyboard shortcut" = "키보드 단축키"; + +/* Alert button when shortcut is already used */ +"OK" = "좋아"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "단축키 입력"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "단축키 삭제됨"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "단축키 설정됨"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "스페이스 바"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "%@ 단축키로 설정할 수 없습니다"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "이 결합은 시스템 전체에서 사용 때문에 단축키로 설정 할 수 없습니다.\n단축키를 사용하고 싶으면 시스템 환경 설정의 키보드, 마우스 패널에서 이미 설정되어있는 단축키를 변경하십시오."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "이 단축키는 ‘%@’ 메뉴 아이템에 사용되고 있기 때문에 설정할 수 없습니다."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "이 버튼을 클릭하고 단축키를 입력하면 새로운 단축키가 설정됩니다. 또한 삭제 버튼을 누르면 단축키가 삭제됩니다."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "새 단축키 입력"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "단축키 입력"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "오래된 단축키를 사용"; diff --git a/Pods/MASShortcut/nl.lproj/Localizable.strings b/Pods/MASShortcut/nl.lproj/Localizable.strings new file mode 100644 index 0000000..06f7817 --- /dev/null +++ b/Pods/MASShortcut/nl.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Verbreken"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Druk om een nieuwe sneltoets in te voeren"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Verwijder sneltoets"; + +/* VoiceOver title */ +"keyboard shortcut" = "sneltoets"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Sneltoets opnemen"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Sneltoets verwijderd"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Sneltoets zetten"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Spatie"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "De sneltoetsencombinatie kan niet worden gebruikt"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Deze combinatie kan niet worden gebruikt want hij wordt al gebruikt door een systeembreed sneltoets.\nAls je deze combinatie echt wilt gebruiken, kun je de meeste sneltoetsen binnen Toetsenbordinstellingen veranderen."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Deze sneltoets kan niet worden gebruikt want hij wordt al gebruikt door het menu item ‘%@’."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Om nieuwe sneltoets op te nemen, druk op deze knop, en voer een nieuwe sneltoets in, of druk op verwijder om bestaande sneltoets te verwijderen."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Voer Nieuwe Sneltoets in"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Voer Sneltoets in"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Gebruik Oude Sneltoets"; \ No newline at end of file diff --git a/Pods/MASShortcut/pl.lproj/Localizable.strings b/Pods/MASShortcut/pl.lproj/Localizable.strings new file mode 100644 index 0000000..fffe334 --- /dev/null +++ b/Pods/MASShortcut/pl.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Anuluj"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Kliknij, by ustawić nowy skrót"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Usuń skrót"; + +/* VoiceOver title */ +"keyboard shortcut" = "skrót klawiszowy"; + +/* Alert button when shortcut is already used */ +"OK" = "OK"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Utwórz skrót"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Skrót usunięty"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Skrót ustawiony"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Spacja"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "Nie można użyć kombinacji klawiszy %@"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Nie można użyć tej kombinacji, ponieważ jest już zajęta przez skrót systemowy.\nMożesz to zmienić w panelu Klawiatura w Preferencjach systemowych."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Ten skrót nie może być użyty, ponieważ w menu ma już przypisaną funkcję ‘%@’."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Aby ustawić nowy skrót, użyj tego przycisku, a następnie wpisz nowy skrót albo naciśnij klawisz delete, by usunąć istniejący skrót"; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Wpisz nowy skrót"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Wpisz skrót"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Użyj starego skrótu"; \ No newline at end of file diff --git a/Pods/MASShortcut/ru.lproj/Localizable.strings b/Pods/MASShortcut/ru.lproj/Localizable.strings new file mode 100644 index 0000000..36c5208 --- /dev/null +++ b/Pods/MASShortcut/ru.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "Отмена"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "Нажмите для записи сочетания клавиш"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "Удалить горячую клавишу"; + +/* VoiceOver title */ +"keyboard shortcut" = "сочетание клавиш"; + +/* Alert button when shortcut is already used */ +"OK" = "ОК"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "Ввести сочетание"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "Сочетание клавиш удалено"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "Сочетание клавиш назначено"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "Пробел"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "Нельзя использовать сочетание клавиш %@"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Нельзя использовать это сочетание клавиш, потому что оно уже используется в системе.\n Если вы хотите использовать это сочетание, измените существующее системное сочетание клавиш через панель Клавиатура в Cистемных настройках."; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Нельзя использовать это сочетание, потому что оно уже связано с элементом ‘%@’."; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Чтобы назначить новое сочетание клавиш, нажмите эту кнопку и введите новое сочетание, или нажмите \"Удалить\", чтобы удалить действующее сочетание клавиш."; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "Введите сочетание"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "Введите сочетание"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "Вернуть старое"; \ No newline at end of file diff --git a/Pods/MASShortcut/zh-Hans.lproj/Localizable.strings b/Pods/MASShortcut/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000..d383cc9 --- /dev/null +++ b/Pods/MASShortcut/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "取消"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "点击以记录新快捷键"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "删除快捷键"; + +/* VoiceOver title */ +"keyboard shortcut" = "键盘快捷键"; + +/* Alert button when shortcut is already used */ +"OK" = "好"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "记录快捷键"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "快捷键已清除"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "快捷键已设置"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "空格键"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "按键组合“%@”无法使用"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "当前按键组合无法使用,因为它已经用作其他系统全局快捷键。\n如果您真的想使用这个按键组合,大部分系统全局快捷键能在“系统偏好设置”里的“键盘”和“鼠标”面板中重设。"; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "当前快捷键无法使用,因为它已用作菜单项“%@”的快捷键。"; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "若要记录新的快捷键,单击此按钮,然后键入新的快捷键,或者按“delete键”删除已经存在的快捷键。"; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "键入新快捷键"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "键入快捷键"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "还原快捷键"; diff --git a/Pods/MASShortcut/zh-Hant.lproj/Localizable.strings b/Pods/MASShortcut/zh-Hant.lproj/Localizable.strings new file mode 100644 index 0000000..28a765c --- /dev/null +++ b/Pods/MASShortcut/zh-Hant.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* Cancel action button in recording state */ +"Cancel" = "取消"; + +/* Tooltip for non-empty shortcut button */ +"Click to record new shortcut" = "點選以記錄新快捷鍵"; + +/* Tooltip for hint button near the non-empty shortcut */ +"Delete shortcut" = "刪除快捷鍵"; + +/* VoiceOver title */ +"keyboard shortcut" = "鍵盤快捷鍵"; + +/* Alert button when shortcut is already used */ +"OK" = "好"; + +/* Empty shortcut button in normal state */ +"Record Shortcut" = "記錄快捷鍵"; + +/* VoiceOver: Shortcut cleared */ +"Shortcut cleared" = "快捷鍵已清除"; + +/* VoiceOver: Shortcut set */ +"Shortcut set" = "快捷鍵已設定"; + +/* Shortcut glyph name for SPACE key */ +"Space" = "空格鍵"; + +/* Title for alert when shortcut is already used */ +"The key combination %@ cannot be used" = "按鍵組合“%@”無法使用"; + +/* Message for alert when shortcut is already used by the system */ +"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "當前按鍵組合無法使用,因為它已經用作其他系統全局快捷鍵。\n如果您真的想使用這個按鍵組合,大部分系統全局快捷鍵能在“系統偏好設定”裡的“鍵盤”和“滑鼠”面板中重設。"; + +/* Message for alert when shortcut is already used */ +"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "當前快捷鍵無法使用,因為它已用作選單項“%@”的快捷鍵。"; + +/* VoiceOver shortcut help */ +"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "若要記錄新的快捷鍵,單擊此按鈕,然後鍵入新的快捷鍵,或者按“delete鍵”刪除已經存在的快捷鍵。"; + +/* Non-empty shortcut button in recording state */ +"Type New Shortcut" = "鍵入新快捷鍵"; + +/* Empty shortcut button in recording state */ +"Type Shortcut" = "鍵入快捷鍵"; + +/* Cancel action button for non-empty shortcut in recording state */ +"Use Old Shortcut" = "還原快捷鍵"; diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 539ffd5..0fde6da 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -4,17 +4,20 @@ PODS: - GCDWebServer (3.3.3): - GCDWebServer/Core (= 3.3.3) - GCDWebServer/Core (3.3.3) + - MASShortcut (2.3.6) DEPENDENCIES: - Alamofire (~> 4.2.0) - BRLOptionParser (~> 0.3.1) - GCDWebServer (~> 3.0) + - MASShortcut (~> 2) SPEC CHECKSUMS: Alamofire: aa2e09d871c9160ac53c90e83c68064a94e3dfbe BRLOptionParser: a03256a8ff003ca1f5376c55f55f210e085a3958 GCDWebServer: 1c39a1f0763e4eb492bee021e4270fce097d3555 + MASShortcut: 9c215e8a8a78f3d01ce56da48e2730ab66b538fa -PODFILE CHECKSUM: d717746ef98bb719d87cee4fc334a392005fd32e +PODFILE CHECKSUM: e8b6cac515675274e39470f4662a5082eedee9e8 -COCOAPODS: 1.2.0.beta.1 +COCOAPODS: 1.2.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index be653d2..964d307 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,87 +7,141 @@ objects = { /* Begin PBXBuildFile section */ - 008D88E94858B0B8190DD42951253AD2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - 015A2D47B6DA8E170E4E64108EC177CA /* GCDWebServerFileRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D7C15E08E56E065130F76FC8DC8C8619 /* GCDWebServerFileRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03810806C0578A750613717248DC37CC /* GCDWebServerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CA78677B47A82041B6A0C96CE51F76C2 /* GCDWebServerPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0551162B7568A0F3028CF7CE13E9C1C7 /* GCDWebServerURLEncodedFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6444C9A87ED6919A7864A0C9D70A4C /* GCDWebServerURLEncodedFormRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 098AA417A5494FC829E777DC5CF06ECC /* GCDWebServerURLEncodedFormRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CBA6D73D3D0B47B5D2DCA98FD3514E /* GCDWebServerURLEncodedFormRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A402C97D8A2855E4F69D8E2BFEE752E /* BRLOptionParser.m in Sources */ = {isa = PBXBuildFile; fileRef = BAA6E2FFB996A81C9D31918A563B43FB /* BRLOptionParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0B8140968914C908CFB4949F67745DD7 /* GCDWebServerFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = EB10970D56AE3E8EC08A3B6CB0ECF896 /* GCDWebServerFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EC1F64B51A455E18896FCB15AE297F7 /* Pods-ShadowsocksX-NG-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A9EC2BB1EC6484018A5EB4B9B2C231 /* Pods-ShadowsocksX-NG-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10EB23E9ECC4B33E16933BB1EA560B6A /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2E64BA5DE520D1FF8D157D1948EF678 /* Timeline.swift */; }; - 1568BC317134F1902AB76EE65E0A18CE /* GCDWebServerDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = B49FCFC5427009EB0DE924D8E6689486 /* GCDWebServerDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 008D88E94858B0B8190DD42951253AD2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 015A2D47B6DA8E170E4E64108EC177CA /* GCDWebServerFileRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 281F888B9FFA5F230A528564E73518DF /* GCDWebServerFileRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03810806C0578A750613717248DC37CC /* GCDWebServerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 521DF5ED2D6DDCC2CD0241C6758A82E8 /* GCDWebServerPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0551162B7568A0F3028CF7CE13E9C1C7 /* GCDWebServerURLEncodedFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D354B988E94145D21D7ACC846F6E3A69 /* GCDWebServerURLEncodedFormRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 098AA417A5494FC829E777DC5CF06ECC /* GCDWebServerURLEncodedFormRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 08089D3F4CC12076D2D2B8794E4BC321 /* GCDWebServerURLEncodedFormRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A402C97D8A2855E4F69D8E2BFEE752E /* BRLOptionParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA31567241C5316DE5F728BA3DE8DA6 /* BRLOptionParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0B8140968914C908CFB4949F67745DD7 /* GCDWebServerFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = B47B95553B8446AB4C05DB6C787C1923 /* GCDWebServerFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10EB23E9ECC4B33E16933BB1EA560B6A /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBB13842D20339B1AA4DBC88598BE195 /* Timeline.swift */; }; + 12149EA10608B7DE38879E6242D2826C /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AF1D2790CBE48EA409C37174C263BBBB /* ko.lproj */; }; + 1568BC317134F1902AB76EE65E0A18CE /* GCDWebServerDataResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F7F511A7BB871D77D80C8B376050327 /* GCDWebServerDataResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 157AE1FBA8F6C3B710CDE90F86492010 /* MASShortcut.m in Sources */ = {isa = PBXBuildFile; fileRef = 7769179E7E99FFDE1312346DF91A8A1D /* MASShortcut.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 1AB0577134E333EA71DCCE332191A260 /* Pods-ShadowsocksX-NGTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46662EB64876AD1C891F548C69A89E89 /* Pods-ShadowsocksX-NGTests-dummy.m */; }; - 1B9EDEDC964E6B08F78920B4F4B9DB84 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BB1A40A42CB3E3DE3C7FB21A038462FD /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EF1D9B948C91F3CAD0F2998F3765D8B /* GCDWebServerErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B884322F7F32E5886E831225EF61A24 /* GCDWebServerErrorResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2527F62CEADDA5CE60852E0C067D3438 /* GCDWebServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA43A03295E967E8CE48DC3D41B1FB1 /* GCDWebServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2545E11592C408516EA9AC047FFD47FD /* BRLOptionParser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 052330BD03A0DFCDEFF81F8EC5BFEB02 /* BRLOptionParser-dummy.m */; }; - 286A79B0F2405FD08804042FE30407B1 /* GCDWebServerMultiPartFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BF25F29EE771444894D4B4BD6A5094A /* GCDWebServerMultiPartFormRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1B9EDEDC964E6B08F78920B4F4B9DB84 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2622E50F246A10BAC80FCFDF60CDB349 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EF1D9B948C91F3CAD0F2998F3765D8B /* GCDWebServerErrorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B24A5DDAD858CD6616DD64178BB7A6 /* GCDWebServerErrorResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20887597017160017549465EBFB7E977 /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 97959737DD67EFD1D7AB5F26607875F2 /* zh-Hant.lproj */; }; + 2527F62CEADDA5CE60852E0C067D3438 /* GCDWebServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BE8739A57CFBA2B252B9323870F7F914 /* GCDWebServerResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2545E11592C408516EA9AC047FFD47FD /* BRLOptionParser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CCB68427884134CB40644A07D36C7213 /* BRLOptionParser-dummy.m */; }; + 286A79B0F2405FD08804042FE30407B1 /* GCDWebServerMultiPartFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F9A804E1EB5515485FBC3A8075FCDFF /* GCDWebServerMultiPartFormRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 2DBAC0452D6B85DF3E41E3AEFB4EEC16 /* Pods-ShadowsocksX-NGTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E8128F302CF60BEF206008CE11F6D3 /* Pods-ShadowsocksX-NGTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30E2A73CDE464DC6C23D3524F07FBB9F /* GCDWebServer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F5FCCAE1F4AE542376E5F228D7463E4F /* GCDWebServer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33669A1E8FF6BB34131FB94871DDF908 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - 35B3DA850A250223EE5CEB9DB04D1FC4 /* GCDWebServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 432FFBD34AE4D6FE11F7562A7B2E2DF6 /* GCDWebServerResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3626B94094672CB1C9DEA32B9F9502E1 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C058E7895E0BD655DB18CD87B39658B /* TaskDelegate.swift */; }; - 36E0FA5FE4424D20F0215B1C2CD85D90 /* GCDWebServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4DE2F9318899EC55FF739F09547B9F /* GCDWebServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 382EEA9832CF0E0860B998EAD0EE66E1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49E50A971405B804294572CAAD1D1F90 /* SystemConfiguration.framework */; }; - 3DD0362B0B6B939B5D087A150121A4B1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - 3E715DFE443524EB6ADE892E4A676224 /* GCDWebServerMultiPartFormRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEC4F2E970093B9815E645E63781C40 /* GCDWebServerMultiPartFormRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48FE45BD7BF4ABB32A024550ED96B4C6 /* GCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B03492069EA8D52FDD5E9F8CC3749D /* GCDWebServerStreamedResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4EDE49009B5B68074CD71F8B362F0DDC /* GCDWebServerDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 056695931D97F3BAC1F31181094FF7F0 /* GCDWebServerDataRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5387216E723A3C68E851CA15573CDD71 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 781B71F26694E106B9C6014A4D828CFE /* Request.swift */; }; - 53D63A17DB43C044EFBAA17337600276 /* GCDWebServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BD69E62A30DA9C6468DE578D50E5FB0 /* GCDWebServerRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5BCD116D40D884DF5E2F4DDC9E3AD53A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - 61200D01A1855D7920CEF835C8BE00B0 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2625C48AD777A2B7E26D2A80E9CD94E7 /* DispatchQueue+Alamofire.swift */; }; - 62F65AD8DC4F0F9610F4B8B4738EC094 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 193AA1B44C4CB1CFCCEDD6C9741F5211 /* ServerTrustPolicy.swift */; }; - 66AD0D86950A5C05121AE482F5257717 /* GCDWebServerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 150AAAC15A441418AEA6DFBF159FBEA0 /* GCDWebServerConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C62ACD1AF9B80626023D3E654D3E77B /* GCDWebServerStreamedResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 65715F792D70CDE4E67F1EB98531E233 /* GCDWebServerStreamedResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B5FE28C7EA4122B0598738E54DBEBD8 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3565E299C44D10C2D206FDCD078A0008 /* SessionDelegate.swift */; }; - 7B70A32CB535894B889DC0400D0DE4B5 /* GCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E02D3FE330950F96E4826E6785950F95 /* GCDWebServerDataRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7C46C6DFBF9F5A96C6BCE1C93052B63D /* GCDWebServerHTTPStatusCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = D9D61BAD16772ED8DBCD878F6BBF7025 /* GCDWebServerHTTPStatusCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D8CC01E8C9EFFF9F4D65406CDE0AB66 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1673CAE4B8238FFD59A792823A36A9DF /* Result.swift */; }; - 886E89D85907BBD7A8C8BAA088D23E3D /* GCDWebServerFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = D35A95B17B77B37E12236498D60B8478 /* GCDWebServerFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B622302DDDA1881AC9ABA9EA4C81564 /* BRLOptionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4461C7BE603BCBC96BA24E3E752C6AC0 /* BRLOptionParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9DB91F7B392D045AB8451F515D20D649 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - 9ED2BB2981896E0A39EFA365503F58CE /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D86AC40F610A78D1B5E5AC9528E70ADB /* AFError.swift */; }; - A2A6F71B727312BD45CC7A4AAD7B0AB7 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7E6D819AE4FECE3068ED91259133EAC /* NetworkReachabilityManager.swift */; }; - A9EEEA7477981DEEBC72432DE9990A4B /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 383ADB6B629F7BC3B7FB986648404A88 /* Alamofire-dummy.m */; }; + 3076DFAD05E4F7F0356153478F071D74 /* MASShortcut-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DEA37CFFE5FCF2A505A2EC3468C0E635 /* MASShortcut-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30E2A73CDE464DC6C23D3524F07FBB9F /* GCDWebServer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9681E05358DC8416C0EE292B3047C10E /* GCDWebServer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33669A1E8FF6BB34131FB94871DDF908 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 35B3DA850A250223EE5CEB9DB04D1FC4 /* GCDWebServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C03AA4D681FDF11A4D5D92CE754BB78E /* GCDWebServerResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3626B94094672CB1C9DEA32B9F9502E1 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A014B3A6C4E5CFA3E4DE307B90604A /* TaskDelegate.swift */; }; + 36E0FA5FE4424D20F0215B1C2CD85D90 /* GCDWebServerRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A9CAB6031EE58AA1643806530AAA4DDD /* GCDWebServerRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 382EEA9832CF0E0860B998EAD0EE66E1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F581A519A535CA5FCC23235961004C18 /* SystemConfiguration.framework */; }; + 38974DB132715266ADE00F2E3DFBB320 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 396153660EE28DAAF20B789B5EB65104 /* Pods-ShadowsocksX-NG-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 24B01D81E3D7058FA14A053EC19874D0 /* Pods-ShadowsocksX-NG-dummy.m */; }; + 3DD0362B0B6B939B5D087A150121A4B1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 3E715DFE443524EB6ADE892E4A676224 /* GCDWebServerMultiPartFormRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 332ACCF53DA56255BCDB92E92475A51E /* GCDWebServerMultiPartFormRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48FE45BD7BF4ABB32A024550ED96B4C6 /* GCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = CD639ADC8DEDEF3134D5CC65E9481B1B /* GCDWebServerStreamedResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4A6AF0A712D4C473177BE88389D15D2A /* MASDictionaryTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 29C6391EC74D8F0B20D3C7B23F409A79 /* MASDictionaryTransformer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4EDE49009B5B68074CD71F8B362F0DDC /* GCDWebServerDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D83581D01E98E7FBCE531F4D826138A /* GCDWebServerDataRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51358F3E24AC8F1A4172E388769FF1FA /* MASShortcutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC10337C8AD93957F289E193D30644F /* MASShortcutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5387216E723A3C68E851CA15573CDD71 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C3DFC72D09E04176703E5C47943F521 /* Request.swift */; }; + 53D63A17DB43C044EFBAA17337600276 /* GCDWebServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7262F05AABD2F2F8116F28E4444730 /* GCDWebServerRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 58CE04D9C6CAC7243825ABF4AB20EF32 /* MASShortcutValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 67E329D8A58E01DFEDEBC4ECB73BCB04 /* MASShortcutValidator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5A30DAB76BB1814664FA7DC30939DA24 /* MASShortcutBinder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B3D222C908B57140B734E3CF98FBE99 /* MASShortcutBinder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5F1FA9D431587CD257C703AF16134030 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C75B3D4578ADA314E1C779DB5ECAA89B /* ja.lproj */; }; + 5FF7D42F51FEAEB192E61355AAEAC6DE /* MASShortcutMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8134B11FCAB921895AB127714E70D06F /* MASShortcutMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61200D01A1855D7920CEF835C8BE00B0 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A78ADD0E2187A79B80359263F8D58DC /* DispatchQueue+Alamofire.swift */; }; + 618D3C71663174E07B65950421C46D48 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7A60DCFEEFE6028E803545102BA75B1 /* AppKit.framework */; }; + 62F65AD8DC4F0F9610F4B8B4738EC094 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 048EA0F03DC206107638B14EB0B22590 /* ServerTrustPolicy.swift */; }; + 66AD0D86950A5C05121AE482F5257717 /* GCDWebServerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 883FD374D1F5406153C9E25ED24B8921 /* GCDWebServerConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66DEB394C39F5DCCD70A27ECEF274983 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AB0D38FFE12F18677596FC69DB07A5BC /* de.lproj */; }; + 6747832B85949C75C746C2EA6792B0C8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 6B4361F5ADC6268E7953732371174FE9 /* MASShortcut-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73446AD40BC622BA16D088399746703A /* MASShortcut-dummy.m */; }; + 6C62ACD1AF9B80626023D3E654D3E77B /* GCDWebServerStreamedResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A824D6AF73605FD4B0434931B70C7CE /* GCDWebServerStreamedResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74EFCC6DC65CEBCF60B106F7FBB14EA2 /* MASShortcutMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = BA3485D194A4B9E4D8751BC5A5321E9B /* MASShortcutMonitor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 751AC207B038ADC338015FD80AA54B76 /* MASLocalization.h in Headers */ = {isa = PBXBuildFile; fileRef = D03A4819F4C6095A9477FED1229B7A77 /* MASLocalization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76537FCDFF46E2EAA84E9632DB6A21ED /* MASKeyMasks.h in Headers */ = {isa = PBXBuildFile; fileRef = C55C71D66BDD301C849C60D2C5DC9C23 /* MASKeyMasks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B5FE28C7EA4122B0598738E54DBEBD8 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4066248D5CB3239512D186B38644FD /* SessionDelegate.swift */; }; + 7B70A32CB535894B889DC0400D0DE4B5 /* GCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 69EABE25139B92E133ACB9E48FB95497 /* GCDWebServerDataRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7C46C6DFBF9F5A96C6BCE1C93052B63D /* GCDWebServerHTTPStatusCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D782BF889898D9E5258D79D2A4DA8EC /* GCDWebServerHTTPStatusCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7D8CC01E8C9EFFF9F4D65406CDE0AB66 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6439601D189D6EA4EE34BBB5E8D1B9 /* Result.swift */; }; + 7E20F5346ADC8F4F5C069EDDE10897FD /* MASShortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = EB80202EEB9A104B8394F02CC078ADFC /* MASShortcut.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81B6397FECC803695902CEDB37CB4DFA /* MASShortcutBinder.h in Headers */ = {isa = PBXBuildFile; fileRef = A419B812B106CBEFA00870784818213C /* MASShortcutBinder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 886E89D85907BBD7A8C8BAA088D23E3D /* GCDWebServerFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C4942853CFF0AF10EE0507A6DB64F7B /* GCDWebServerFileResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8C5EA18EEE22A60BF10955E38F0D3A75 /* MASShortcutValidator.h in Headers */ = {isa = PBXBuildFile; fileRef = 26798DB74F28DE87259D2EC77916C658 /* MASShortcutValidator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FFA3A6A77962B3A36B009A49634D081 /* MASHotKey.m in Sources */ = {isa = PBXBuildFile; fileRef = FE9FE21981CBAA8F5535A05127F08FFD /* MASHotKey.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 95EE31BA6E30FA4FF0F07AE21C5F45D7 /* Pods-ShadowsocksX-NG-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14A9EC2BB1EC6484018A5EB4B9B2C231 /* Pods-ShadowsocksX-NG-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97B374490F695A6ECB06271EF080EB6C /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AFB4B923C938302D83D3C7BBB013CC39 /* nl.lproj */; }; + 9B622302DDDA1881AC9ABA9EA4C81564 /* BRLOptionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = DB80A4130B50AF90720FF211504FB9E9 /* BRLOptionParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DB91F7B392D045AB8451F515D20D649 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + 9ED2BB2981896E0A39EFA365503F58CE /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB0EBA1E1100F179EBAE135039DE532C /* AFError.swift */; }; + A2A6F71B727312BD45CC7A4AAD7B0AB7 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 253E551C1B9859C14CFA9C52573A09F5 /* NetworkReachabilityManager.swift */; }; + A4DBF0AB2E88B1A9D1078042F47618B0 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = EDE850D2C845A4E04C32A0E8943E5168 /* ru.lproj */; }; + A9EEEA7477981DEEBC72432DE9990A4B /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 844CBFCCA003D23AC4446B0970F5FF96 /* Alamofire-dummy.m */; }; + AA7CDF00DFA1EAFF7F28CAF33FE5BC37 /* MASHotKey.h in Headers */ = {isa = PBXBuildFile; fileRef = AECF9A29B7AECE459E5A34AC4DB91488 /* MASHotKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACBE29C4BF8BAEA483D6EEA940FE5314 /* MASShortcutView+Bindings.m in Sources */ = {isa = PBXBuildFile; fileRef = 38100CF1A92136DA8A810B1CD5D9D2B4 /* MASShortcutView+Bindings.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; ADE45FBACDF07286A544DC20605FE624 /* Pods-proxy_conf_helper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE50445A73ECB9A2ED31A6FF93D45808 /* Pods-proxy_conf_helper-dummy.m */; }; - AE1EF48399533730D0066E04B22CA2D6 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 352C9ACA5D14E48B378FF32021EAD9B4 /* SessionManager.swift */; }; - B65FCF589DA398C3EFE0128064E510EC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C4A7AA3B3DD74EDA43165A42745D1A /* MultipartFormData.swift */; }; - B7EF65DA3A34ABF3B41F50ADCD198BDC /* GCDWebServerFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = A2AB24692BC4901FA1B8CD5A65C8AA62 /* GCDWebServerFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBEFE2F9CEB73DC7BD97FFA66A0D9D4F /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6648A20B97426F9940955502FA6FF042 /* Validation.swift */; }; - BE5C67A07E289FE1F9BE27335B159997 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83162C9BDFB3C0617CF191D660EC2DA /* ParameterEncoding.swift */; }; - C96E54153198E59FF0F8B9F7408523E0 /* GCDWebServerDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = BE05C895D7CA02C6123697B3944C59D3 /* GCDWebServerDataResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CB6D60925223897FFA2662667DF83E8A /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC11D9EFE483BFE3E6CC4AC3CCC0E8D7 /* Response.swift */; }; - CD97073476795E5EAA07C91A7F7890D2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */; }; - D2B04C075D6CA6AF10C35D8BF7DEF0D3 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9564AF1CDDA43CCBDDB1A7A9D41FD163 /* GCDWebServerFileRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D63E514E26A060F7C90A92AE8E9B49F9 /* GCDWebServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 675C317EFB4447DD15024A74FF8C9E6C /* GCDWebServer-dummy.m */; }; - D7524216B4C0994A50624825DFB7CB6B /* GCDWebServerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C6F72ED24E84D8DC9445729D927B6E8 /* GCDWebServerConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E62DD91C60246BD1E4E8A0AF5D7BF0E7 /* GCDWebServerErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CC694BC2D5AA3651FE2946D4032D0F5 /* GCDWebServerErrorResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E9E49601CF0FCF90E3E962F5DDEFD115 /* Pods-ShadowsocksX-NG-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 24B01D81E3D7058FA14A053EC19874D0 /* Pods-ShadowsocksX-NG-dummy.m */; }; - EA6D2E46B967F447FFC46520EC328B5E /* GCDWebServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 057330267A99F07C8ADE6135AA1F622F /* GCDWebServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EFD264FC408EBF3BA2528E70B08DDD94 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12B556C66780BC3D0BECF011EAF49ECB /* Notifications.swift */; }; - F359857602B1D4C91B4AC3D1A2CDFE1B /* GCDWebServerFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD28F4DA9E9FD6CDF59B9183753B0AD /* GCDWebServerFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F6BECD98B97CBFEBE2C96F0E9E72A6C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B6EC5B2B4F6B09E9967325BF493C9D /* ResponseSerialization.swift */; }; - F8B3D3092ED0417E8CDF32033F6122F5 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8D592A9C0AE4B6C90789AFF29DF516 /* Alamofire.swift */; }; - FBF219CBB84DD6F373B818708C889C9D /* GCDWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3490D661D0DB72BC3A5F94A1C6AE083C /* GCDWebServer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AE1EF48399533730D0066E04B22CA2D6 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35228496116138E6C03F6FB1876BD1D /* SessionManager.swift */; }; + B65FCF589DA398C3EFE0128064E510EC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC031236E7C3009E6DD401034BC35C /* MultipartFormData.swift */; }; + B7EF65DA3A34ABF3B41F50ADCD198BDC /* GCDWebServerFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC7E8CD72FA119611A23DE041B5140C /* GCDWebServerFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBEFE2F9CEB73DC7BD97FFA66A0D9D4F /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43B60DA8283067C12C45F7338A462531 /* Validation.swift */; }; + BE5C67A07E289FE1F9BE27335B159997 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5E61ED6EF54C18FAE2F06428E22B93 /* ParameterEncoding.swift */; }; + C06EE84D23391E9FA94864DEDE34F548 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 90E14D041108C5A6D6FAFADB704613D9 /* fr.lproj */; }; + C50FA5B211B8916770FBE55623B83DA4 /* MASLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = E4E079712B84EA33FBDC4B6E81D8D79E /* MASLocalization.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C96E54153198E59FF0F8B9F7408523E0 /* GCDWebServerDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C43BE7EB97552AD3EE8563CFD356D50F /* GCDWebServerDataResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CB6D60925223897FFA2662667DF83E8A /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 567D8F212F4A6315C60FB1515F8887A2 /* Response.swift */; }; + CD97073476795E5EAA07C91A7F7890D2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */; }; + D2B04C075D6CA6AF10C35D8BF7DEF0D3 /* GCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 530C22E2895216346F4F87BF7F436BC7 /* GCDWebServerFileRequest.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D63E514E26A060F7C90A92AE8E9B49F9 /* GCDWebServer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CA6609061354DCC3F02C0EB2CEE5D0 /* GCDWebServer-dummy.m */; }; + D6EA93219364CDC135BAFE63084F6361 /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 53D5DAAB111208B30EE6665B457791CA /* es.lproj */; }; + D7524216B4C0994A50624825DFB7CB6B /* GCDWebServerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = ACFB62D4A50AD45388DA32F0097C2241 /* GCDWebServerConnection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DE24C629B3DB152EE4924B56E3CC59F5 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 1456802B211CB503F6773EFFB0E476EC /* pl.lproj */; }; + DFA6E4455415B3EB3BB38A9F48EEB044 /* Shortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = F9FDACFE0997D2388C81600CA61071F2 /* Shortcut.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5312C0FED7C61135F252D3A7A112990 /* MASShortcutView.m in Sources */ = {isa = PBXBuildFile; fileRef = B5DFF804A6D3BFC409429DA682703A50 /* MASShortcutView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E560A21728B29AF234BD0F37AFE16F36 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9173DC735D07558D20262553791D744B /* en.lproj */; }; + E62DD91C60246BD1E4E8A0AF5D7BF0E7 /* GCDWebServerErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88148F9C1CEE4F1EEF82261BBF938A56 /* GCDWebServerErrorResponse.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E66F7AFACFC665B23022A09E46815B5C /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8695AB6FAA639E36640736E4AE90D07C /* it.lproj */; }; + E97573A653DE3A4CB8BAC26FB7B3E9A9 /* MASShortcutView+Bindings.h in Headers */ = {isa = PBXBuildFile; fileRef = 59772212BCB28ACB3B10D04732ED8F8D /* MASShortcutView+Bindings.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA6D2E46B967F447FFC46520EC328B5E /* GCDWebServer.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C847943F2CAD8774184593F62DEC64 /* GCDWebServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE3A79FAA60A198321767854B60B772F /* MASDictionaryTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = CB1D03EE623DEF2B8C167F389083A657 /* MASDictionaryTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE85F313D5EC70842C812EB16038F4F2 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 422368F6E15C06536EA1297767A63D08 /* Carbon.framework */; }; + EFD264FC408EBF3BA2528E70B08DDD94 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387EBC243C3CB5EBDADEFA39399C8A31 /* Notifications.swift */; }; + EFFA4247C90B98FD9160F30905A64569 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 523EB4117774721D3A84582CA66D9CCA /* cs.lproj */; }; + F359857602B1D4C91B4AC3D1A2CDFE1B /* GCDWebServerFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 734ECD2C008F0A0CDEA641B3EF6983D3 /* GCDWebServerFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F44386819D44846A436139CEF3D372A5 /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 52A033C0DC8B549D3F002F7D4207F0BC /* zh-Hans.lproj */; }; + F6BECD98B97CBFEBE2C96F0E9E72A6C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E1D63EDF5C7E2D22DA611D440AE114 /* ResponseSerialization.swift */; }; + F8815ECB42FCF09BBC99D3730DFD577C /* MASShortcut.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8F6AD8817DCDF5C429973DFDE855650C /* MASShortcut.bundle */; }; + F8B3D3092ED0417E8CDF32033F6122F5 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C5576728407128F3BE8D96B7922923 /* Alamofire.swift */; }; + F94ACA6AA0DD416E5BF05E2425E5F2A6 /* MASKeyCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = BB03A2A83487FFAD6E394F39AFE570EA /* MASKeyCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FBF219CBB84DD6F373B818708C889C9D /* GCDWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED1AABBB1434105BE0249A77C1D5435 /* GCDWebServer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 408240F5321FFD1270C133C590B77FEC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 88E9EC28B8B46C3631E6B242B50F4442; - remoteInfo = Alamofire; - }; - 7D7286FD822FB02FEAECE006469945BB /* PBXContainerItemProxy */ = { + 0C759341A52320E6F69A83D0A2CA9706 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 5B8B0ED1046111D92895FC95F12DBC10; remoteInfo = GCDWebServer; }; + 8C9C31725D43E9B51254EF5E8D6D91FB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 00C94ED0B49A44FBF0C4E2F6C875CFFC; + remoteInfo = MASShortcut; + }; + A7708F6CFFF6E4FD2E6FDB5109CDF5E7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = D6E5ED8DAF7CA937C8F68F342C48B26E; + remoteInfo = "MASShortcut-MASShortcut"; + }; + CC7BBA37399118CF89A7E1A674EF83EE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 88E9EC28B8B46C3631E6B242B50F4442; + remoteInfo = Alamofire; + }; FDE579D9762D0D9F86EDB1DE6EADE62F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; @@ -98,112 +152,164 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 052330BD03A0DFCDEFF81F8EC5BFEB02 /* BRLOptionParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRLOptionParser-dummy.m"; sourceTree = ""; }; + 048EA0F03DC206107638B14EB0B22590 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; 054C3E84057CD06DB85D99E7AD207F48 /* Pods-proxy_conf_helper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-proxy_conf_helper.debug.xcconfig"; sourceTree = ""; }; - 056695931D97F3BAC1F31181094FF7F0 /* GCDWebServerDataRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerDataRequest.h; path = GCDWebServer/Requests/GCDWebServerDataRequest.h; sourceTree = ""; }; - 057330267A99F07C8ADE6135AA1F622F /* GCDWebServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServer.h; path = GCDWebServer/Core/GCDWebServer.h; sourceTree = ""; }; + 08089D3F4CC12076D2D2B8794E4BC321 /* GCDWebServerURLEncodedFormRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerURLEncodedFormRequest.h; path = GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.h; sourceTree = ""; }; + 084AC6693EA56EA74BB4D3AC5F654C90 /* BRLOptionParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRLOptionParser.xcconfig; sourceTree = ""; }; 089EB7E66F64D3A19BB7681AFCE91031 /* Pods-ShadowsocksX-NG.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.release.xcconfig"; sourceTree = ""; }; + 0A7F223B1591E9E8650F297A91EA618B /* GCDWebServer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GCDWebServer.xcconfig; sourceTree = ""; }; + 0C3DFC72D09E04176703E5C47943F521 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + 0C5179B0059EA422CE3E0CD9D544A9B1 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0E8A27A8C9BD6FF9AE3DCBC4050CCD76 /* Pods-ShadowsocksX-NGTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-frameworks.sh"; sourceTree = ""; }; - 0E8D592A9C0AE4B6C90789AFF29DF516 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - 11B6EC5B2B4F6B09E9967325BF493C9D /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - 12B556C66780BC3D0BECF011EAF49ECB /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 0ED1AABBB1434105BE0249A77C1D5435 /* GCDWebServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServer.m; path = GCDWebServer/Core/GCDWebServer.m; sourceTree = ""; }; + 107BD367638AFAC8F3E01D42A0D1DECE /* Pods_ShadowsocksX_NGTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ShadowsocksX_NGTests.framework; path = "Pods-ShadowsocksX-NGTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 13333F29A08390FCEFECA0FDCDDC919F /* Pods-ShadowsocksX-NG-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-frameworks.sh"; sourceTree = ""; }; + 13CA6609061354DCC3F02C0EB2CEE5D0 /* GCDWebServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GCDWebServer-dummy.m"; sourceTree = ""; }; + 1456802B211CB503F6773EFFB0E476EC /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = pl.lproj; sourceTree = ""; }; 14A9EC2BB1EC6484018A5EB4B9B2C231 /* Pods-ShadowsocksX-NG-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NG-umbrella.h"; sourceTree = ""; }; - 150AAAC15A441418AEA6DFBF159FBEA0 /* GCDWebServerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerConnection.h; path = GCDWebServer/Core/GCDWebServerConnection.h; sourceTree = ""; }; - 1673CAE4B8238FFD59A792823A36A9DF /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; - 193AA1B44C4CB1CFCCEDD6C9741F5211 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; + 15B24A5DDAD858CD6616DD64178BB7A6 /* GCDWebServerErrorResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerErrorResponse.h; path = GCDWebServer/Responses/GCDWebServerErrorResponse.h; sourceTree = ""; }; + 15EC031236E7C3009E6DD401034BC35C /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 1854166C986170C7CC1EC2E0441FBB08 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; 1A8CE48109F7ED7873F4FF9D2D3603AD /* Pods-proxy_conf_helper-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-proxy_conf_helper-acknowledgements.markdown"; sourceTree = ""; }; - 1C058E7895E0BD655DB18CD87B39658B /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; + 1E4066248D5CB3239512D186B38644FD /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; 1F162D37B7B6534A6D80FEE301F586EE /* Pods-ShadowsocksX-NGTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NGTests-acknowledgements.plist"; sourceTree = ""; }; + 1F7F511A7BB871D77D80C8B376050327 /* GCDWebServerDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerDataResponse.h; path = GCDWebServer/Responses/GCDWebServerDataResponse.h; sourceTree = ""; }; + 2301425B249CDDF65E3D16C6A2C1948F /* GCDWebServer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = GCDWebServer.modulemap; sourceTree = ""; }; 24B01D81E3D7058FA14A053EC19874D0 /* Pods-ShadowsocksX-NG-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NG-dummy.m"; sourceTree = ""; }; - 24BCEE536E19B38E28CE6933A0D49A2D /* GCDWebServer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GCDWebServer.xcconfig; sourceTree = ""; }; - 2625C48AD777A2B7E26D2A80E9CD94E7 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 253E551C1B9859C14CFA9C52573A09F5 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 2622E50F246A10BAC80FCFDF60CDB349 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 26798DB74F28DE87259D2EC77916C658 /* MASShortcutValidator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASShortcutValidator.h; path = Framework/MASShortcutValidator.h; sourceTree = ""; }; + 26D435359785FE007E5ACEC4D7D21967 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 281F888B9FFA5F230A528564E73518DF /* GCDWebServerFileRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFileRequest.h; path = GCDWebServer/Requests/GCDWebServerFileRequest.h; sourceTree = ""; }; 28D7F65F9E64735E3320A028DCDDDD90 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 29F1D38D8FBC1D989199E905EA6CA548 /* GCDWebServer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GCDWebServer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D644FB3545AF46CBD6ED919703E7147 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 29C6391EC74D8F0B20D3C7B23F409A79 /* MASDictionaryTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASDictionaryTransformer.m; path = Framework/MASDictionaryTransformer.m; sourceTree = ""; }; + 2A824D6AF73605FD4B0434931B70C7CE /* GCDWebServerStreamedResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerStreamedResponse.h; path = GCDWebServer/Responses/GCDWebServerStreamedResponse.h; sourceTree = ""; }; + 2BC7E8CD72FA119611A23DE041B5140C /* GCDWebServerFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFunctions.h; path = GCDWebServer/Core/GCDWebServerFunctions.h; sourceTree = ""; }; + 2F9A804E1EB5515485FBC3A8075FCDFF /* GCDWebServerMultiPartFormRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerMultiPartFormRequest.m; path = GCDWebServer/Requests/GCDWebServerMultiPartFormRequest.m; sourceTree = ""; }; + 332ACCF53DA56255BCDB92E92475A51E /* GCDWebServerMultiPartFormRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerMultiPartFormRequest.h; path = GCDWebServer/Requests/GCDWebServerMultiPartFormRequest.h; sourceTree = ""; }; 3358F45A5BEC1A7F725167CD1969EDC8 /* Pods-ShadowsocksX-NG-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NG-acknowledgements.markdown"; sourceTree = ""; }; - 3490D661D0DB72BC3A5F94A1C6AE083C /* GCDWebServer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServer.m; path = GCDWebServer/Core/GCDWebServer.m; sourceTree = ""; }; - 352C9ACA5D14E48B378FF32021EAD9B4 /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; - 3565E299C44D10C2D206FDCD078A0008 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - 383ADB6B629F7BC3B7FB986648404A88 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - 41B03492069EA8D52FDD5E9F8CC3749D /* GCDWebServerStreamedResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerStreamedResponse.m; path = GCDWebServer/Responses/GCDWebServerStreamedResponse.m; sourceTree = ""; }; - 432FFBD34AE4D6FE11F7562A7B2E2DF6 /* GCDWebServerResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerResponse.m; path = GCDWebServer/Core/GCDWebServerResponse.m; sourceTree = ""; }; - 4461C7BE603BCBC96BA24E3E752C6AC0 /* BRLOptionParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRLOptionParser.h; path = BRLOptionParser/BRLOptionParser.h; sourceTree = ""; }; + 36E1D63EDF5C7E2D22DA611D440AE114 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MASShortcut.xcconfig; sourceTree = ""; }; + 38100CF1A92136DA8A810B1CD5D9D2B4 /* MASShortcutView+Bindings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MASShortcutView+Bindings.m"; path = "Framework/MASShortcutView+Bindings.m"; sourceTree = ""; }; + 387EBC243C3CB5EBDADEFA39399C8A31 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 3A7262F05AABD2F2F8116F28E4444730 /* GCDWebServerRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerRequest.m; path = GCDWebServer/Core/GCDWebServerRequest.m; sourceTree = ""; }; + 3A74752374CF19171D7037E55F877396 /* MASShortcut.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = MASShortcut.modulemap; sourceTree = ""; }; + 422368F6E15C06536EA1297767A63D08 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Carbon.framework; sourceTree = DEVELOPER_DIR; }; + 43B60DA8283067C12C45F7338A462531 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; 46662EB64876AD1C891F548C69A89E89 /* Pods-ShadowsocksX-NGTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ShadowsocksX-NGTests-dummy.m"; sourceTree = ""; }; - 49E50A971405B804294572CAAD1D1F90 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 4BD69E62A30DA9C6468DE578D50E5FB0 /* GCDWebServerRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerRequest.m; path = GCDWebServer/Core/GCDWebServerRequest.m; sourceTree = ""; }; + 4779AB5A8E8180D6F562A9859A27095A /* ResourceBundle-MASShortcut-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MASShortcut-Info.plist"; sourceTree = ""; }; + 4A78ADD0E2187A79B80359263F8D58DC /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 4BC10337C8AD93957F289E193D30644F /* MASShortcutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASShortcutView.h; path = Framework/MASShortcutView.h; sourceTree = ""; }; + 4D83581D01E98E7FBCE531F4D826138A /* GCDWebServerDataRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerDataRequest.h; path = GCDWebServer/Requests/GCDWebServerDataRequest.h; sourceTree = ""; }; + 516F91C50535F8F6F640F67E641997A3 /* GCDWebServer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GCDWebServer.framework; path = GCDWebServer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 521DF5ED2D6DDCC2CD0241C6758A82E8 /* GCDWebServerPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerPrivate.h; path = GCDWebServer/Core/GCDWebServerPrivate.h; sourceTree = ""; }; + 523EB4117774721D3A84582CA66D9CCA /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = cs.lproj; sourceTree = ""; }; + 52A033C0DC8B549D3F002F7D4207F0BC /* zh-Hans.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = "zh-Hans.lproj"; sourceTree = ""; }; 52F51F94701ABD692BFFC9F92AE2E115 /* Pods-ShadowsocksX-NG-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ShadowsocksX-NG-acknowledgements.plist"; sourceTree = ""; }; - 56CBA6D73D3D0B47B5D2DCA98FD3514E /* GCDWebServerURLEncodedFormRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerURLEncodedFormRequest.h; path = GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.h; sourceTree = ""; }; - 5BF25F29EE771444894D4B4BD6A5094A /* GCDWebServerMultiPartFormRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerMultiPartFormRequest.m; path = GCDWebServer/Requests/GCDWebServerMultiPartFormRequest.m; sourceTree = ""; }; + 530C22E2895216346F4F87BF7F436BC7 /* GCDWebServerFileRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFileRequest.m; path = GCDWebServer/Requests/GCDWebServerFileRequest.m; sourceTree = ""; }; + 53A014B3A6C4E5CFA3E4DE307B90604A /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; + 53D5DAAB111208B30EE6665B457791CA /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = es.lproj; sourceTree = ""; }; + 567D8F212F4A6315C60FB1515F8887A2 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 59772212BCB28ACB3B10D04732ED8F8D /* MASShortcutView+Bindings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASShortcutView+Bindings.h"; path = "Framework/MASShortcutView+Bindings.h"; sourceTree = ""; }; + 5C4942853CFF0AF10EE0507A6DB64F7B /* GCDWebServerFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFileResponse.m; path = GCDWebServer/Responses/GCDWebServerFileResponse.m; sourceTree = ""; }; 5D84D92D27CE8A6F5C45E8A03155C1CF /* Pods-proxy_conf_helper-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-frameworks.sh"; sourceTree = ""; }; - 5DD6170F5D4F70A833509C495183FBA3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5E949AC812278EA6428E8B1B3F4567E5 /* libBRLOptionParser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBRLOptionParser.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 622DEEE18C4E0A0DD196A4D2D8853154 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 65715F792D70CDE4E67F1EB98531E233 /* GCDWebServerStreamedResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerStreamedResponse.h; path = GCDWebServer/Responses/GCDWebServerStreamedResponse.h; sourceTree = ""; }; - 6648A20B97426F9940955502FA6FF042 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - 675C317EFB4447DD15024A74FF8C9E6C /* GCDWebServer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GCDWebServer-dummy.m"; sourceTree = ""; }; - 781B71F26694E106B9C6014A4D828CFE /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - 78FDF9432C1735D2CE78FC0BBD37B6D3 /* GCDWebServer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = GCDWebServer.modulemap; sourceTree = ""; }; - 7B884322F7F32E5886E831225EF61A24 /* GCDWebServerErrorResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerErrorResponse.h; path = GCDWebServer/Responses/GCDWebServerErrorResponse.h; sourceTree = ""; }; - 7EA43A03295E967E8CE48DC3D41B1FB1 /* GCDWebServerResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerResponse.h; path = GCDWebServer/Core/GCDWebServerResponse.h; sourceTree = ""; }; - 8020307C336BF75396517D172B6CCBA0 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; }; + 5DA31567241C5316DE5F728BA3DE8DA6 /* BRLOptionParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRLOptionParser.m; path = BRLOptionParser/BRLOptionParser.m; sourceTree = ""; }; + 67E329D8A58E01DFEDEBC4ECB73BCB04 /* MASShortcutValidator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASShortcutValidator.m; path = Framework/MASShortcutValidator.m; sourceTree = ""; }; + 69EABE25139B92E133ACB9E48FB95497 /* GCDWebServerDataRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerDataRequest.m; path = GCDWebServer/Requests/GCDWebServerDataRequest.m; sourceTree = ""; }; + 6B3D222C908B57140B734E3CF98FBE99 /* MASShortcutBinder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASShortcutBinder.m; path = Framework/MASShortcutBinder.m; sourceTree = ""; }; + 6E747DD2399CCE1B2803AD47C858B840 /* Pods_ShadowsocksX_NG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ShadowsocksX_NG.framework; path = "Pods-ShadowsocksX-NG.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 73446AD40BC622BA16D088399746703A /* MASShortcut-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MASShortcut-dummy.m"; sourceTree = ""; }; + 734ECD2C008F0A0CDEA641B3EF6983D3 /* GCDWebServerFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFunctions.m; path = GCDWebServer/Core/GCDWebServerFunctions.m; sourceTree = ""; }; + 7769179E7E99FFDE1312346DF91A8A1D /* MASShortcut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASShortcut.m; path = Framework/MASShortcut.m; sourceTree = ""; }; + 8134B11FCAB921895AB127714E70D06F /* MASShortcutMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASShortcutMonitor.h; path = Framework/MASShortcutMonitor.h; sourceTree = ""; }; + 81A5C0C5F96747880A33B1404380A4FF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 83323A1A2936BBA3D386DCC078E3821E /* Pods-ShadowsocksX-NGTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ShadowsocksX-NGTests-acknowledgements.markdown"; sourceTree = ""; }; - 8C6444C9A87ED6919A7864A0C9D70A4C /* GCDWebServerURLEncodedFormRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerURLEncodedFormRequest.m; path = GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.m; sourceTree = ""; }; - 8C6F72ED24E84D8DC9445729D927B6E8 /* GCDWebServerConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerConnection.m; path = GCDWebServer/Core/GCDWebServerConnection.m; sourceTree = ""; }; - 8CC694BC2D5AA3651FE2946D4032D0F5 /* GCDWebServerErrorResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerErrorResponse.m; path = GCDWebServer/Responses/GCDWebServerErrorResponse.m; sourceTree = ""; }; - 8CD28F4DA9E9FD6CDF59B9183753B0AD /* GCDWebServerFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFunctions.m; path = GCDWebServer/Core/GCDWebServerFunctions.m; sourceTree = ""; }; + 844CBFCCA003D23AC4446B0970F5FF96 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + 8695AB6FAA639E36640736E4AE90D07C /* it.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = it.lproj; sourceTree = ""; }; + 88148F9C1CEE4F1EEF82261BBF938A56 /* GCDWebServerErrorResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerErrorResponse.m; path = GCDWebServer/Responses/GCDWebServerErrorResponse.m; sourceTree = ""; }; + 883FD374D1F5406153C9E25ED24B8921 /* GCDWebServerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerConnection.h; path = GCDWebServer/Core/GCDWebServerConnection.h; sourceTree = ""; }; + 8B5E61ED6EF54C18FAE2F06428E22B93 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; 8CDD45C6D7A038F415A78787317E931A /* Pods-proxy_conf_helper-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-proxy_conf_helper-resources.sh"; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9564AF1CDDA43CCBDDB1A7A9D41FD163 /* GCDWebServerFileRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFileRequest.m; path = GCDWebServer/Requests/GCDWebServerFileRequest.m; sourceTree = ""; }; + 8D782BF889898D9E5258D79D2A4DA8EC /* GCDWebServerHTTPStatusCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerHTTPStatusCodes.h; path = GCDWebServer/Core/GCDWebServerHTTPStatusCodes.h; sourceTree = ""; }; + 8F6AD8817DCDF5C429973DFDE855650C /* MASShortcut.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = MASShortcut.bundle; path = MASShortcut.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 90E14D041108C5A6D6FAFADB704613D9 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = fr.lproj; sourceTree = ""; }; + 9173DC735D07558D20262553791D744B /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = en.lproj; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9681E05358DC8416C0EE292B3047C10E /* GCDWebServer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GCDWebServer-umbrella.h"; sourceTree = ""; }; + 97959737DD67EFD1D7AB5F26607875F2 /* zh-Hant.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = "zh-Hant.lproj"; sourceTree = ""; }; 98522BF2EB25C0255284080F9CA3E195 /* Pods-ShadowsocksX-NG.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NG.debug.xcconfig"; sourceTree = ""; }; 9B8B5CBA357BDB968C73E8F58DFBC74C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9BA2A0099476E08B6CC8026BDF0C603E /* Pods-ShadowsocksX-NGTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.debug.xcconfig"; sourceTree = ""; }; - 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - A2AB24692BC4901FA1B8CD5A65C8AA62 /* GCDWebServerFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFunctions.h; path = GCDWebServer/Core/GCDWebServerFunctions.h; sourceTree = ""; }; + 9C4B2C128C8F507F0E716EC512D532D2 /* MASShortcut-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcut-prefix.pch"; sourceTree = ""; }; + A419B812B106CBEFA00870784818213C /* MASShortcutBinder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASShortcutBinder.h; path = Framework/MASShortcutBinder.h; sourceTree = ""; }; A5055B8EFFFBEDE50909E935D4BCA446 /* Pods-proxy_conf_helper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-proxy_conf_helper.release.xcconfig"; sourceTree = ""; }; - A51D2862E977EC32406F9AB39ECEC3BF /* GCDWebServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GCDWebServer-prefix.pch"; sourceTree = ""; }; - A628D7F35A0F9EBD66407BDCC9C92D20 /* Pods_ShadowsocksX_NGTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NGTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A9CAB6031EE58AA1643806530AAA4DDD /* GCDWebServerRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerRequest.h; path = GCDWebServer/Core/GCDWebServerRequest.h; sourceTree = ""; }; + AB0D38FFE12F18677596FC69DB07A5BC /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = de.lproj; sourceTree = ""; }; + ACFB62D4A50AD45388DA32F0097C2241 /* GCDWebServerConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerConnection.m; path = GCDWebServer/Core/GCDWebServerConnection.m; sourceTree = ""; }; AE6E689502E4366B125481CD898B947E /* Pods-proxy_conf_helper-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-proxy_conf_helper-acknowledgements.plist"; sourceTree = ""; }; - B2E64BA5DE520D1FF8D157D1948EF678 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; + AECF9A29B7AECE459E5A34AC4DB91488 /* MASHotKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASHotKey.h; path = Framework/MASHotKey.h; sourceTree = ""; }; + AF1D2790CBE48EA409C37174C263BBBB /* ko.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = ko.lproj; sourceTree = ""; }; + AFB4B923C938302D83D3C7BBB013CC39 /* nl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = nl.lproj; sourceTree = ""; }; B30805F63C611810B322187824EBC4A5 /* Pods-ShadowsocksX-NGTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NGTests-resources.sh"; sourceTree = ""; }; - B49FCFC5427009EB0DE924D8E6689486 /* GCDWebServerDataResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerDataResponse.h; path = GCDWebServer/Responses/GCDWebServerDataResponse.h; sourceTree = ""; }; - B7E6D819AE4FECE3068ED91259133EAC /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - BA947346171BBF9CB75B49AF462D0A14 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BAA6E2FFB996A81C9D31918A563B43FB /* BRLOptionParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BRLOptionParser.m; path = BRLOptionParser/BRLOptionParser.m; sourceTree = ""; }; - BB1A40A42CB3E3DE3C7FB21A038462FD /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - BE05C895D7CA02C6123697B3944C59D3 /* GCDWebServerDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerDataResponse.m; path = GCDWebServer/Responses/GCDWebServerDataResponse.m; sourceTree = ""; }; - BE672B43951C625CA5F89E448A620AB0 /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = ""; }; - BE93E2446670327B7B8B5F4713BB6AF3 /* BRLOptionParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRLOptionParser-prefix.pch"; sourceTree = ""; }; - C12AC1F78F621586EC3C233BD8CF4BE0 /* BRLOptionParser.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRLOptionParser.xcconfig; sourceTree = ""; }; - C18C5D68D2A979595D2A50A1D65A8AF2 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; - C83162C9BDFB3C0617CF191D660EC2DA /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - C9C4A7AA3B3DD74EDA43165A42745D1A /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - CA78677B47A82041B6A0C96CE51F76C2 /* GCDWebServerPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerPrivate.h; path = GCDWebServer/Core/GCDWebServerPrivate.h; sourceTree = ""; }; + B35228496116138E6C03F6FB1876BD1D /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; + B3C847943F2CAD8774184593F62DEC64 /* GCDWebServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServer.h; path = GCDWebServer/Core/GCDWebServer.h; sourceTree = ""; }; + B47B95553B8446AB4C05DB6C787C1923 /* GCDWebServerFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFileResponse.h; path = GCDWebServer/Responses/GCDWebServerFileResponse.h; sourceTree = ""; }; + B5DFF804A6D3BFC409429DA682703A50 /* MASShortcutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASShortcutView.m; path = Framework/MASShortcutView.m; sourceTree = ""; }; + BA3485D194A4B9E4D8751BC5A5321E9B /* MASShortcutMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASShortcutMonitor.m; path = Framework/MASShortcutMonitor.m; sourceTree = ""; }; + BB03A2A83487FFAD6E394F39AFE570EA /* MASKeyCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASKeyCodes.h; path = Framework/MASKeyCodes.h; sourceTree = ""; }; + BE672B43951C625CA5F89E448A620AB0 /* Pods-ShadowsocksX-NGTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-ShadowsocksX-NGTests.modulemap"; sourceTree = ""; }; + BE8739A57CFBA2B252B9323870F7F914 /* GCDWebServerResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerResponse.h; path = GCDWebServer/Core/GCDWebServerResponse.h; sourceTree = ""; }; + C03AA4D681FDF11A4D5D92CE754BB78E /* GCDWebServerResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerResponse.m; path = GCDWebServer/Core/GCDWebServerResponse.m; sourceTree = ""; }; + C2B3BEE547EDC92417A8E332AF53292F /* libPods-proxy_conf_helper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-proxy_conf_helper.a"; path = "libPods-proxy_conf_helper.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + C43BE7EB97552AD3EE8563CFD356D50F /* GCDWebServerDataResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerDataResponse.m; path = GCDWebServer/Responses/GCDWebServerDataResponse.m; sourceTree = ""; }; + C55C71D66BDD301C849C60D2C5DC9C23 /* MASKeyMasks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASKeyMasks.h; path = Framework/MASKeyMasks.h; sourceTree = ""; }; + C75B3D4578ADA314E1C779DB5ECAA89B /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = ja.lproj; sourceTree = ""; }; + CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + CB1D03EE623DEF2B8C167F389083A657 /* MASDictionaryTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASDictionaryTransformer.h; path = Framework/MASDictionaryTransformer.h; sourceTree = ""; }; + CB2E5FAB2E41A523334D78A648DA85BD /* libBRLOptionParser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBRLOptionParser.a; path = libBRLOptionParser.a; sourceTree = BUILT_PRODUCTS_DIR; }; + CBB13842D20339B1AA4DBC88598BE195 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; + CCB68427884134CB40644A07D36C7213 /* BRLOptionParser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRLOptionParser-dummy.m"; sourceTree = ""; }; + CD639ADC8DEDEF3134D5CC65E9481B1B /* GCDWebServerStreamedResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerStreamedResponse.m; path = GCDWebServer/Responses/GCDWebServerStreamedResponse.m; sourceTree = ""; }; + CDA7F4E570344BA6692850FAD6D5DF52 /* BRLOptionParser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRLOptionParser-prefix.pch"; sourceTree = ""; }; CE50445A73ECB9A2ED31A6FF93D45808 /* Pods-proxy_conf_helper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-proxy_conf_helper-dummy.m"; sourceTree = ""; }; - D35A95B17B77B37E12236498D60B8478 /* GCDWebServerFileResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerFileResponse.m; path = GCDWebServer/Responses/GCDWebServerFileResponse.m; sourceTree = ""; }; - D534FA8B75596A674095DAA7CA3B08D1 /* libPods-proxy_conf_helper.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-proxy_conf_helper.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - D7C15E08E56E065130F76FC8DC8C8619 /* GCDWebServerFileRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFileRequest.h; path = GCDWebServer/Requests/GCDWebServerFileRequest.h; sourceTree = ""; }; + D0279E4819926ED0B736DB036058CD11 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D03A4819F4C6095A9477FED1229B7A77 /* MASLocalization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLocalization.h; path = Framework/MASLocalization.h; sourceTree = ""; }; + D354B988E94145D21D7ACC846F6E3A69 /* GCDWebServerURLEncodedFormRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerURLEncodedFormRequest.m; path = GCDWebServer/Requests/GCDWebServerURLEncodedFormRequest.m; sourceTree = ""; }; + D3DC4D6EBE59976B5E4AC12E8E959231 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Alamofire.modulemap; sourceTree = ""; }; + D58DAAC44590953C26FC71CE97BBB28F /* MASShortcut.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MASShortcut.framework; path = MASShortcut.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D7E8128F302CF60BEF206008CE11F6D3 /* Pods-ShadowsocksX-NGTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ShadowsocksX-NGTests-umbrella.h"; sourceTree = ""; }; - D86AC40F610A78D1B5E5AC9528E70ADB /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - D9D61BAD16772ED8DBCD878F6BBF7025 /* GCDWebServerHTTPStatusCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerHTTPStatusCodes.h; path = GCDWebServer/Core/GCDWebServerHTTPStatusCodes.h; sourceTree = ""; }; - DC250BF8313F337272DBC9DE1FB6DB6B /* Pods-ShadowsocksX-NG.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-ShadowsocksX-NG.modulemap"; sourceTree = ""; }; - E02D3FE330950F96E4826E6785950F95 /* GCDWebServerDataRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GCDWebServerDataRequest.m; path = GCDWebServer/Requests/GCDWebServerDataRequest.m; sourceTree = ""; }; + DB6439601D189D6EA4EE34BBB5E8D1B9 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; + DB80A4130B50AF90720FF211504FB9E9 /* BRLOptionParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BRLOptionParser.h; path = BRLOptionParser/BRLOptionParser.h; sourceTree = ""; }; + DC250BF8313F337272DBC9DE1FB6DB6B /* Pods-ShadowsocksX-NG.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-ShadowsocksX-NG.modulemap"; sourceTree = ""; }; + DEA37CFFE5FCF2A505A2EC3468C0E635 /* MASShortcut-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcut-umbrella.h"; sourceTree = ""; }; + E13D6DE7B7967B4C983579F0E5E686F7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E4E079712B84EA33FBDC4B6E81D8D79E /* MASLocalization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLocalization.m; path = Framework/MASLocalization.m; sourceTree = ""; }; + E7A60DCFEEFE6028E803545102BA75B1 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; EA41BEE3B4D9F1A89F0135CA91A7F472 /* Pods-ShadowsocksX-NG-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ShadowsocksX-NG-resources.sh"; sourceTree = ""; }; - EAEC4F2E970093B9815E645E63781C40 /* GCDWebServerMultiPartFormRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerMultiPartFormRequest.h; path = GCDWebServer/Requests/GCDWebServerMultiPartFormRequest.h; sourceTree = ""; }; - EB10970D56AE3E8EC08A3B6CB0ECF896 /* GCDWebServerFileResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerFileResponse.h; path = GCDWebServer/Responses/GCDWebServerFileResponse.h; sourceTree = ""; }; - F5FCCAE1F4AE542376E5F228D7463E4F /* GCDWebServer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GCDWebServer-umbrella.h"; sourceTree = ""; }; + EB80202EEB9A104B8394F02CC078ADFC /* MASShortcut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASShortcut.h; path = Framework/MASShortcut.h; sourceTree = ""; }; + EDE850D2C845A4E04C32A0E8943E5168 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; path = ru.lproj; sourceTree = ""; }; + F1CC0A417713CD6705E37B71B89C3B9A /* GCDWebServer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GCDWebServer-prefix.pch"; sourceTree = ""; }; + F3C5576728407128F3BE8D96B7922923 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + F581A519A535CA5FCC23235961004C18 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; F67191B1F87DA238C4D87250DFBE43DD /* Pods-ShadowsocksX-NGTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ShadowsocksX-NGTests.release.xcconfig"; sourceTree = ""; }; - FB6A7098E32F88CAD8F6D0BB8E334D4C /* Pods_ShadowsocksX_NG.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ShadowsocksX_NG.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC11D9EFE483BFE3E6CC4AC3CCC0E8D7 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - FE4DE2F9318899EC55FF739F09547B9F /* GCDWebServerRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCDWebServerRequest.h; path = GCDWebServer/Core/GCDWebServerRequest.h; sourceTree = ""; }; + F9FDACFE0997D2388C81600CA61071F2 /* Shortcut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Shortcut.h; path = Framework/Shortcut.h; sourceTree = ""; }; + FB0EBA1E1100F179EBAE135039DE532C /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + FE9FE21981CBAA8F5535A05127F08FFD /* MASHotKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASHotKey.m; path = Framework/MASHotKey.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6E7F016811926ED895957BC5F8CE3ACA /* Frameworks */ = { + 06DB63E0064B15C5B39BFF16CDD7970E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5BCD116D40D884DF5E2F4DDC9E3AD53A /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 684E640573B267856B0161607461C7DE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6747832B85949C75C746C2EA6792B0C8 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -248,6 +354,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CDE6AA439381DD5665018F889D1E5A6B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 618D3C71663174E07B65950421C46D48 /* AppKit.framework in Frameworks */, + EE85F313D5EC70842C812EB16038F4F2 /* Carbon.framework in Frameworks */, + 38974DB132715266ADE00F2E3DFBB320 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -269,48 +385,116 @@ path = "Target Support Files/Pods-ShadowsocksX-NGTests"; sourceTree = ""; }; - 5000B1C6A169B988EBFD533C6AE96E51 /* Support Files */ = { + 1CE12A13544A7DE01DC4914BF965B363 /* MASShortcut */ = { isa = PBXGroup; children = ( - C12AC1F78F621586EC3C233BD8CF4BE0 /* BRLOptionParser.xcconfig */, - 052330BD03A0DFCDEFF81F8EC5BFEB02 /* BRLOptionParser-dummy.m */, - BE93E2446670327B7B8B5F4713BB6AF3 /* BRLOptionParser-prefix.pch */, + CB1D03EE623DEF2B8C167F389083A657 /* MASDictionaryTransformer.h */, + 29C6391EC74D8F0B20D3C7B23F409A79 /* MASDictionaryTransformer.m */, + AECF9A29B7AECE459E5A34AC4DB91488 /* MASHotKey.h */, + FE9FE21981CBAA8F5535A05127F08FFD /* MASHotKey.m */, + BB03A2A83487FFAD6E394F39AFE570EA /* MASKeyCodes.h */, + C55C71D66BDD301C849C60D2C5DC9C23 /* MASKeyMasks.h */, + D03A4819F4C6095A9477FED1229B7A77 /* MASLocalization.h */, + E4E079712B84EA33FBDC4B6E81D8D79E /* MASLocalization.m */, + EB80202EEB9A104B8394F02CC078ADFC /* MASShortcut.h */, + 7769179E7E99FFDE1312346DF91A8A1D /* MASShortcut.m */, + A419B812B106CBEFA00870784818213C /* MASShortcutBinder.h */, + 6B3D222C908B57140B734E3CF98FBE99 /* MASShortcutBinder.m */, + 8134B11FCAB921895AB127714E70D06F /* MASShortcutMonitor.h */, + BA3485D194A4B9E4D8751BC5A5321E9B /* MASShortcutMonitor.m */, + 26798DB74F28DE87259D2EC77916C658 /* MASShortcutValidator.h */, + 67E329D8A58E01DFEDEBC4ECB73BCB04 /* MASShortcutValidator.m */, + 4BC10337C8AD93957F289E193D30644F /* MASShortcutView.h */, + B5DFF804A6D3BFC409429DA682703A50 /* MASShortcutView.m */, + 59772212BCB28ACB3B10D04732ED8F8D /* MASShortcutView+Bindings.h */, + 38100CF1A92136DA8A810B1CD5D9D2B4 /* MASShortcutView+Bindings.m */, + F9FDACFE0997D2388C81600CA61071F2 /* Shortcut.h */, + 86057877B32BFFC4B6076D4A04C85086 /* Resources */, + 75B675F8514C4C085687D6AF166C4255 /* Support Files */, + ); + name = MASShortcut; + path = MASShortcut; + sourceTree = ""; + }; + 49FADCCE8DEE183085171E48794799D0 /* Products */ = { + isa = PBXGroup; + children = ( + 0C5179B0059EA422CE3E0CD9D544A9B1 /* Alamofire.framework */, + 516F91C50535F8F6F640F67E641997A3 /* GCDWebServer.framework */, + CB2E5FAB2E41A523334D78A648DA85BD /* libBRLOptionParser.a */, + C2B3BEE547EDC92417A8E332AF53292F /* libPods-proxy_conf_helper.a */, + 8F6AD8817DCDF5C429973DFDE855650C /* MASShortcut.bundle */, + D58DAAC44590953C26FC71CE97BBB28F /* MASShortcut.framework */, + 6E747DD2399CCE1B2803AD47C858B840 /* Pods_ShadowsocksX_NG.framework */, + 107BD367638AFAC8F3E01D42A0D1DECE /* Pods_ShadowsocksX_NGTests.framework */, + ); + name = Products; + sourceTree = ""; + }; + 5EFAC6B44ACA5F9FCD30CF1C69EECBD0 /* Alamofire */ = { + isa = PBXGroup; + children = ( + FB0EBA1E1100F179EBAE135039DE532C /* AFError.swift */, + F3C5576728407128F3BE8D96B7922923 /* Alamofire.swift */, + 4A78ADD0E2187A79B80359263F8D58DC /* DispatchQueue+Alamofire.swift */, + 15EC031236E7C3009E6DD401034BC35C /* MultipartFormData.swift */, + 253E551C1B9859C14CFA9C52573A09F5 /* NetworkReachabilityManager.swift */, + 387EBC243C3CB5EBDADEFA39399C8A31 /* Notifications.swift */, + 8B5E61ED6EF54C18FAE2F06428E22B93 /* ParameterEncoding.swift */, + 0C3DFC72D09E04176703E5C47943F521 /* Request.swift */, + 567D8F212F4A6315C60FB1515F8887A2 /* Response.swift */, + 36E1D63EDF5C7E2D22DA611D440AE114 /* ResponseSerialization.swift */, + DB6439601D189D6EA4EE34BBB5E8D1B9 /* Result.swift */, + 048EA0F03DC206107638B14EB0B22590 /* ServerTrustPolicy.swift */, + 1E4066248D5CB3239512D186B38644FD /* SessionDelegate.swift */, + B35228496116138E6C03F6FB1876BD1D /* SessionManager.swift */, + 53A014B3A6C4E5CFA3E4DE307B90604A /* TaskDelegate.swift */, + CBB13842D20339B1AA4DBC88598BE195 /* Timeline.swift */, + 43B60DA8283067C12C45F7338A462531 /* Validation.swift */, + F718DC23BBB105D5C81C85C15A0BD222 /* Support Files */, + ); + name = Alamofire; + path = Alamofire; + sourceTree = ""; + }; + 61779C21A0BC42D1B2D2F40D3C2B9F96 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2301425B249CDDF65E3D16C6A2C1948F /* GCDWebServer.modulemap */, + 0A7F223B1591E9E8650F297A91EA618B /* GCDWebServer.xcconfig */, + 13CA6609061354DCC3F02C0EB2CEE5D0 /* GCDWebServer-dummy.m */, + F1CC0A417713CD6705E37B71B89C3B9A /* GCDWebServer-prefix.pch */, + 9681E05358DC8416C0EE292B3047C10E /* GCDWebServer-umbrella.h */, + E13D6DE7B7967B4C983579F0E5E686F7 /* Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/BRLOptionParser"; + path = "../Target Support Files/GCDWebServer"; sourceTree = ""; }; - 5719BC2FF455313AC86A7D2916E845F7 /* Support Files */ = { + 650931D2C5A3A6D4D1B55AD505D6594D /* Pods */ = { isa = PBXGroup; children = ( - 8020307C336BF75396517D172B6CCBA0 /* Alamofire.modulemap */, - C18C5D68D2A979595D2A50A1D65A8AF2 /* Alamofire.xcconfig */, - 383ADB6B629F7BC3B7FB986648404A88 /* Alamofire-dummy.m */, - 2D644FB3545AF46CBD6ED919703E7147 /* Alamofire-prefix.pch */, - BB1A40A42CB3E3DE3C7FB21A038462FD /* Alamofire-umbrella.h */, - 5DD6170F5D4F70A833509C495183FBA3 /* Info.plist */, + 5EFAC6B44ACA5F9FCD30CF1C69EECBD0 /* Alamofire */, + 7C36140EB6EC0CD2744ADE7A7952F26F /* BRLOptionParser */, + F5C902D47EBB0891F881D6456F064038 /* GCDWebServer */, + 1CE12A13544A7DE01DC4914BF965B363 /* MASShortcut */, + ); + name = Pods; + sourceTree = ""; + }; + 75B675F8514C4C085687D6AF166C4255 /* Support Files */ = { + isa = PBXGroup; + children = ( + D0279E4819926ED0B736DB036058CD11 /* Info.plist */, + 3A74752374CF19171D7037E55F877396 /* MASShortcut.modulemap */, + 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */, + 73446AD40BC622BA16D088399746703A /* MASShortcut-dummy.m */, + 9C4B2C128C8F507F0E716EC512D532D2 /* MASShortcut-prefix.pch */, + DEA37CFFE5FCF2A505A2EC3468C0E635 /* MASShortcut-umbrella.h */, + 4779AB5A8E8180D6F562A9859A27095A /* ResourceBundle-MASShortcut-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/Alamofire"; - sourceTree = ""; - }; - 5CB7C42D8E0E0A453DB6D57A2A3D7D0D /* BRLOptionParser */ = { - isa = PBXGroup; - children = ( - 4461C7BE603BCBC96BA24E3E752C6AC0 /* BRLOptionParser.h */, - BAA6E2FFB996A81C9D31918A563B43FB /* BRLOptionParser.m */, - 5000B1C6A169B988EBFD533C6AE96E51 /* Support Files */, - ); - path = BRLOptionParser; - sourceTree = ""; - }; - 648D916E57015940B3943E2D877A7EFA /* OS X */ = { - isa = PBXGroup; - children = ( - 9F07CBE6988BD391FE7A0AE9BAA63882 /* Cocoa.framework */, - 49E50A971405B804294572CAAD1D1F90 /* SystemConfiguration.framework */, - ); - name = "OS X"; + path = "../Target Support Files/MASShortcut"; sourceTree = ""; }; 785842678515C4CDC9428DD20DCD752D /* Targets Support Files */ = { @@ -323,102 +507,46 @@ name = "Targets Support Files"; sourceTree = ""; }; - 796243293F74BCF483A785C91F203289 /* Alamofire */ = { + 7C36140EB6EC0CD2744ADE7A7952F26F /* BRLOptionParser */ = { isa = PBXGroup; children = ( - D86AC40F610A78D1B5E5AC9528E70ADB /* AFError.swift */, - 0E8D592A9C0AE4B6C90789AFF29DF516 /* Alamofire.swift */, - 2625C48AD777A2B7E26D2A80E9CD94E7 /* DispatchQueue+Alamofire.swift */, - C9C4A7AA3B3DD74EDA43165A42745D1A /* MultipartFormData.swift */, - B7E6D819AE4FECE3068ED91259133EAC /* NetworkReachabilityManager.swift */, - 12B556C66780BC3D0BECF011EAF49ECB /* Notifications.swift */, - C83162C9BDFB3C0617CF191D660EC2DA /* ParameterEncoding.swift */, - 781B71F26694E106B9C6014A4D828CFE /* Request.swift */, - FC11D9EFE483BFE3E6CC4AC3CCC0E8D7 /* Response.swift */, - 11B6EC5B2B4F6B09E9967325BF493C9D /* ResponseSerialization.swift */, - 1673CAE4B8238FFD59A792823A36A9DF /* Result.swift */, - 193AA1B44C4CB1CFCCEDD6C9741F5211 /* ServerTrustPolicy.swift */, - 3565E299C44D10C2D206FDCD078A0008 /* SessionDelegate.swift */, - 352C9ACA5D14E48B378FF32021EAD9B4 /* SessionManager.swift */, - 1C058E7895E0BD655DB18CD87B39658B /* TaskDelegate.swift */, - B2E64BA5DE520D1FF8D157D1948EF678 /* Timeline.swift */, - 6648A20B97426F9940955502FA6FF042 /* Validation.swift */, - 5719BC2FF455313AC86A7D2916E845F7 /* Support Files */, + DB80A4130B50AF90720FF211504FB9E9 /* BRLOptionParser.h */, + 5DA31567241C5316DE5F728BA3DE8DA6 /* BRLOptionParser.m */, + 9CAAA39B0E0963CC3C1A25313BEA6EFF /* Support Files */, ); - path = Alamofire; + name = BRLOptionParser; + path = BRLOptionParser; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - D648CE86F139C7CCFD55D5B8A03BE74B /* Frameworks */, - EBE480E49DAE4107333DC7987926D6E4 /* Pods */, - 8E700A1150D559CA2A4DE235FBA7B0F7 /* Products */, + CD75D5B60FCA72FBF7F9C770460B2C26 /* Frameworks */, + 650931D2C5A3A6D4D1B55AD505D6594D /* Pods */, + 49FADCCE8DEE183085171E48794799D0 /* Products */, 785842678515C4CDC9428DD20DCD752D /* Targets Support Files */, ); sourceTree = ""; }; - 80D1C6F4BC4E4DBF8EF7E37CED106452 /* Support Files */ = { + 86057877B32BFFC4B6076D4A04C85086 /* Resources */ = { isa = PBXGroup; children = ( - 78FDF9432C1735D2CE78FC0BBD37B6D3 /* GCDWebServer.modulemap */, - 24BCEE536E19B38E28CE6933A0D49A2D /* GCDWebServer.xcconfig */, - 675C317EFB4447DD15024A74FF8C9E6C /* GCDWebServer-dummy.m */, - A51D2862E977EC32406F9AB39ECEC3BF /* GCDWebServer-prefix.pch */, - F5FCCAE1F4AE542376E5F228D7463E4F /* GCDWebServer-umbrella.h */, - 622DEEE18C4E0A0DD196A4D2D8853154 /* Info.plist */, + 523EB4117774721D3A84582CA66D9CCA /* cs.lproj */, + AB0D38FFE12F18677596FC69DB07A5BC /* de.lproj */, + 9173DC735D07558D20262553791D744B /* en.lproj */, + 53D5DAAB111208B30EE6665B457791CA /* es.lproj */, + 90E14D041108C5A6D6FAFADB704613D9 /* fr.lproj */, + 8695AB6FAA639E36640736E4AE90D07C /* it.lproj */, + C75B3D4578ADA314E1C779DB5ECAA89B /* ja.lproj */, + AF1D2790CBE48EA409C37174C263BBBB /* ko.lproj */, + AFB4B923C938302D83D3C7BBB013CC39 /* nl.lproj */, + 1456802B211CB503F6773EFFB0E476EC /* pl.lproj */, + EDE850D2C845A4E04C32A0E8943E5168 /* ru.lproj */, + 52A033C0DC8B549D3F002F7D4207F0BC /* zh-Hans.lproj */, + 97959737DD67EFD1D7AB5F26607875F2 /* zh-Hant.lproj */, ); - name = "Support Files"; - path = "../Target Support Files/GCDWebServer"; - sourceTree = ""; - }; - 8AACDC8BEA5F54F99281AA46DACD674A /* Core */ = { - isa = PBXGroup; - children = ( - 057330267A99F07C8ADE6135AA1F622F /* GCDWebServer.h */, - 3490D661D0DB72BC3A5F94A1C6AE083C /* GCDWebServer.m */, - 150AAAC15A441418AEA6DFBF159FBEA0 /* GCDWebServerConnection.h */, - 8C6F72ED24E84D8DC9445729D927B6E8 /* GCDWebServerConnection.m */, - 056695931D97F3BAC1F31181094FF7F0 /* GCDWebServerDataRequest.h */, - E02D3FE330950F96E4826E6785950F95 /* GCDWebServerDataRequest.m */, - B49FCFC5427009EB0DE924D8E6689486 /* GCDWebServerDataResponse.h */, - BE05C895D7CA02C6123697B3944C59D3 /* GCDWebServerDataResponse.m */, - 7B884322F7F32E5886E831225EF61A24 /* GCDWebServerErrorResponse.h */, - 8CC694BC2D5AA3651FE2946D4032D0F5 /* GCDWebServerErrorResponse.m */, - D7C15E08E56E065130F76FC8DC8C8619 /* GCDWebServerFileRequest.h */, - 9564AF1CDDA43CCBDDB1A7A9D41FD163 /* GCDWebServerFileRequest.m */, - EB10970D56AE3E8EC08A3B6CB0ECF896 /* GCDWebServerFileResponse.h */, - D35A95B17B77B37E12236498D60B8478 /* GCDWebServerFileResponse.m */, - A2AB24692BC4901FA1B8CD5A65C8AA62 /* GCDWebServerFunctions.h */, - 8CD28F4DA9E9FD6CDF59B9183753B0AD /* GCDWebServerFunctions.m */, - D9D61BAD16772ED8DBCD878F6BBF7025 /* GCDWebServerHTTPStatusCodes.h */, - EAEC4F2E970093B9815E645E63781C40 /* GCDWebServerMultiPartFormRequest.h */, - 5BF25F29EE771444894D4B4BD6A5094A /* GCDWebServerMultiPartFormRequest.m */, - CA78677B47A82041B6A0C96CE51F76C2 /* GCDWebServerPrivate.h */, - FE4DE2F9318899EC55FF739F09547B9F /* GCDWebServerRequest.h */, - 4BD69E62A30DA9C6468DE578D50E5FB0 /* GCDWebServerRequest.m */, - 7EA43A03295E967E8CE48DC3D41B1FB1 /* GCDWebServerResponse.h */, - 432FFBD34AE4D6FE11F7562A7B2E2DF6 /* GCDWebServerResponse.m */, - 65715F792D70CDE4E67F1EB98531E233 /* GCDWebServerStreamedResponse.h */, - 41B03492069EA8D52FDD5E9F8CC3749D /* GCDWebServerStreamedResponse.m */, - 56CBA6D73D3D0B47B5D2DCA98FD3514E /* GCDWebServerURLEncodedFormRequest.h */, - 8C6444C9A87ED6919A7864A0C9D70A4C /* GCDWebServerURLEncodedFormRequest.m */, - ); - name = Core; - sourceTree = ""; - }; - 8E700A1150D559CA2A4DE235FBA7B0F7 /* Products */ = { - isa = PBXGroup; - children = ( - BA947346171BBF9CB75B49AF462D0A14 /* Alamofire.framework */, - 29F1D38D8FBC1D989199E905EA6CA548 /* GCDWebServer.framework */, - 5E949AC812278EA6428E8B1B3F4567E5 /* libBRLOptionParser.a */, - D534FA8B75596A674095DAA7CA3B08D1 /* libPods-proxy_conf_helper.a */, - FB6A7098E32F88CAD8F6D0BB8E334D4C /* Pods_ShadowsocksX_NG.framework */, - A628D7F35A0F9EBD66407BDCC9C92D20 /* Pods_ShadowsocksX_NGTests.framework */, - ); - name = Products; + name = Resources; sourceTree = ""; }; 93AB896DD6AD247E69959A4B8C06F5AC /* Pods-ShadowsocksX-NG */ = { @@ -439,6 +567,28 @@ path = "Target Support Files/Pods-ShadowsocksX-NG"; sourceTree = ""; }; + 9CAAA39B0E0963CC3C1A25313BEA6EFF /* Support Files */ = { + isa = PBXGroup; + children = ( + 084AC6693EA56EA74BB4D3AC5F654C90 /* BRLOptionParser.xcconfig */, + CCB68427884134CB40644A07D36C7213 /* BRLOptionParser-dummy.m */, + CDA7F4E570344BA6692850FAD6D5DF52 /* BRLOptionParser-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/BRLOptionParser"; + sourceTree = ""; + }; + B2A5ED6BF1F3BA8632F2BF072B1D797C /* OS X */ = { + isa = PBXGroup; + children = ( + E7A60DCFEEFE6028E803545102BA75B1 /* AppKit.framework */, + 422368F6E15C06536EA1297767A63D08 /* Carbon.framework */, + CA08FE5653C839C9C87AB4FE9A9AAEB3 /* Cocoa.framework */, + F581A519A535CA5FCC23235961004C18 /* SystemConfiguration.framework */, + ); + name = "OS X"; + sourceTree = ""; + }; B5020B0A649E766997C633601AD85F17 /* Pods-proxy_conf_helper */ = { isa = PBXGroup; children = ( @@ -454,36 +604,84 @@ path = "Target Support Files/Pods-proxy_conf_helper"; sourceTree = ""; }; - D648CE86F139C7CCFD55D5B8A03BE74B /* Frameworks */ = { + CAE8AB766B9BF9B05A5D96F39189E945 /* Core */ = { isa = PBXGroup; children = ( - 648D916E57015940B3943E2D877A7EFA /* OS X */, + B3C847943F2CAD8774184593F62DEC64 /* GCDWebServer.h */, + 0ED1AABBB1434105BE0249A77C1D5435 /* GCDWebServer.m */, + 883FD374D1F5406153C9E25ED24B8921 /* GCDWebServerConnection.h */, + ACFB62D4A50AD45388DA32F0097C2241 /* GCDWebServerConnection.m */, + 4D83581D01E98E7FBCE531F4D826138A /* GCDWebServerDataRequest.h */, + 69EABE25139B92E133ACB9E48FB95497 /* GCDWebServerDataRequest.m */, + 1F7F511A7BB871D77D80C8B376050327 /* GCDWebServerDataResponse.h */, + C43BE7EB97552AD3EE8563CFD356D50F /* GCDWebServerDataResponse.m */, + 15B24A5DDAD858CD6616DD64178BB7A6 /* GCDWebServerErrorResponse.h */, + 88148F9C1CEE4F1EEF82261BBF938A56 /* GCDWebServerErrorResponse.m */, + 281F888B9FFA5F230A528564E73518DF /* GCDWebServerFileRequest.h */, + 530C22E2895216346F4F87BF7F436BC7 /* GCDWebServerFileRequest.m */, + B47B95553B8446AB4C05DB6C787C1923 /* GCDWebServerFileResponse.h */, + 5C4942853CFF0AF10EE0507A6DB64F7B /* GCDWebServerFileResponse.m */, + 2BC7E8CD72FA119611A23DE041B5140C /* GCDWebServerFunctions.h */, + 734ECD2C008F0A0CDEA641B3EF6983D3 /* GCDWebServerFunctions.m */, + 8D782BF889898D9E5258D79D2A4DA8EC /* GCDWebServerHTTPStatusCodes.h */, + 332ACCF53DA56255BCDB92E92475A51E /* GCDWebServerMultiPartFormRequest.h */, + 2F9A804E1EB5515485FBC3A8075FCDFF /* GCDWebServerMultiPartFormRequest.m */, + 521DF5ED2D6DDCC2CD0241C6758A82E8 /* GCDWebServerPrivate.h */, + A9CAB6031EE58AA1643806530AAA4DDD /* GCDWebServerRequest.h */, + 3A7262F05AABD2F2F8116F28E4444730 /* GCDWebServerRequest.m */, + BE8739A57CFBA2B252B9323870F7F914 /* GCDWebServerResponse.h */, + C03AA4D681FDF11A4D5D92CE754BB78E /* GCDWebServerResponse.m */, + 2A824D6AF73605FD4B0434931B70C7CE /* GCDWebServerStreamedResponse.h */, + CD639ADC8DEDEF3134D5CC65E9481B1B /* GCDWebServerStreamedResponse.m */, + 08089D3F4CC12076D2D2B8794E4BC321 /* GCDWebServerURLEncodedFormRequest.h */, + D354B988E94145D21D7ACC846F6E3A69 /* GCDWebServerURLEncodedFormRequest.m */, + ); + name = Core; + sourceTree = ""; + }; + CD75D5B60FCA72FBF7F9C770460B2C26 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B2A5ED6BF1F3BA8632F2BF072B1D797C /* OS X */, ); name = Frameworks; sourceTree = ""; }; - E00B0204545DC7ACDAFF792113E8C436 /* GCDWebServer */ = { + F5C902D47EBB0891F881D6456F064038 /* GCDWebServer */ = { isa = PBXGroup; children = ( - 8AACDC8BEA5F54F99281AA46DACD674A /* Core */, - 80D1C6F4BC4E4DBF8EF7E37CED106452 /* Support Files */, + CAE8AB766B9BF9B05A5D96F39189E945 /* Core */, + 61779C21A0BC42D1B2D2F40D3C2B9F96 /* Support Files */, ); + name = GCDWebServer; path = GCDWebServer; sourceTree = ""; }; - EBE480E49DAE4107333DC7987926D6E4 /* Pods */ = { + F718DC23BBB105D5C81C85C15A0BD222 /* Support Files */ = { isa = PBXGroup; children = ( - 796243293F74BCF483A785C91F203289 /* Alamofire */, - 5CB7C42D8E0E0A453DB6D57A2A3D7D0D /* BRLOptionParser */, - E00B0204545DC7ACDAFF792113E8C436 /* GCDWebServer */, + D3DC4D6EBE59976B5E4AC12E8E959231 /* Alamofire.modulemap */, + 1854166C986170C7CC1EC2E0441FBB08 /* Alamofire.xcconfig */, + 844CBFCCA003D23AC4446B0970F5FF96 /* Alamofire-dummy.m */, + 26D435359785FE007E5ACEC4D7D21967 /* Alamofire-prefix.pch */, + 2622E50F246A10BAC80FCFDF60CDB349 /* Alamofire-umbrella.h */, + 81A5C0C5F96747880A33B1404380A4FF /* Info.plist */, ); - name = Pods; + name = "Support Files"; + path = "../Target Support Files/Alamofire"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 0B2513FB1B010E6777FDD31E5713B882 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 95EE31BA6E30FA4FF0F07AE21C5F45D7 /* Pods-ShadowsocksX-NG-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 49E47E8FB0395F70E77651B02346BF41 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -492,6 +690,26 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 68FE8321E00587BF5072825A5E9B4704 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EE3A79FAA60A198321767854B60B772F /* MASDictionaryTransformer.h in Headers */, + AA7CDF00DFA1EAFF7F28CAF33FE5BC37 /* MASHotKey.h in Headers */, + F94ACA6AA0DD416E5BF05E2425E5F2A6 /* MASKeyCodes.h in Headers */, + 76537FCDFF46E2EAA84E9632DB6A21ED /* MASKeyMasks.h in Headers */, + 751AC207B038ADC338015FD80AA54B76 /* MASLocalization.h in Headers */, + 3076DFAD05E4F7F0356153478F071D74 /* MASShortcut-umbrella.h in Headers */, + 7E20F5346ADC8F4F5C069EDDE10897FD /* MASShortcut.h in Headers */, + 81B6397FECC803695902CEDB37CB4DFA /* MASShortcutBinder.h in Headers */, + 5FF7D42F51FEAEB192E61355AAEAC6DE /* MASShortcutMonitor.h in Headers */, + 8C5EA18EEE22A60BF10955E38F0D3A75 /* MASShortcutValidator.h in Headers */, + E97573A653DE3A4CB8BAC26FB7B3E9A9 /* MASShortcutView+Bindings.h in Headers */, + 51358F3E24AC8F1A4172E388769FF1FA /* MASShortcutView.h in Headers */, + DFA6E4455415B3EB3BB38A9F48EEB044 /* Shortcut.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 6B9981C9382CA48E42CADD9274429C8D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -531,17 +749,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F52931F6A771F68236D6B3E7B0F95DD8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0EC1F64B51A455E18896FCB15AE297F7 /* Pods-ShadowsocksX-NG-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 00C94ED0B49A44FBF0C4E2F6C875CFFC /* MASShortcut */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3F916C3627231C409340EF9C88C37F7E /* Build configuration list for PBXNativeTarget "MASShortcut" */; + buildPhases = ( + 2A63CAAD91A284BB01FE7A2D488ADAC4 /* Sources */, + CDE6AA439381DD5665018F889D1E5A6B /* Frameworks */, + BDD1FBDDF5D87D58DCD6110D44F7737E /* Resources */, + 68FE8321E00587BF5072825A5E9B4704 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 6D8935AB78317EC6C1ABBB09EA86C5FB /* PBXTargetDependency */, + ); + name = MASShortcut; + productName = MASShortcut; + productReference = D58DAAC44590953C26FC71CE97BBB28F /* MASShortcut.framework */; + productType = "com.apple.product-type.framework"; + }; 05800FAF969AA3CD7F8AEB1C36988B53 /* Pods-proxy_conf_helper */ = { isa = PBXNativeTarget; buildConfigurationList = 246647E8AB354727F9ECD0879805161F /* Build configuration list for PBXNativeTarget "Pods-proxy_conf_helper" */; @@ -556,7 +785,7 @@ ); name = "Pods-proxy_conf_helper"; productName = "Pods-proxy_conf_helper"; - productReference = D534FA8B75596A674095DAA7CA3B08D1 /* libPods-proxy_conf_helper.a */; + productReference = C2B3BEE547EDC92417A8E332AF53292F /* libPods-proxy_conf_helper.a */; productType = "com.apple.product-type.library.static"; }; 339CC546E4A1696296EFEDC2FA79ADE0 /* Pods-ShadowsocksX-NGTests */ = { @@ -573,7 +802,7 @@ ); name = "Pods-ShadowsocksX-NGTests"; productName = "Pods-ShadowsocksX-NGTests"; - productReference = A628D7F35A0F9EBD66407BDCC9C92D20 /* Pods_ShadowsocksX_NGTests.framework */; + productReference = 107BD367638AFAC8F3E01D42A0D1DECE /* Pods_ShadowsocksX_NGTests.framework */; productType = "com.apple.product-type.framework"; }; 3CB2B8006B2B1ACAF9ADCA1DC82E2290 /* BRLOptionParser */ = { @@ -590,7 +819,7 @@ ); name = BRLOptionParser; productName = BRLOptionParser; - productReference = 5E949AC812278EA6428E8B1B3F4567E5 /* libBRLOptionParser.a */; + productReference = CB2E5FAB2E41A523334D78A648DA85BD /* libBRLOptionParser.a */; productType = "com.apple.product-type.library.static"; }; 5B8B0ED1046111D92895FC95F12DBC10 /* GCDWebServer */ = { @@ -607,26 +836,27 @@ ); name = GCDWebServer; productName = GCDWebServer; - productReference = 29F1D38D8FBC1D989199E905EA6CA548 /* GCDWebServer.framework */; + productReference = 516F91C50535F8F6F640F67E641997A3 /* GCDWebServer.framework */; productType = "com.apple.product-type.framework"; }; - 76AB1BA247F8CB57FCB2BA6577D40FE6 /* Pods-ShadowsocksX-NG */ = { + 6171F54AD4A331758CFCF8E97F355EFB /* Pods-ShadowsocksX-NG */ = { isa = PBXNativeTarget; - buildConfigurationList = BFE80AF401A02D5658D84A694BE7A3CE /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NG" */; + buildConfigurationList = 2C4B50829655C633ABF135903133D7BA /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NG" */; buildPhases = ( - D58B98E801980FD3514B9C96F2FEBA64 /* Sources */, - 6E7F016811926ED895957BC5F8CE3ACA /* Frameworks */, - F52931F6A771F68236D6B3E7B0F95DD8 /* Headers */, + DB9AB46C1A759CB0B12EFF0927D8735C /* Sources */, + 684E640573B267856B0161607461C7DE /* Frameworks */, + 0B2513FB1B010E6777FDD31E5713B882 /* Headers */, ); buildRules = ( ); dependencies = ( - 49BA5C047101B8A959AF5E17B7DBCDD4 /* PBXTargetDependency */, - 3C89DE54CAB947747F7F2F6907F40D6E /* PBXTargetDependency */, + 19B0119E12F2C523EAD90C0093B3CE34 /* PBXTargetDependency */, + B0EEE3BF50F58EF6333DF85A94484C40 /* PBXTargetDependency */, + 28917DA5B45CD6AC906D6AA28EC2F7C9 /* PBXTargetDependency */, ); name = "Pods-ShadowsocksX-NG"; productName = "Pods-ShadowsocksX-NG"; - productReference = FB6A7098E32F88CAD8F6D0BB8E334D4C /* Pods_ShadowsocksX_NG.framework */; + productReference = 6E747DD2399CCE1B2803AD47C858B840 /* Pods_ShadowsocksX_NG.framework */; productType = "com.apple.product-type.framework"; }; 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */ = { @@ -643,9 +873,26 @@ ); name = Alamofire; productName = Alamofire; - productReference = BA947346171BBF9CB75B49AF462D0A14 /* Alamofire.framework */; + productReference = 0C5179B0059EA422CE3E0CD9D544A9B1 /* Alamofire.framework */; productType = "com.apple.product-type.framework"; }; + D6E5ED8DAF7CA937C8F68F342C48B26E /* MASShortcut-MASShortcut */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2542ED88CE98D477B8D38769095CE5E /* Build configuration list for PBXNativeTarget "MASShortcut-MASShortcut" */; + buildPhases = ( + C85081056E3DF73EFBB147D8F01CDE65 /* Sources */, + 06DB63E0064B15C5B39BFF16CDD7970E /* Frameworks */, + B7977A817BCC9300C280AC3762FC58AB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "MASShortcut-MASShortcut"; + productName = "MASShortcut-MASShortcut"; + productReference = 8F6AD8817DCDF5C429973DFDE855650C /* MASShortcut.bundle */; + productType = "com.apple.product-type.bundle"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -653,7 +900,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0810; + LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -663,20 +910,53 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 8E700A1150D559CA2A4DE235FBA7B0F7 /* Products */; + productRefGroup = 49FADCCE8DEE183085171E48794799D0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */, 3CB2B8006B2B1ACAF9ADCA1DC82E2290 /* BRLOptionParser */, 5B8B0ED1046111D92895FC95F12DBC10 /* GCDWebServer */, + 00C94ED0B49A44FBF0C4E2F6C875CFFC /* MASShortcut */, + D6E5ED8DAF7CA937C8F68F342C48B26E /* MASShortcut-MASShortcut */, 05800FAF969AA3CD7F8AEB1C36988B53 /* Pods-proxy_conf_helper */, - 76AB1BA247F8CB57FCB2BA6577D40FE6 /* Pods-ShadowsocksX-NG */, + 6171F54AD4A331758CFCF8E97F355EFB /* Pods-ShadowsocksX-NG */, 339CC546E4A1696296EFEDC2FA79ADE0 /* Pods-ShadowsocksX-NGTests */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + B7977A817BCC9300C280AC3762FC58AB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EFFA4247C90B98FD9160F30905A64569 /* cs.lproj in Resources */, + 66DEB394C39F5DCCD70A27ECEF274983 /* de.lproj in Resources */, + E560A21728B29AF234BD0F37AFE16F36 /* en.lproj in Resources */, + D6EA93219364CDC135BAFE63084F6361 /* es.lproj in Resources */, + C06EE84D23391E9FA94864DEDE34F548 /* fr.lproj in Resources */, + E66F7AFACFC665B23022A09E46815B5C /* it.lproj in Resources */, + 5F1FA9D431587CD257C703AF16134030 /* ja.lproj in Resources */, + 12149EA10608B7DE38879E6242D2826C /* ko.lproj in Resources */, + 97B374490F695A6ECB06271EF080EB6C /* nl.lproj in Resources */, + DE24C629B3DB152EE4924B56E3CC59F5 /* pl.lproj in Resources */, + A4DBF0AB2E88B1A9D1078042F47618B0 /* ru.lproj in Resources */, + F44386819D44846A436139CEF3D372A5 /* zh-Hans.lproj in Resources */, + 20887597017160017549465EBFB7E977 /* zh-Hant.lproj in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BDD1FBDDF5D87D58DCD6110D44F7737E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F8815ECB42FCF09BBC99D3730DFD577C /* MASShortcut.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 2899546AD56DA12F9B03BC5050860413 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -687,6 +967,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2A63CAAD91A284BB01FE7A2D488ADAC4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A6AF0A712D4C473177BE88389D15D2A /* MASDictionaryTransformer.m in Sources */, + 8FFA3A6A77962B3A36B009A49634D081 /* MASHotKey.m in Sources */, + C50FA5B211B8916770FBE55623B83DA4 /* MASLocalization.m in Sources */, + 6B4361F5ADC6268E7953732371174FE9 /* MASShortcut-dummy.m in Sources */, + 157AE1FBA8F6C3B710CDE90F86492010 /* MASShortcut.m in Sources */, + 5A30DAB76BB1814664FA7DC30939DA24 /* MASShortcutBinder.m in Sources */, + 74EFCC6DC65CEBCF60B106F7FBB14EA2 /* MASShortcutMonitor.m in Sources */, + 58CE04D9C6CAC7243825ABF4AB20EF32 /* MASShortcutValidator.m in Sources */, + ACBE29C4BF8BAEA483D6EEA940FE5314 /* MASShortcutView+Bindings.m in Sources */, + E5312C0FED7C61135F252D3A7A112990 /* MASShortcutView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 32B9974868188C4803318E36329C87FE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -749,28 +1046,41 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D58B98E801980FD3514B9C96F2FEBA64 /* Sources */ = { + C85081056E3DF73EFBB147D8F01CDE65 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E9E49601CF0FCF90E3E962F5DDEFD115 /* Pods-ShadowsocksX-NG-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB9AB46C1A759CB0B12EFF0927D8735C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 396153660EE28DAAF20B789B5EB65104 /* Pods-ShadowsocksX-NG-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 3C89DE54CAB947747F7F2F6907F40D6E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GCDWebServer; - target = 5B8B0ED1046111D92895FC95F12DBC10 /* GCDWebServer */; - targetProxy = 7D7286FD822FB02FEAECE006469945BB /* PBXContainerItemProxy */; - }; - 49BA5C047101B8A959AF5E17B7DBCDD4 /* PBXTargetDependency */ = { + 19B0119E12F2C523EAD90C0093B3CE34 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = 88E9EC28B8B46C3631E6B242B50F4442 /* Alamofire */; - targetProxy = 408240F5321FFD1270C133C590B77FEC /* PBXContainerItemProxy */; + targetProxy = CC7BBA37399118CF89A7E1A674EF83EE /* PBXContainerItemProxy */; + }; + 28917DA5B45CD6AC906D6AA28EC2F7C9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MASShortcut; + target = 00C94ED0B49A44FBF0C4E2F6C875CFFC /* MASShortcut */; + targetProxy = 8C9C31725D43E9B51254EF5E8D6D91FB /* PBXContainerItemProxy */; + }; + 6D8935AB78317EC6C1ABBB09EA86C5FB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MASShortcut-MASShortcut"; + target = D6E5ED8DAF7CA937C8F68F342C48B26E /* MASShortcut-MASShortcut */; + targetProxy = A7708F6CFFF6E4FD2E6FDB5109CDF5E7 /* PBXContainerItemProxy */; }; 7C03549F53DE7DA200E36C0642A79977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -778,12 +1088,18 @@ target = 3CB2B8006B2B1ACAF9ADCA1DC82E2290 /* BRLOptionParser */; targetProxy = FDE579D9762D0D9F86EDB1DE6EADE62F /* PBXContainerItemProxy */; }; + B0EEE3BF50F58EF6333DF85A94484C40 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GCDWebServer; + target = 5B8B0ED1046111D92895FC95F12DBC10 /* GCDWebServer */; + targetProxy = 0C759341A52320E6F69A83D0A2CA9706 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 02E195CBAB30A9CBC71B668C0E2C5F60 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C18C5D68D2A979595D2A50A1D65A8AF2 /* Alamofire.xcconfig */; + baseConfigurationReference = 1854166C986170C7CC1EC2E0441FBB08 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -880,7 +1196,7 @@ }; 454A1980F630934367D478DF55211291 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C12AC1F78F621586EC3C233BD8CF4BE0 /* BRLOptionParser.xcconfig */; + baseConfigurationReference = 084AC6693EA56EA74BB4D3AC5F654C90 /* BRLOptionParser.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -902,9 +1218,43 @@ }; name = Release; }; + 4F50769607A8A1A40CFF74C962A6EC0C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MASShortcut/MASShortcut-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MASShortcut/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MODULEMAP_FILE = "Target Support Files/MASShortcut/MASShortcut.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = MASShortcut; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 581B7E690A5A7F5E7DF616728F5651C1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C18C5D68D2A979595D2A50A1D65A8AF2 /* Alamofire.xcconfig */; + baseConfigurationReference = 1854166C986170C7CC1EC2E0441FBB08 /* Alamofire.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -950,18 +1300,14 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_RELEASE=1", "$(inherited)", @@ -975,15 +1321,33 @@ MACOSX_DEPLOYMENT_TARGET = 10.11; PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SYMROOT = "${SRCROOT}/../build"; VALIDATE_PRODUCT = YES; }; name = Release; }; + 7F85541659A067CF326B2DF15039555D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MASShortcut"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = MASShortcut; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 81B74614E7B351BBFADF2489179A00EE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C12AC1F78F621586EC3C233BD8CF4BE0 /* BRLOptionParser.xcconfig */; + baseConfigurationReference = 084AC6693EA56EA74BB4D3AC5F654C90 /* BRLOptionParser.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1007,7 +1371,7 @@ }; 85EFB31300ECD852FAD5DE392B6CDD3A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24BCEE536E19B38E28CE6933A0D49A2D /* GCDWebServer.xcconfig */; + baseConfigurationReference = 0A7F223B1591E9E8650F297A91EA618B /* GCDWebServer.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1064,6 +1428,40 @@ }; name = Debug; }; + 9F61FD28CA790C68C44F0E823C9A301A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MASShortcut/MASShortcut-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MASShortcut/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MODULEMAP_FILE = "Target Support Files/MASShortcut/MASShortcut.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MASShortcut; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; AB74B5E09B30AE94F1D9671501EA01E8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1078,19 +1476,15 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_DEBUG=1", @@ -1112,43 +1506,6 @@ }; name = Debug; }; - BF053C260AA01D48984E55F5E6765FA3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 089EB7E66F64D3A19BB7681AFCE91031 /* Pods-ShadowsocksX-NG.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "-"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-ShadowsocksX-NG/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_ShadowsocksX_NG; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; D13D4430BCE0A99C4D768DB5B9EAFAB4 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9BA2A0099476E08B6CC8026BDF0C603E /* Pods-ShadowsocksX-NGTests.debug.xcconfig */; @@ -1186,7 +1543,7 @@ }; name = Debug; }; - DB48EB34699C1507919A42A6EC412706 /* Debug */ = { + D31CF0210DF137AB6AD05BE9C89BAB0A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 98522BF2EB25C0255284080F9CA3E195 /* Pods-ShadowsocksX-NG.debug.xcconfig */; buildSettings = { @@ -1226,7 +1583,7 @@ }; EEC1F7D47739588099958DDE9B22FEEB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 24BCEE536E19B38E28CE6933A0D49A2D /* GCDWebServer.xcconfig */; + baseConfigurationReference = 0A7F223B1591E9E8650F297A91EA618B /* GCDWebServer.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1258,6 +1615,62 @@ }; name = Debug; }; + F1B067679E8618A86DA283BCD4698C6D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 377C2ACAFEEAD6082C6CD6A735FB07A4 /* MASShortcut.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MASShortcut"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = MASShortcut; + SDKROOT = macosx; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + FE86A92C0D32E1AF8110698F1794A319 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 089EB7E66F64D3A19BB7681AFCE91031 /* Pods-ShadowsocksX-NG.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-ShadowsocksX-NG/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_ShadowsocksX_NG; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1279,6 +1692,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 2C4B50829655C633ABF135903133D7BA /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NG" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D31CF0210DF137AB6AD05BE9C89BAB0A /* Debug */, + FE86A92C0D32E1AF8110698F1794A319 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1288,6 +1710,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 3F916C3627231C409340EF9C88C37F7E /* Build configuration list for PBXNativeTarget "MASShortcut" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4F50769607A8A1A40CFF74C962A6EC0C /* Debug */, + 9F61FD28CA790C68C44F0E823C9A301A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 419E5D95491847CD79841B971A8A3277 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1315,11 +1746,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BFE80AF401A02D5658D84A694BE7A3CE /* Build configuration list for PBXNativeTarget "Pods-ShadowsocksX-NG" */ = { + B2542ED88CE98D477B8D38769095CE5E /* Build configuration list for PBXNativeTarget "MASShortcut-MASShortcut" */ = { isa = XCConfigurationList; buildConfigurations = ( - DB48EB34699C1507919A42A6EC412706 /* Debug */, - BF053C260AA01D48984E55F5E6765FA3 /* Release */, + F1B067679E8618A86DA283BCD4698C6D /* Debug */, + 7F85541659A067CF326B2DF15039555D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Target Support Files/MASShortcut/Info.plist b/Pods/Target Support Files/MASShortcut/Info.plist new file mode 100644 index 0000000..05bef89 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.3.6 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m b/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m new file mode 100644 index 0000000..0757dcc --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MASShortcut : NSObject +@end +@implementation PodsDummy_MASShortcut +@end diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch b/Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch new file mode 100644 index 0000000..082f8af --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut-umbrella.h b/Pods/Target Support Files/MASShortcut/MASShortcut-umbrella.h new file mode 100644 index 0000000..7dc0053 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-umbrella.h @@ -0,0 +1,28 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "MASDictionaryTransformer.h" +#import "MASHotKey.h" +#import "MASKeyCodes.h" +#import "MASKeyMasks.h" +#import "MASLocalization.h" +#import "MASShortcut.h" +#import "MASShortcutBinder.h" +#import "MASShortcutMonitor.h" +#import "MASShortcutValidator.h" +#import "MASShortcutView+Bindings.h" +#import "MASShortcutView.h" +#import "Shortcut.h" + +FOUNDATION_EXPORT double MASShortcutVersionNumber; +FOUNDATION_EXPORT const unsigned char MASShortcutVersionString[]; + diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut.modulemap b/Pods/Target Support Files/MASShortcut/MASShortcut.modulemap new file mode 100644 index 0000000..b8aec8f --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut.modulemap @@ -0,0 +1,6 @@ +framework module MASShortcut { + umbrella header "MASShortcut-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig b/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig new file mode 100644 index 0000000..67803f4 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig @@ -0,0 +1,11 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MASShortcut +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRLOptionParser" +OTHER_LDFLAGS = -framework "AppKit" -framework "Carbon" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/MASShortcut +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist b/Pods/Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist new file mode 100644 index 0000000..3d63869 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/ResourceBundle-MASShortcut-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 2.3.6 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.markdown b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.markdown index e3e6bdb..92c8bf3 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.markdown @@ -51,4 +51,30 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +## MASShortcut + +Copyright (c) 2012-2013, Vadim Shpakovski +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.plist b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.plist index fb52059..cef7bb9 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-acknowledgements.plist @@ -75,6 +75,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2012-2013, Vadim Shpakovski +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + License + BSD 2-clause + Title + MASShortcut + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-frameworks.sh b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-frameworks.sh index a7f5302..40d26bb 100755 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-frameworks.sh +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG-frameworks.sh @@ -59,7 +59,7 @@ 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}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1"" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -91,10 +91,12 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" install_framework "$BUILT_PRODUCTS_DIR/GCDWebServer/GCDWebServer.framework" + install_framework "$BUILT_PRODUCTS_DIR/MASShortcut/MASShortcut.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" install_framework "$BUILT_PRODUCTS_DIR/GCDWebServer/GCDWebServer.framework" + install_framework "$BUILT_PRODUCTS_DIR/MASShortcut/MASShortcut.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.debug.xcconfig b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.debug.xcconfig index a07111d..ceda9bf 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.debug.xcconfig +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "GCDWebServer" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut/MASShortcut.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "GCDWebServer" -framework "MASShortcut" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.release.xcconfig b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.release.xcconfig index a07111d..ceda9bf 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.release.xcconfig +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NG/Pods-ShadowsocksX-NG.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "GCDWebServer" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut/MASShortcut.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "GCDWebServer" -framework "MASShortcut" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests-frameworks.sh b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests-frameworks.sh index d839f60..0f29f13 100755 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests-frameworks.sh +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests-frameworks.sh @@ -59,7 +59,7 @@ 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}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1"" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.debug.xcconfig b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.debug.xcconfig index 179df76..0750cff 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.debug.xcconfig @@ -1,8 +1,8 @@ CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut/MASShortcut.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.release.xcconfig b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.release.xcconfig index 179df76..0750cff 100644 --- a/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-ShadowsocksX-NGTests/Pods-ShadowsocksX-NGTests.release.xcconfig @@ -1,8 +1,8 @@ CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer" "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GCDWebServer/GCDWebServer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MASShortcut/MASShortcut.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh index d839f60..0f29f13 100755 --- a/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh +++ b/Pods/Target Support Files/Pods-proxy_conf_helper/Pods-proxy_conf_helper-frameworks.sh @@ -59,7 +59,7 @@ 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}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1"" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &"