From bbc35accfddfa6413106bfa7cb7c2cfa5dbbfcdd Mon Sep 17 00:00:00 2001 From: Kevin Wang <453587854@qq.com> Date: Wed, 7 Aug 2019 02:07:16 +0800 Subject: [PATCH 1/5] underscores should be allowed in domain names [It is perfectly legal to have an underscore in a domain name.](https://stackoverflow.com/a/2183140/6247478) I fixed `validateDomainName` so that users who are given a domain name with underscores will not be prevented from using this software. --- ShadowsocksX-NG/ServerProfile.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ShadowsocksX-NG/ServerProfile.swift b/ShadowsocksX-NG/ServerProfile.swift index bd80833..5e558be 100644 --- a/ShadowsocksX-NG/ServerProfile.swift +++ b/ShadowsocksX-NG/ServerProfile.swift @@ -131,7 +131,7 @@ class ServerProfile: NSObject { } func validateDomainName(_ value: String) -> Bool { - let validHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$" + let validHostnameRegex = "^(([a-zA-Z0-9_]|[a-zA-Z0-9_][a-zA-Z0-9\\-_]*[a-zA-Z0-9_])\\.)*([A-Za-z0-9_]|[A-Za-z0-9_][A-Za-z0-9\\-_]*[A-Za-z0-9_])$" if (value.range(of: validHostnameRegex, options: .regularExpression) != nil) { return true From 596ad015e26cbb8f9cc8f2808767e160114206ab Mon Sep 17 00:00:00 2001 From: Rainux Luo Date: Wed, 6 Nov 2019 15:01:47 +0800 Subject: [PATCH 2/5] Rename configuration directory --- ShadowsocksX-NG/LaunchAgentUtils.swift | 2 +- ShadowsocksX-NG/ProxyConfHelper.m | 2 +- ShadowsocksX-NG/install_helper.sh | 10 +++++----- ShadowsocksX-NG/install_privoxy.sh | 8 ++++---- ShadowsocksX-NG/install_ss_local.sh | 10 +++++----- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ShadowsocksX-NG/LaunchAgentUtils.swift b/ShadowsocksX-NG/LaunchAgentUtils.swift index 5f1bfb6..0ef77c0 100644 --- a/ShadowsocksX-NG/LaunchAgentUtils.swift +++ b/ShadowsocksX-NG/LaunchAgentUtils.swift @@ -10,7 +10,7 @@ import Foundation let SS_LOCAL_VERSION = "2.5.6.12.static" let PRIVOXY_VERSION = "3.0.26.static" -let APP_SUPPORT_DIR = "/Library/Application Support/ShadowsocksX-NG/" +let APP_SUPPORT_DIR = "/Library/Application Support/ShadowsocksX-NG-R/" let LAUNCH_AGENT_DIR = "/Library/LaunchAgents/" let LAUNCH_AGENT_CONF_SSLOCAL_NAME = "com.qiuyuzhou.shadowsocksX-NG.local.plist" let LAUNCH_AGENT_CONF_PRIVOXY_NAME = "com.qiuyuzhou.shadowsocksX-NG.http.plist" diff --git a/ShadowsocksX-NG/ProxyConfHelper.m b/ShadowsocksX-NG/ProxyConfHelper.m index d67613a..eb53cc9 100644 --- a/ShadowsocksX-NG/ProxyConfHelper.m +++ b/ShadowsocksX-NG/ProxyConfHelper.m @@ -9,7 +9,7 @@ #import "ProxyConfHelper.h" #import "proxy_conf_helper_version.h" -#define kShadowsocksHelper @"/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" +#define kShadowsocksHelper @"/Library/Application Support/ShadowsocksX-NG-R/proxy_conf_helper" @implementation ProxyConfHelper diff --git a/ShadowsocksX-NG/install_helper.sh b/ShadowsocksX-NG/install_helper.sh index fe34eba..aa8db66 100755 --- a/ShadowsocksX-NG/install_helper.sh +++ b/ShadowsocksX-NG/install_helper.sh @@ -6,9 +6,9 @@ # Created by clowwindy on 14-3-15. cd `dirname "${BASH_SOURCE[0]}"` -sudo mkdir -p "/Library/Application Support/ShadowsocksX-NG/" -sudo cp proxy_conf_helper "/Library/Application Support/ShadowsocksX-NG/" -sudo chown root:admin "/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" -sudo chmod +s "/Library/Application Support/ShadowsocksX-NG/proxy_conf_helper" +sudo mkdir -p "/Library/Application Support/ShadowsocksX-NG-R/" +sudo cp proxy_conf_helper "/Library/Application Support/ShadowsocksX-NG-R/" +sudo chown root:admin "/Library/Application Support/ShadowsocksX-NG-R/proxy_conf_helper" +sudo chmod +s "/Library/Application Support/ShadowsocksX-NG-R/proxy_conf_helper" -echo done \ No newline at end of file +echo done diff --git a/ShadowsocksX-NG/install_privoxy.sh b/ShadowsocksX-NG/install_privoxy.sh index a89d9e8..9c7f50c 100755 --- a/ShadowsocksX-NG/install_privoxy.sh +++ b/ShadowsocksX-NG/install_privoxy.sh @@ -9,9 +9,9 @@ cd `dirname "${BASH_SOURCE[0]}"` privoxyVersion=3.0.26.static -mkdir -p "$HOME/Library/Application Support/ShadowsocksX-NG/privoxy-$privoxyVersion" -cp -f privoxy "$HOME/Library/Application Support/ShadowsocksX-NG/privoxy-$privoxyVersion/" -rm -f "$HOME/Library/Application Support/ShadowsocksX-NG/privoxy" -ln -s "$HOME/Library/Application Support/ShadowsocksX-NG/privoxy-$privoxyVersion/privoxy" "$HOME/Library/Application Support/ShadowsocksX-NG/privoxy" +mkdir -p "$HOME/Library/Application Support/ShadowsocksX-NG-R/privoxy-$privoxyVersion" +cp -f privoxy "$HOME/Library/Application Support/ShadowsocksX-NG-R/privoxy-$privoxyVersion/" +rm -f "$HOME/Library/Application Support/ShadowsocksX-NG-R/privoxy" +ln -s "$HOME/Library/Application Support/ShadowsocksX-NG-R/privoxy-$privoxyVersion/privoxy" "$HOME/Library/Application Support/ShadowsocksX-NG-R/privoxy" echo done diff --git a/ShadowsocksX-NG/install_ss_local.sh b/ShadowsocksX-NG/install_ss_local.sh index 888387f..b5aba7b 100755 --- a/ShadowsocksX-NG/install_ss_local.sh +++ b/ShadowsocksX-NG/install_ss_local.sh @@ -9,11 +9,11 @@ cd `dirname "${BASH_SOURCE[0]}"` ssLocalVersion=2.5.6.12.static -mkdir -p "$HOME/Library/Application Support/ShadowsocksX-NG/ss-local-$ssLocalVersion" -cp -f ss-local "$HOME/Library/Application Support/ShadowsocksX-NG/ss-local-$ssLocalVersion/" -rm -f "$HOME/Library/Application Support/ShadowsocksX-NG/ss-local" -ln -s "$HOME/Library/Application Support/ShadowsocksX-NG/ss-local-$ssLocalVersion/ss-local" "$HOME/Library/Application Support/ShadowsocksX-NG/ss-local" +mkdir -p "$HOME/Library/Application Support/ShadowsocksX-NG-R/ss-local-$ssLocalVersion" +cp -f ss-local "$HOME/Library/Application Support/ShadowsocksX-NG-R/ss-local-$ssLocalVersion/" +rm -f "$HOME/Library/Application Support/ShadowsocksX-NG-R/ss-local" +ln -s "$HOME/Library/Application Support/ShadowsocksX-NG-R/ss-local-$ssLocalVersion/ss-local" "$HOME/Library/Application Support/ShadowsocksX-NG-R/ss-local" -cp -f libcrypto.1.0.0.dylib "$HOME/Library/Application Support/ShadowsocksX-NG/" +cp -f libcrypto.1.0.0.dylib "$HOME/Library/Application Support/ShadowsocksX-NG-R/" echo done From 08dbd99202939464cb907023d8bb93efe4b85a38 Mon Sep 17 00:00:00 2001 From: Rainux Luo Date: Wed, 6 Nov 2019 15:25:50 +0800 Subject: [PATCH 3/5] Rename launch agents --- ShadowsocksX-NG/LaunchAgentUtils.swift | 8 ++++---- ShadowsocksX-NG/reload_conf_privoxy.sh | 6 +++--- ShadowsocksX-NG/reload_conf_ss_local.sh | 6 +++--- ShadowsocksX-NG/start_privoxy.sh | 2 +- ShadowsocksX-NG/start_ss_local.sh | 2 +- ShadowsocksX-NG/stop_privoxy.sh | 2 +- ShadowsocksX-NG/stop_ss_local.sh | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ShadowsocksX-NG/LaunchAgentUtils.swift b/ShadowsocksX-NG/LaunchAgentUtils.swift index 0ef77c0..51435c5 100644 --- a/ShadowsocksX-NG/LaunchAgentUtils.swift +++ b/ShadowsocksX-NG/LaunchAgentUtils.swift @@ -12,8 +12,8 @@ let SS_LOCAL_VERSION = "2.5.6.12.static" let PRIVOXY_VERSION = "3.0.26.static" let APP_SUPPORT_DIR = "/Library/Application Support/ShadowsocksX-NG-R/" let LAUNCH_AGENT_DIR = "/Library/LaunchAgents/" -let LAUNCH_AGENT_CONF_SSLOCAL_NAME = "com.qiuyuzhou.shadowsocksX-NG.local.plist" -let LAUNCH_AGENT_CONF_PRIVOXY_NAME = "com.qiuyuzhou.shadowsocksX-NG.http.plist" +let LAUNCH_AGENT_CONF_SSLOCAL_NAME = "com.qiuyuzhou.shadowsocksX-NG-R.local.plist" +let LAUNCH_AGENT_CONF_PRIVOXY_NAME = "com.qiuyuzhou.shadowsocksX-NG-R.http.plist" func getFileSHA1Sum(_ filepath: String) -> String { @@ -64,7 +64,7 @@ func generateSSLocalLauchAgentPlist() -> Bool { // For a complete listing of the keys, see the launchd.plist manual page. let dict: NSMutableDictionary = [ - "Label": "com.qiuyuzhou.shadowsocksX-NG.local", + "Label": "com.qiuyuzhou.shadowsocksX-NG-R.local", "WorkingDirectory": NSHomeDirectory() + APP_SUPPORT_DIR, "KeepAlive": true, "StandardOutPath": logFilePath, @@ -205,7 +205,7 @@ func generatePrivoxyLauchAgentPlist() -> Bool { // For a complete listing of the keys, see the launchd.plist manual page. let dict: NSMutableDictionary = [ - "Label": "com.qiuyuzhou.shadowsocksX-NG.http", + "Label": "com.qiuyuzhou.shadowsocksX-NG-R.http", "WorkingDirectory": NSHomeDirectory() + APP_SUPPORT_DIR, "KeepAlive": true, "StandardOutPath": logFilePath, diff --git a/ShadowsocksX-NG/reload_conf_privoxy.sh b/ShadowsocksX-NG/reload_conf_privoxy.sh index f8e435c..319b14c 100755 --- a/ShadowsocksX-NG/reload_conf_privoxy.sh +++ b/ShadowsocksX-NG/reload_conf_privoxy.sh @@ -6,7 +6,7 @@ # Created by 王晨 on 16/10/7. # Copyright © 2016年 zhfish. All rights reserved. -#launchctl kill SIGHUP "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.http.plist" +#launchctl kill SIGHUP "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.http.plist" -launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.http.plist" -launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.http.plist" +launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.http.plist" +launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.http.plist" diff --git a/ShadowsocksX-NG/reload_conf_ss_local.sh b/ShadowsocksX-NG/reload_conf_ss_local.sh index c96f790..0b12cff 100755 --- a/ShadowsocksX-NG/reload_conf_ss_local.sh +++ b/ShadowsocksX-NG/reload_conf_ss_local.sh @@ -6,7 +6,7 @@ # Created by 邱宇舟 on 16/6/6. # Copyright © 2016年 qiuyuzhou. All rights reserved. -#launchctl kill SIGHUP "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.local.plist" +#launchctl kill SIGHUP "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.local.plist" -launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.local.plist" -launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.local.plist" +launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.local.plist" +launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.local.plist" diff --git a/ShadowsocksX-NG/start_privoxy.sh b/ShadowsocksX-NG/start_privoxy.sh index bedef6a..3e1566d 100755 --- a/ShadowsocksX-NG/start_privoxy.sh +++ b/ShadowsocksX-NG/start_privoxy.sh @@ -6,4 +6,4 @@ # Created by 王晨 on 16/10/7. # Copyright © 2016年 zhfish. All rights reserved. -launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.http.plist" +launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.http.plist" diff --git a/ShadowsocksX-NG/start_ss_local.sh b/ShadowsocksX-NG/start_ss_local.sh index b4047d3..97be3ba 100755 --- a/ShadowsocksX-NG/start_ss_local.sh +++ b/ShadowsocksX-NG/start_ss_local.sh @@ -6,4 +6,4 @@ # Created by 邱宇舟 on 16/6/6. # Copyright © 2016年 qiuyuzhou. All rights reserved. -launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.local.plist" \ No newline at end of file +launchctl load "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.local.plist" diff --git a/ShadowsocksX-NG/stop_privoxy.sh b/ShadowsocksX-NG/stop_privoxy.sh index 8cb6a2b..e84df0f 100755 --- a/ShadowsocksX-NG/stop_privoxy.sh +++ b/ShadowsocksX-NG/stop_privoxy.sh @@ -8,4 +8,4 @@ -launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.http.plist" +launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.http.plist" diff --git a/ShadowsocksX-NG/stop_ss_local.sh b/ShadowsocksX-NG/stop_ss_local.sh index 5a6cf57..55ca34a 100755 --- a/ShadowsocksX-NG/stop_ss_local.sh +++ b/ShadowsocksX-NG/stop_ss_local.sh @@ -8,4 +8,4 @@ -launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG.local.plist" \ No newline at end of file +launchctl unload "$HOME/Library/LaunchAgents/com.qiuyuzhou.shadowsocksX-NG-R.local.plist" From 2eb1b0512a9e59fd942c5ee84f406152668806b3 Mon Sep 17 00:00:00 2001 From: Rainux Luo Date: Wed, 6 Nov 2019 16:26:37 +0800 Subject: [PATCH 4/5] Rename bundle identifier and build target --- ShadowsocksX-NG.xcodeproj/project.pbxproj | 22 +++++++++---------- .../xcschemes/ShadowsocksX-NG.xcscheme | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/ShadowsocksX-NG.xcodeproj/project.pbxproj b/ShadowsocksX-NG.xcodeproj/project.pbxproj index 99cf11f..368e6db 100644 --- a/ShadowsocksX-NG.xcodeproj/project.pbxproj +++ b/ShadowsocksX-NG.xcodeproj/project.pbxproj @@ -142,7 +142,7 @@ 9B07EFA91D048E880052D9DF /* menu_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_icon.png; sourceTree = ""; }; 9B07EFAA1D048E880052D9DF /* menu_icon_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = menu_icon_disabled.png; sourceTree = ""; }; 9B07EFAB1D048E880052D9DF /* menu_icon_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon_disabled@2x.png"; sourceTree = ""; }; - 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ShadowsocksX-NG.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG-R.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ShadowsocksX-NG-R.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 9B0BFFE81D0460A70040E62B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 9B0BFFEA1D0460A70040E62B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 9B0BFFED1D0460A70040E62B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -307,7 +307,7 @@ 9B0BFFE61D0460A70040E62B /* Products */ = { isa = PBXGroup; children = ( - 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG.app */, + 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG-R.app */, 9B0BFFF41D0460A70040E62B /* ShadowsocksX-NGTests.xctest */, 9B3FFF441D09CD3B0019A709 /* proxy_conf_helper */, ); @@ -407,9 +407,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG */ = { + 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG-R */ = { isa = PBXNativeTarget; - buildConfigurationList = 9B0B00081D0460A70040E62B /* Build configuration list for PBXNativeTarget "ShadowsocksX-NG" */; + buildConfigurationList = 9B0B00081D0460A70040E62B /* Build configuration list for PBXNativeTarget "ShadowsocksX-NG-R" */; buildPhases = ( A3C8167BB5EB01FBDE2A08BC /* [CP] Check Pods Manifest.lock */, 9B0BFFE11D0460A70040E62B /* Sources */, @@ -422,9 +422,9 @@ dependencies = ( 9B3FFF531D09E2B30019A709 /* PBXTargetDependency */, ); - name = "ShadowsocksX-NG"; + name = "ShadowsocksX-NG-R"; productName = "ShadowsocksX-NG"; - productReference = 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG.app */; + productReference = 9B0BFFE51D0460A70040E62B /* ShadowsocksX-NG-R.app */; productType = "com.apple.product-type.application"; }; 9B0BFFF31D0460A70040E62B /* ShadowsocksX-NGTests */ = { @@ -505,7 +505,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG */, + 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG-R */, 9B0BFFF31D0460A70040E62B /* ShadowsocksX-NGTests */, 9B3FFF431D09CD3B0019A709 /* proxy_conf_helper */, ); @@ -699,7 +699,7 @@ /* Begin PBXTargetDependency section */ 9B0BFFF61D0460A70040E62B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG */; + target = 9B0BFFE41D0460A70040E62B /* ShadowsocksX-NG-R */; targetProxy = 9B0BFFF51D0460A70040E62B /* PBXContainerItemProxy */; }; 9B3FFF531D09E2B30019A709 /* PBXTargetDependency */ = { @@ -899,7 +899,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG"; + PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG-R"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -930,7 +930,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 10.11; - PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG"; + PRODUCT_BUNDLE_IDENTIFIER = "com.qiuyuzhou.ShadowsocksX-NG-R"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "ShadowsocksX-NG/ShadowsocksX-NG-Bridging-Header.h"; SWIFT_VERSION = 3.0; @@ -990,7 +990,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9B0B00081D0460A70040E62B /* Build configuration list for PBXNativeTarget "ShadowsocksX-NG" */ = { + 9B0B00081D0460A70040E62B /* Build configuration list for PBXNativeTarget "ShadowsocksX-NG-R" */ = { isa = XCConfigurationList; buildConfigurations = ( 9B0B00091D0460A70040E62B /* Debug */, diff --git a/ShadowsocksX-NG.xcodeproj/xcshareddata/xcschemes/ShadowsocksX-NG.xcscheme b/ShadowsocksX-NG.xcodeproj/xcshareddata/xcschemes/ShadowsocksX-NG.xcscheme index db485a0..292e9fb 100644 --- a/ShadowsocksX-NG.xcodeproj/xcshareddata/xcschemes/ShadowsocksX-NG.xcscheme +++ b/ShadowsocksX-NG.xcodeproj/xcshareddata/xcschemes/ShadowsocksX-NG.xcscheme @@ -28,7 +28,7 @@ buildForAnalyzing = "YES"> @@ -56,7 +56,7 @@ buildForAnalyzing = "YES"> @@ -70,7 +70,7 @@ buildForAnalyzing = "YES"> @@ -85,8 +85,8 @@ @@ -113,8 +113,8 @@ @@ -136,8 +136,8 @@ @@ -155,8 +155,8 @@ From c8d12097ef4eaf2a130e16f3283e777b8fcf7ae0 Mon Sep 17 00:00:00 2001 From: Rainux Luo Date: Wed, 6 Nov 2019 16:43:19 +0800 Subject: [PATCH 5/5] Add some convenient shortcuts for main menu --- ShadowsocksX-NG/Base.lproj/MainMenu.xib | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ShadowsocksX-NG/Base.lproj/MainMenu.xib b/ShadowsocksX-NG/Base.lproj/MainMenu.xib index c07b020..8151ca8 100644 --- a/ShadowsocksX-NG/Base.lproj/MainMenu.xib +++ b/ShadowsocksX-NG/Base.lproj/MainMenu.xib @@ -12,7 +12,7 @@ - + @@ -50,32 +50,31 @@ - - + - + - + - + - +