diff --git a/Podfile b/Podfile index 799d99f..b116d99 100644 --- a/Podfile +++ b/Podfile @@ -15,9 +15,8 @@ target 'V2rayU' do pod 'Sparkle' pod 'QRCoder' pod "GCDWebServer" -# pod 'Socket.IO-Client-Swift' -# pod 'SwiftSocket' pod 'SwiftSocket', :git => 'https://github.com/odariusgeorge/SwiftSocket.git', :branch => 'patch-1' + pod 'MASShortcut' end diff --git a/Podfile.lock b/Podfile.lock index 52977bc..6bdc0b6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,6 +3,7 @@ PODS: - GCDWebServer (3.5.2): - GCDWebServer/Core (= 3.5.2) - GCDWebServer/Core (3.5.2) + - MASShortcut (2.3.6) - Preferences (0.3.0) - QRCoder (1.1.0) - Sparkle (1.21.3) @@ -12,6 +13,7 @@ PODS: DEPENDENCIES: - Alamofire - GCDWebServer + - MASShortcut - Preferences (from `https://github.com/sindresorhus/Preferences.git`) - QRCoder - Sparkle @@ -22,6 +24,7 @@ SPEC REPOS: https://github.com/CocoaPods/Specs.git: - Alamofire - GCDWebServer + - MASShortcut - QRCoder - Sparkle - SwiftyJSON @@ -44,12 +47,13 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3 GCDWebServer: ead88cd14596dd4eae4f5830b8877c87c8728990 + MASShortcut: 9c215e8a8a78f3d01ce56da48e2730ab66b538fa Preferences: cfd4b0cbc5adfb5781b819ad3a000324d0fc9f48 QRCoder: cbd2bee531cc86d286df7942334cfed94c803ae4 Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708 SwiftSocket: 2f7a7e26a7489f5f33b69da914ec366368dfcbcc SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 -PODFILE CHECKSUM: 6a9efe1e965935629aec3f60f29e9a3968331249 +PODFILE CHECKSUM: 407a3efc71b95e99861a0c05290182ea384ac364 COCOAPODS: 1.8.4 diff --git a/V2rayU.xcodeproj/project.pbxproj b/V2rayU.xcodeproj/project.pbxproj index ce84baf..8547c52 100644 --- a/V2rayU.xcodeproj/project.pbxproj +++ b/V2rayU.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 6610ECB721742AFD008FC401 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 664EB378216C9A5F00B6AE0D /* MainMenu.xib */; }; 6618372923E9BF1A000F7410 /* ToastWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6618372823E9BF1A000F7410 /* ToastWindow.swift */; }; 6618372E23E9BF74000F7410 /* ToastWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6618372C23E9BF73000F7410 /* ToastWindow.xib */; }; + 66193A7C23EC5F1500289B6A /* Shortcut.m in Sources */ = {isa = PBXBuildFile; fileRef = 66193A7B23EC5F1400289B6A /* Shortcut.m */; }; 66406AF42183320000B56041 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66406AF32183320000B56041 /* Sample.swift */; }; 664EB375216C9A5E00B6AE0D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664EB374216C9A5E00B6AE0D /* AppDelegate.swift */; }; 664EB377216C9A5F00B6AE0D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 664EB376216C9A5F00B6AE0D /* Assets.xcassets */; }; @@ -130,6 +131,9 @@ 66107B8922DEE445002FFB60 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 6618372823E9BF1A000F7410 /* ToastWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastWindow.swift; sourceTree = ""; }; 6618372D23E9BF73000F7410 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ToastWindow.xib; sourceTree = ""; }; + 6618373D23EB03EC000F7410 /* V2rayU-Bridging-header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "V2rayU-Bridging-header.h"; sourceTree = ""; }; + 66193A7A23EC5EFA00289B6A /* Shortcut.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Shortcut.h; sourceTree = ""; }; + 66193A7B23EC5F1400289B6A /* Shortcut.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Shortcut.m; sourceTree = ""; }; 66406AF32183320000B56041 /* Sample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sample.swift; sourceTree = ""; }; 6646669221CBC0860094F0B7 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 664666A021CBD6C60094F0B7 /* libPods-V2rayUTool.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libPods-V2rayUTool.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -332,6 +336,9 @@ 6618372823E9BF1A000F7410 /* ToastWindow.swift */, 6618372C23E9BF73000F7410 /* ToastWindow.xib */, 66107B8822DEDBE4002FFB60 /* Localizable.strings */, + 66193A7A23EC5EFA00289B6A /* Shortcut.h */, + 66193A7B23EC5F1400289B6A /* Shortcut.m */, + 6618373D23EB03EC000F7410 /* V2rayU-Bridging-header.h */, ); path = V2rayU; sourceTree = ""; @@ -643,6 +650,7 @@ 6608D9DC2182C6D200A0E0DD /* v2rayInbound.swift in Sources */, 6608D9DE2182C92D00A0E0DD /* v2rayOutbound.swift in Sources */, 6618372923E9BF1A000F7410 /* ToastWindow.swift in Sources */, + 66193A7C23EC5F1500289B6A /* Shortcut.m in Sources */, 6608D9DA2182C69D00A0E0DD /* v2rayStruct.swift in Sources */, 66F07CF9236D79540088A4AE /* ping.swift in Sources */, 664EB392216CA9E800B6AE0D /* ConfigWindow.swift in Sources */, @@ -999,6 +1007,7 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.5.0; + DEFINES_MODULE = YES; DEVELOPMENT_TEAM = RJYEH6TCJD; INFOPLIST_FILE = V2rayU/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -1010,6 +1019,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = NO; + SWIFT_OBJC_BRIDGING_HEADER = "V2rayU/V2rayU-Bridging-header.h"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.2; }; @@ -1025,6 +1035,7 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1.5.0; + DEFINES_MODULE = YES; DEVELOPMENT_TEAM = RJYEH6TCJD; INFOPLIST_FILE = V2rayU/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -1036,6 +1047,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = NO; + SWIFT_OBJC_BRIDGING_HEADER = "V2rayU/V2rayU-Bridging-header.h"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.2; }; diff --git a/V2rayU/AppDelegate.swift b/V2rayU/AppDelegate.swift index 39d1d73..b6407f0 100644 --- a/V2rayU/AppDelegate.swift +++ b/V2rayU/AppDelegate.swift @@ -12,6 +12,9 @@ import ServiceManagement let launcherAppIdentifier = "net.yanue.V2rayU.Launcher" let appVersion = getAppVersion() +let NOTIFY_TOGGLE_RUNNING_SHORTCUT = Notification.Name(rawValue: "NOTIFY_TOGGLE_RUNNING_SHORTCUT") +let NOTIFY_SWITCH_PROXY_MODE_SHORTCUT = Notification.Name(rawValue: "NOTIFY_SWITCH_PROXY_MODE_SHORTCUT") + @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { // bar menu @@ -64,6 +67,21 @@ class AppDelegate: NSObject, NSApplicationDelegate { NSApplication.shared.terminate(self) } } + + // set global hotkey + let notifyCenter = NotificationCenter.default + notifyCenter.addObserver(forName: NOTIFY_TOGGLE_RUNNING_SHORTCUT, object: nil, queue: nil, using: { + notice in + ToggleRunning() + }) + + notifyCenter.addObserver(forName: NOTIFY_SWITCH_PROXY_MODE_SHORTCUT, object: nil, queue: nil, using: { + notice in + SwitchProxyMode() + }) + + // Register global hotkey + ShortcutsController.bindShortcuts() } func checkDefault() { @@ -117,6 +135,8 @@ class AppDelegate: NSObject, NSApplicationDelegate { } func applicationWillTerminate(_ aNotification: Notification) { + // unregister All shortcut + MASShortcutMonitor.shared().unregisterAllShortcuts() // Insert code here to tear down your application V2rayLaunch.Stop() // restore system proxy diff --git a/V2rayU/Base.lproj/MainMenu.xib b/V2rayU/Base.lproj/MainMenu.xib index c8a9192..e47cff0 100644 --- a/V2rayU/Base.lproj/MainMenu.xib +++ b/V2rayU/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -64,8 +64,7 @@ - - + @@ -101,8 +100,7 @@ - - + @@ -116,8 +114,7 @@ - - + diff --git a/V2rayU/Base.lproj/PreferenceGeneral.xib b/V2rayU/Base.lproj/PreferenceGeneral.xib index fd9ce74..85da8d7 100755 --- a/V2rayU/Base.lproj/PreferenceGeneral.xib +++ b/V2rayU/Base.lproj/PreferenceGeneral.xib @@ -20,7 +20,7 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +