From bc0a38c27da4b6c828d0bade57ee18aa64317dd9 Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Mon, 25 Sep 2023 18:07:17 +0800
Subject: [PATCH 1/6] fix: LaunchAtLogin
---
ClashX/AppDelegate.swift | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/ClashX/AppDelegate.swift b/ClashX/AppDelegate.swift
index b02bc0be4..0855da95f 100644
--- a/ClashX/AppDelegate.swift
+++ b/ClashX/AppDelegate.swift
@@ -341,9 +341,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
Logger.log("Fire helperStatusTimer")
- }
- func setupSystemData() {
+
if !PrivilegedHelperManager.shared.isHelperCheckFinished.value &&
ConfigManager.shared.proxyPortAutoSet {
PrivilegedHelperManager.shared.isHelperCheckFinished
From 6b0da117b0bd5d0bcd3ade8279e09a2451ce227f Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Sat, 7 Oct 2023 16:11:37 +0800
Subject: [PATCH 2/6] misc: swiftui target
---
ClashX Meta SwiftUI-Info.plist | 130 ++
ClashX SwiftUI.xcodeproj/project.pbxproj | 1378 -----------------
.../contents.xcworkspacedata | 7 -
.../xcshareddata/IDEWorkspaceChecks.plist | 8 -
.../xcshareddata/swiftpm/Package.resolved | 158 --
...etacubex.ClashX.ProxyConfigHelper.xcscheme | 79 -
ClashX.xcodeproj/project.pbxproj | 565 +++++++
.../xcshareddata/swiftpm/Package.resolved | 27 +
.../xcschemes/ClashX Meta SwiftUI.xcscheme | 24 +-
ClashX/ViewControllers/DashboardManager.swift | 94 +-
.../DashboardManagerSwiftUI.swift | 100 --
11 files changed, 825 insertions(+), 1745 deletions(-)
create mode 100644 ClashX Meta SwiftUI-Info.plist
delete mode 100644 ClashX SwiftUI.xcodeproj/project.pbxproj
delete mode 100644 ClashX SwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
delete mode 100644 ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
delete mode 100644 ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
delete mode 100644 ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/com.metacubex.ClashX.ProxyConfigHelper.xcscheme
rename ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/ClashX Meta.xcscheme => ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme (75%)
delete mode 100644 ClashX/ViewControllers/DashboardManagerSwiftUI.swift
diff --git a/ClashX Meta SwiftUI-Info.plist b/ClashX Meta SwiftUI-Info.plist
new file mode 100644
index 000000000..b7c7ab4a0
--- /dev/null
+++ b/ClashX Meta SwiftUI-Info.plist
@@ -0,0 +1,130 @@
+
+
+
+
+ BETA
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeExtensions
+
+ yaml
+
+ CFBundleTypeName
+ YAML
+ CFBundleTypeRole
+ Viewer
+ LSHandlerRank
+ None
+
+
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLIconFile
+ Icon
+ CFBundleURLName
+ com.west2online.ClashX
+ CFBundleURLSchemes
+
+ clashx
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLIconFile
+ Icon
+ CFBundleURLName
+ com.west2online.Clash
+ CFBundleURLSchemes
+
+ clash
+
+
+
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ Fabric
+
+ APIKey
+ e5990c61f53f0e5713e37f78458291760d631147
+ Kits
+
+
+ KitInfo
+
+ KitName
+ Crashlytics
+
+
+
+ LSApplicationCategoryType
+ public.app-category.utilities
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ LSUIElement
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ NSAppleScriptEnabled
+
+ NSHumanReadableCopyright
+ Copyright © 2021年 yichengchen. All rights reserved.
+ NSMainStoryboardFile
+ Main
+ NSPrincipalClass
+ NSApplication
+ NSSupportsAutomaticTermination
+
+ NSSupportsSuddenTermination
+
+ NSUbiquitousContainers
+
+ iCloud.com.metacubex.ClashX
+
+ NSUbiquitousContainerIsDocumentScopePublic
+
+ NSUbiquitousContainerName
+ ClashX Meta
+ NSUbiquitousContainerSupportedFolderLevels
+ Any
+
+
+ OSAScriptingDefinition
+ ProxySetting.sdef
+ SMAuthorizedClients
+
+ identifier "com.west2online.ClashX" and anchor apple generic and certificate leaf[subject.CN] = "Mac Developer: chen yicheng (96U846XGYH)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */
+
+ SMPrivilegedExecutables
+
+ com.west2online.ClashX.ProxyConfigHelper
+ anchor apple generic and identifier "com.metacubex.ClashX.ProxyConfigHelper" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = MEWHFZ92DY)
+
+ SUDisallowSelectChannel
+
+ SUFeedURL
+ https://yichengchen.github.io/clashX/appcast.xml
+
+
diff --git a/ClashX SwiftUI.xcodeproj/project.pbxproj b/ClashX SwiftUI.xcodeproj/project.pbxproj
deleted file mode 100644
index 492984f9c..000000000
--- a/ClashX SwiftUI.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1378 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 52;
- objects = {
-
-/* Begin PBXBuildFile section */
- 011946B62A32F64600502077 /* TunModeSettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011946B52A32F64500502077 /* TunModeSettingCommand.swift */; };
- 011946BA2A334C4900502077 /* ClashWebViewContoller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011946B92A334C4900502077 /* ClashWebViewContoller.swift */; };
- 012875E52A2E39CD004FB615 /* ClashX Dashboard in Frameworks */ = {isa = PBXBuildFile; productRef = 012875E42A2E39CD004FB615 /* ClashX Dashboard */; };
- 013C9F422AC160D200150FCC /* TerminalCleanUpAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013C9F3F2AC160D200150FCC /* TerminalCleanUpAction.swift */; };
- 013C9F432AC160D200150FCC /* UpdateConfigAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013C9F402AC160D200150FCC /* UpdateConfigAction.swift */; };
- 013C9F442AC160D200150FCC /* UpdateExternalResourceAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013C9F412AC160D200150FCC /* UpdateExternalResourceAction.swift */; };
- 0144905C2A8150920056028A /* Combine+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0144905A2A8150920056028A /* Combine+Ext.swift */; };
- 0144905D2A8150920056028A /* SpeedUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0144905B2A8150920056028A /* SpeedUtils.swift */; };
- 0144905F2A8153260056028A /* ClashWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0144905E2A8153250056028A /* ClashWindowController.swift */; };
- 015EC9432A48891000145F7F /* NormalMenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015EC9422A48891000145F7F /* NormalMenuItemView.swift */; };
- 015F1E91288E42A50052B20A /* ClashMetaConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015F1E90288E42A50052B20A /* ClashMetaConfig.swift */; };
- 015F1E92288E60D30052B20A /* MetaTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0162E74E2864B819007218A6 /* MetaTask.swift */; };
- 0162E74F2864B819007218A6 /* MetaTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0162E74E2864B819007218A6 /* MetaTask.swift */; };
- 016BEAB029D80103001586C5 /* AlphaMetaDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016BEAAF29D80102001586C5 /* AlphaMetaDownloader.swift */; };
- 018F88F9286DD0CB004DD0F7 /* DualTitleMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018F88F8286DD0CB004DD0F7 /* DualTitleMenuItem.swift */; };
- 0192312129DD457000539EDD /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312029DD457000539EDD /* Alamofire */; };
- 0192312429DD464400539EDD /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312329DD464400539EDD /* RxCocoa */; };
- 0192312629DD464400539EDD /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312529DD464400539EDD /* RxSwift */; };
- 0192312929DD476A00539EDD /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312829DD476A00539EDD /* SwiftyJSON */; };
- 0192312C29DD47FB00539EDD /* CocoaLumberjackSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312B29DD47FB00539EDD /* CocoaLumberjackSwift */; };
- 0192312F29DD483100539EDD /* Starscream in Frameworks */ = {isa = PBXBuildFile; productRef = 0192312E29DD483100539EDD /* Starscream */; };
- 0192313229DD488D00539EDD /* FlexibleDiff in Frameworks */ = {isa = PBXBuildFile; productRef = 0192313129DD488D00539EDD /* FlexibleDiff */; };
- 0192313529DD48BC00539EDD /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = 0192313429DD48BC00539EDD /* Gzip */; };
- 0192313829DD490400539EDD /* Yams in Frameworks */ = {isa = PBXBuildFile; productRef = 0192313729DD490400539EDD /* Yams */; };
- 0192313B29DD496E00539EDD /* PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = 0192313A29DD496E00539EDD /* PromiseKit */; };
- 01943259287D19BC008CC51A /* ClashRuleProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01943258287D19BC008CC51A /* ClashRuleProvider.swift */; };
- 019A239628657A7A00AE5698 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 019A239528657A7A00AE5698 /* main.swift */; };
- 01B009AE2854533300B93618 /* geoip.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AC2854533200B93618 /* geoip.dat.gz */; };
- 01B009AF2854533300B93618 /* geosite.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AD2854533300B93618 /* geosite.dat.gz */; };
- 01B1CB082A2E1EC10073EA34 /* DashboardManagerSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B1CB072A2E1EC10073EA34 /* DashboardManagerSwiftUI.swift */; };
- 01B2274B29B845F100FE35C9 /* country.mmdb.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B2274A29B845F100FE35C9 /* country.mmdb.gz */; };
- 01BC9ABE2928EB5A00F9B177 /* MetaDNS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */; };
- 01C1462A28962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */; };
- 01C5B88D2A4FD1DB00C4E36A /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01C5B88C2A4FD1DB00C4E36A /* Logger.swift */; };
- 01E33AB229B5BF4200FD1006 /* NSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */; };
- 01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */; };
- 01EACC702A2F9408001C584B /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = 01EACC6F2A2F9408001C584B /* KeyboardShortcuts */; };
- 01EACC722A2F9469001C584B /* SSIDSuspendTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EACC712A2F9469001C584B /* SSIDSuspendTool.swift */; };
- 01EACC752A2F94AB001C584B /* DebugSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EACC732A2F94AB001C584B /* DebugSettingViewController.swift */; };
- 01EACC762A2F94AB001C584B /* GlobalShortCutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EACC742A2F94AB001C584B /* GlobalShortCutViewController.swift */; };
- 01EACC782A2F94C7001C584B /* NSView+Layout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01EACC772A2F94C7001C584B /* NSView+Layout.swift */; };
- 4913C82321157D0200F6B87C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4913C82221157D0200F6B87C /* Notification.swift */; };
- 491E6203258A424D00313AEF /* CommonUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 491E61FD258A424500313AEF /* CommonUtils.m */; };
- 49228457270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */; };
- 4929F67F258CE04700A435F6 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4929F67E258CE04700A435F6 /* Settings.swift */; };
- 4929F684258CE07500A435F6 /* UserDefaultWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4929F683258CE07500A435F6 /* UserDefaultWrapper.swift */; };
- 492C4869210EE6B9004554A0 /* ApiRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492C4868210EE6B9004554A0 /* ApiRequest.swift */; };
- 492C4871210EF62E004554A0 /* ClashConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492C4870210EF62E004554A0 /* ClashConfig.swift */; };
- 493A9F282453E60400D35296 /* ProxyDelayHistoryMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493A9F272453E60400D35296 /* ProxyDelayHistoryMenu.swift */; };
- 493AEAE3221AE3420016FE98 /* AppVersionUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493AEAE2221AE3420016FE98 /* AppVersionUtil.swift */; };
- 493AEAE5221AE7230016FE98 /* ProxyMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493AEAE4221AE7230016FE98 /* ProxyMenuItem.swift */; };
- 4949D154213242F600EF85E6 /* Paths.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4949D153213242F600EF85E6 /* Paths.swift */; };
- 4952C3BF2115C7CA004A4FA8 /* MenuItemFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4952C3BE2115C7CA004A4FA8 /* MenuItemFactory.swift */; };
- 4952C3D02117027C004A4FA8 /* ConfigFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4952C3CF2117027C004A4FA8 /* ConfigFileManager.swift */; };
- 495340B020DE5F7200B0D3FF /* StatusItemView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 495340AF20DE5F7200B0D3FF /* StatusItemView.xib */; };
- 495340B320DE68C300B0D3FF /* StatusItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495340B220DE68C300B0D3FF /* StatusItemView.swift */; };
- 495A44D320D267D000888A0A /* LaunchAtLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495A44D220D267D000888A0A /* LaunchAtLogin.swift */; };
- 495BFB8821919B9800C8779D /* RemoteConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495BFB8721919B9800C8779D /* RemoteConfigManager.swift */; };
- 4966E9E32118153A00A391FB /* NSUserNotificationCenter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4966E9E22118153A00A391FB /* NSUserNotificationCenter+Extension.swift */; };
- 49722FEF211F338B00650A41 /* FileEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEA211F338B00650A41 /* FileEvent.swift */; };
- 49722FF0211F338B00650A41 /* EventStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEB211F338B00650A41 /* EventStream.swift */; };
- 49722FF1211F338B00650A41 /* Witness.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEC211F338B00650A41 /* Witness.swift */; };
- 49761DA721C9497000AE13EF /* dashboard in Resources */ = {isa = PBXBuildFile; fileRef = 49761DA621C9497000AE13EF /* dashboard */; };
- 49769FB427E9B3E400E3D664 /* LoginKitWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 49D8276727E9B01700159D93 /* LoginKitWrapper.m */; };
- 4981C88B216BAE4A008CC14A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4981C88D216BAE4A008CC14A /* Localizable.strings */; };
- 4982F51F2344A216008804B0 /* Cgo+Convert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4982F51E2344A216008804B0 /* Cgo+Convert.swift */; };
- 49862FA0218418C600A1D5EC /* ClashRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49862F9F218418C600A1D5EC /* ClashRule.swift */; };
- 4989F98E20D0AE990001E564 /* sampleConfig.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 4989F98D20D0AE990001E564 /* sampleConfig.yaml */; };
- 498BC2532929CC2A00CA8084 /* SettingTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498BC2522929CC2A00CA8084 /* SettingTabViewController.swift */; };
- 498BC2552929CCAE00CA8084 /* GeneralSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498BC2542929CCAE00CA8084 /* GeneralSettingViewController.swift */; };
- 499A485522ED707300F6C675 /* RemoteConfigViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485322ED707300F6C675 /* RemoteConfigViewController.swift */; };
- 499A485822ED715200F6C675 /* RemoteConfigModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485722ED715200F6C675 /* RemoteConfigModel.swift */; };
- 499A485A22ED781100F6C675 /* RemoteConfigAddView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 499A485922ED781100F6C675 /* RemoteConfigAddView.xib */; };
- 499A485C22ED793C00F6C675 /* NSView+Nib.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485B22ED793C00F6C675 /* NSView+Nib.swift */; };
- 499A485E22ED9B7C00F6C675 /* NSTableView+Reload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485D22ED9B7C00F6C675 /* NSTableView+Reload.swift */; };
- 499A486522EEA3FD00F6C675 /* Array+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A486422EEA3FC00F6C675 /* Array+Safe.swift */; };
- 499ADAFD2498CC5900C488FE /* RemoteControlManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499ADAFC2498CC5900C488FE /* RemoteControlManager.swift */; };
- 499ADAFF2498FC6D00C488FE /* ExternalControlViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499ADAFE2498FC6D00C488FE /* ExternalControlViewController.swift */; };
- 49ABB749236B0F9E00535CD7 /* UnsafePointer+bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */; };
- 49B1086A216A356D0064FFCE /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B10869216A356D0064FFCE /* String+Extension.swift */; };
- 49B445162457CDF000B27E3E /* ClashStatusTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B445152457CDF000B27E3E /* ClashStatusTool.swift */; };
- 49B4575D244F4A2A00463C39 /* PrivilegedHelperManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */; };
- 49B4575F244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */; };
- 49BB31E7246853EA008A4CB0 /* ICloudManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BB31E6246853EA008A4CB0 /* ICloudManager.swift */; };
- 49BC061C212931F4005A0FE7 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BC061B212931F4005A0FE7 /* AboutViewController.swift */; };
- 49C9EF64223E78F5005D8B6A /* ClashProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C9EF63223E78F5005D8B6A /* ClashProxy.swift */; };
- 49CF3B2120CD7463001EBF94 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B2020CD7463001EBF94 /* AppDelegate.swift */; };
- 49CF3B2820CD7465001EBF94 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49CF3B2620CD7465001EBF94 /* Main.storyboard */; };
- 49CF3B5C20CE8068001EBF94 /* ClashResourceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B5B20CE8068001EBF94 /* ClashResourceManager.swift */; };
- 49CF3B6520CEE06C001EBF94 /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B6420CEE06C001EBF94 /* ConfigManager.swift */; };
- 49D176A72355FE680093DD7B /* NetworkChangeNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176A62355FE680093DD7B /* NetworkChangeNotifier.swift */; };
- 49D176A9235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176A8235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift */; };
- 49D176AB23575BB20093DD7B /* ProxyGroupMenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176AA23575BB20093DD7B /* ProxyGroupMenuItemView.swift */; };
- 49D6A45229AEEC15006487EF /* StatusItemTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D6A45129AEEC15006487EF /* StatusItemTool.swift */; };
- 49D6A45629AEEC55006487EF /* StatusItemViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D6A45529AEEC55006487EF /* StatusItemViewProtocol.swift */; };
- 8A2BBEA727A03ACB0081EBEF /* ProxySetting.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 8A2BBEA627A03ACB0081EBEF /* ProxySetting.sdef */; };
- 8ACD21BB27A04C7800BC4632 /* ProxySettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACD21BA27A04C7800BC4632 /* ProxySettingCommand.swift */; };
- 8ACD21BD27A04ED500BC4632 /* ProxyModeChangeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACD21BC27A04ED500BC4632 /* ProxyModeChangeCommand.swift */; };
- F910AA24240134AF00116E95 /* ProxyGroupMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F910AA23240134AF00116E95 /* ProxyGroupMenu.swift */; };
- F915A4622366ADEF004840BE /* ClashConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F915A4612366ADEF004840BE /* ClashConnection.swift */; };
- F9203A26236342820020D57D /* AppDelegate+..swift in Sources */ = {isa = PBXBuildFile; fileRef = F9203A25236342820020D57D /* AppDelegate+..swift */; };
- F92D0B24236BC12000575E15 /* SavedProxyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B23236BC12000575E15 /* SavedProxyModel.swift */; };
- F92D0B2A236C759100575E15 /* NSTextField+Vibrancy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B29236C759100575E15 /* NSTextField+Vibrancy.swift */; };
- F92D0B2C236C7C3600575E15 /* MenuItemBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B2B236C7C3600575E15 /* MenuItemBaseView.swift */; };
- F92D0B2E236D35C000575E15 /* ProxyItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B2D236D35C000575E15 /* ProxyItemView.swift */; };
- F935B2F02307C52E009E4D33 /* com.metacubex.ClashX.ProxyConfigHelper in Copy Files */ = {isa = PBXBuildFile; fileRef = F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
- F935B2F42307CD32009E4D33 /* ProxyConfigHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F935B2F32307CD32009E4D33 /* ProxyConfigHelper.m */; };
- F935B2FA23083EE6009E4D33 /* ProxySettingTool.m in Sources */ = {isa = PBXBuildFile; fileRef = F935B2F923083EE6009E4D33 /* ProxySettingTool.m */; };
- F935B2FC23085515009E4D33 /* SystemProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F935B2FB23085515009E4D33 /* SystemProxyManager.swift */; };
- F939724C23A4B33500FE5A3F /* ClashProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939724B23A4B33500FE5A3F /* ClashProvider.swift */; };
- F939724E23A4DB0600FE5A3F /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939724D23A4DB0600FE5A3F /* DateFormatter+.swift */; };
- F976275C23634DF8000EDEFE /* LoginServiceKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976275B23634DF8000EDEFE /* LoginServiceKit.swift */; };
- F977FAAC2366790500C17F1F /* AutoUpgardeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F977FAAB2366790500C17F1F /* AutoUpgardeManager.swift */; };
- F977FAAE23669D6400C17F1F /* ConnectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F977FAAD23669D6400C17F1F /* ConnectionManager.swift */; };
- F9E754D0239CC21F00CEE7CC /* WebPortalManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */; };
- F9E754D2239CC28D00CEE7CC /* NSAlert+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */; };
- F9E8F34623A12B89002DE5E8 /* String+Encode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E8F34523A12B89002DE5E8 /* String+Encode.swift */; };
- F9FAB31E262BE04800DE02A6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9FAB31D262BE04800DE02A6 /* Images.xcassets */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- F935B2EB2307B7CD009E4D33 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 49CF3B1520CD7463001EBF94 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = F9A7C0682306E874007163C7;
- remoteInfo = ProxyConfigHelper;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- 663E4677213FCDC4006F11BB /* Copy Files */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = Contents/Library/LaunchServices;
- dstSubfolderSpec = 1;
- files = (
- F935B2F02307C52E009E4D33 /* com.metacubex.ClashX.ProxyConfigHelper in Copy Files */,
- );
- name = "Copy Files";
- runOnlyForDeploymentPostprocessing = 0;
- };
- F9A7C0672306E874007163C7 /* Copy Files */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = /usr/share/man/man1/;
- dstSubfolderSpec = 0;
- files = (
- );
- name = "Copy Files";
- runOnlyForDeploymentPostprocessing = 1;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 011946B52A32F64500502077 /* TunModeSettingCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunModeSettingCommand.swift; sourceTree = ""; };
- 011946B92A334C4900502077 /* ClashWebViewContoller.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClashWebViewContoller.swift; sourceTree = ""; };
- 013C9F3F2AC160D200150FCC /* TerminalCleanUpAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TerminalCleanUpAction.swift; sourceTree = ""; };
- 013C9F402AC160D200150FCC /* UpdateConfigAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateConfigAction.swift; sourceTree = ""; };
- 013C9F412AC160D200150FCC /* UpdateExternalResourceAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateExternalResourceAction.swift; sourceTree = ""; };
- 0144905A2A8150920056028A /* Combine+Ext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Combine+Ext.swift"; sourceTree = ""; };
- 0144905B2A8150920056028A /* SpeedUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpeedUtils.swift; sourceTree = ""; };
- 0144905E2A8153250056028A /* ClashWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClashWindowController.swift; sourceTree = ""; };
- 015EC9422A48891000145F7F /* NormalMenuItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NormalMenuItemView.swift; sourceTree = ""; };
- 015F1E90288E42A50052B20A /* ClashMetaConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashMetaConfig.swift; sourceTree = ""; };
- 0162E74D2864B818007218A6 /* com.metacubex.ClashX.ProxyConfigHelper-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "com.metacubex.ClashX.ProxyConfigHelper-Bridging-Header.h"; sourceTree = ""; };
- 0162E74E2864B819007218A6 /* MetaTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaTask.swift; sourceTree = ""; };
- 016BEAAF29D80102001586C5 /* AlphaMetaDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlphaMetaDownloader.swift; sourceTree = ""; };
- 018F88F8286DD0CB004DD0F7 /* DualTitleMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DualTitleMenuItem.swift; sourceTree = ""; };
- 01943258287D19BC008CC51A /* ClashRuleProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashRuleProvider.swift; sourceTree = ""; };
- 019A239528657A7A00AE5698 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
- 01B009AC2854533200B93618 /* geoip.dat.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = geoip.dat.gz; sourceTree = ""; };
- 01B009AD2854533300B93618 /* geosite.dat.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = geosite.dat.gz; sourceTree = ""; };
- 01B1CB072A2E1EC10073EA34 /* DashboardManagerSwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardManagerSwiftUI.swift; sourceTree = ""; };
- 01B2274A29B845F100FE35C9 /* country.mmdb.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = country.mmdb.gz; sourceTree = ""; };
- 01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaDNS.swift; sourceTree = ""; };
- 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = ""; };
- 01C5B88C2A4FD1DB00C4E36A /* Logger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; };
- 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = ""; };
- 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; };
- 01EACC712A2F9469001C584B /* SSIDSuspendTool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SSIDSuspendTool.swift; sourceTree = ""; };
- 01EACC732A2F94AB001C584B /* DebugSettingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugSettingViewController.swift; sourceTree = ""; };
- 01EACC742A2F94AB001C584B /* GlobalShortCutViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlobalShortCutViewController.swift; sourceTree = ""; };
- 01EACC772A2F94C7001C584B /* NSView+Layout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSView+Layout.swift"; sourceTree = ""; };
- 4913C82221157D0200F6B87C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; };
- 491E61FC258A424500313AEF /* CommonUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonUtils.h; sourceTree = ""; };
- 491E61FD258A424500313AEF /* CommonUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommonUtils.m; sourceTree = ""; };
- 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteConfigUpdateIntervalSettingView.swift; sourceTree = ""; };
- 4929F67E258CE04700A435F6 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; };
- 4929F683258CE07500A435F6 /* UserDefaultWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultWrapper.swift; sourceTree = ""; };
- 492C4868210EE6B9004554A0 /* ApiRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiRequest.swift; sourceTree = ""; };
- 492C4870210EF62E004554A0 /* ClashConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashConfig.swift; sourceTree = ""; };
- 493A9F272453E60400D35296 /* ProxyDelayHistoryMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyDelayHistoryMenu.swift; sourceTree = ""; };
- 493AEAE2221AE3420016FE98 /* AppVersionUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersionUtil.swift; sourceTree = ""; };
- 493AEAE4221AE7230016FE98 /* ProxyMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyMenuItem.swift; sourceTree = ""; };
- 4949D153213242F600EF85E6 /* Paths.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Paths.swift; sourceTree = ""; };
- 4952C3BE2115C7CA004A4FA8 /* MenuItemFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemFactory.swift; sourceTree = ""; };
- 4952C3CF2117027C004A4FA8 /* ConfigFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigFileManager.swift; sourceTree = ""; };
- 495340AF20DE5F7200B0D3FF /* StatusItemView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = StatusItemView.xib; path = ClashX/Views/StatusItem/StatusItemView.xib; sourceTree = SOURCE_ROOT; };
- 495340B220DE68C300B0D3FF /* StatusItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusItemView.swift; sourceTree = ""; };
- 495A44D220D267D000888A0A /* LaunchAtLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchAtLogin.swift; sourceTree = ""; };
- 495BFB8721919B9800C8779D /* RemoteConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteConfigManager.swift; sourceTree = ""; };
- 4966E9E22118153A00A391FB /* NSUserNotificationCenter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSUserNotificationCenter+Extension.swift"; sourceTree = ""; };
- 49722FEA211F338B00650A41 /* FileEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileEvent.swift; sourceTree = ""; };
- 49722FEB211F338B00650A41 /* EventStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventStream.swift; sourceTree = ""; };
- 49722FEC211F338B00650A41 /* Witness.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Witness.swift; sourceTree = ""; };
- 49722FED211F338B00650A41 /* Witness.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Witness.h; sourceTree = ""; };
- 49761DA621C9497000AE13EF /* dashboard */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dashboard; sourceTree = ""; };
- 4981C887216BAB8A008CC14A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; };
- 4981C88C216BAE4A008CC14A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
- 4981C88E216BAE4D008CC14A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; };
- 4982F51E2344A216008804B0 /* Cgo+Convert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Cgo+Convert.swift"; sourceTree = ""; };
- 49862F9F218418C600A1D5EC /* ClashRule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashRule.swift; sourceTree = ""; };
- 498960722340F21C00AFB7EC /* com.metacubex.ClashX.ProxyConfigHelper.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = com.metacubex.ClashX.ProxyConfigHelper.entitlements; sourceTree = ""; };
- 4989F98D20D0AE990001E564 /* sampleConfig.yaml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = sampleConfig.yaml; sourceTree = ""; };
- 498BC2522929CC2A00CA8084 /* SettingTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingTabViewController.swift; sourceTree = ""; };
- 498BC2542929CCAE00CA8084 /* GeneralSettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingViewController.swift; sourceTree = ""; };
- 499A485322ED707300F6C675 /* RemoteConfigViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteConfigViewController.swift; sourceTree = ""; };
- 499A485722ED715200F6C675 /* RemoteConfigModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteConfigModel.swift; sourceTree = ""; };
- 499A485922ED781100F6C675 /* RemoteConfigAddView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RemoteConfigAddView.xib; sourceTree = ""; };
- 499A485B22ED793C00F6C675 /* NSView+Nib.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSView+Nib.swift"; sourceTree = ""; };
- 499A485D22ED9B7C00F6C675 /* NSTableView+Reload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTableView+Reload.swift"; sourceTree = ""; };
- 499A486422EEA3FC00F6C675 /* Array+Safe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Safe.swift"; sourceTree = ""; };
- 499ADAFC2498CC5900C488FE /* RemoteControlManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteControlManager.swift; sourceTree = ""; };
- 499ADAFE2498FC6D00C488FE /* ExternalControlViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalControlViewController.swift; sourceTree = ""; };
- 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnsafePointer+bridge.swift"; sourceTree = ""; };
- 49B10869216A356D0064FFCE /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = ""; };
- 49B445152457CDF000B27E3E /* ClashStatusTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashStatusTool.swift; sourceTree = ""; };
- 49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivilegedHelperManager.swift; sourceTree = ""; };
- 49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PrivilegedHelperManager+Legacy.swift"; sourceTree = ""; };
- 49BB31E6246853EA008A4CB0 /* ICloudManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICloudManager.swift; sourceTree = ""; };
- 49BC061B212931F4005A0FE7 /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = ""; };
- 49C9EF63223E78F5005D8B6A /* ClashProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashProxy.swift; sourceTree = ""; };
- 49CF3B1D20CD7463001EBF94 /* ClashX Meta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 49CF3B2020CD7463001EBF94 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 49CF3B2720CD7465001EBF94 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
- 49CF3B2920CD7465001EBF94 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 49CF3B2A20CD7465001EBF94 /* ClashX.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ClashX.entitlements; sourceTree = ""; };
- 49CF3B3520CD75DF001EBF94 /* ClashX-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ClashX-Bridging-Header.h"; sourceTree = ""; };
- 49CF3B5B20CE8068001EBF94 /* ClashResourceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashResourceManager.swift; sourceTree = ""; };
- 49CF3B6420CEE06C001EBF94 /* ConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigManager.swift; sourceTree = ""; };
- 49D176A62355FE680093DD7B /* NetworkChangeNotifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkChangeNotifier.swift; sourceTree = ""; };
- 49D176A8235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyGroupSpeedTestMenuItem.swift; sourceTree = ""; };
- 49D176AA23575BB20093DD7B /* ProxyGroupMenuItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyGroupMenuItemView.swift; sourceTree = ""; };
- 49D6A45129AEEC15006487EF /* StatusItemTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusItemTool.swift; sourceTree = ""; };
- 49D6A45529AEEC55006487EF /* StatusItemViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusItemViewProtocol.swift; sourceTree = ""; };
- 49D8276627E9B01700159D93 /* LoginKitWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginKitWrapper.h; sourceTree = ""; };
- 49D8276727E9B01700159D93 /* LoginKitWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginKitWrapper.m; sourceTree = ""; };
- 8A2BBEA627A03ACB0081EBEF /* ProxySetting.sdef */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = ProxySetting.sdef; sourceTree = ""; };
- 8ACD21BA27A04C7800BC4632 /* ProxySettingCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxySettingCommand.swift; sourceTree = ""; };
- 8ACD21BC27A04ED500BC4632 /* ProxyModeChangeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyModeChangeCommand.swift; sourceTree = ""; };
- F910AA23240134AF00116E95 /* ProxyGroupMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyGroupMenu.swift; sourceTree = ""; };
- F915A4612366ADEF004840BE /* ClashConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashConnection.swift; sourceTree = ""; };
- F9203A25236342820020D57D /* AppDelegate+..swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+..swift"; sourceTree = ""; };
- F92D0B23236BC12000575E15 /* SavedProxyModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavedProxyModel.swift; sourceTree = ""; };
- F92D0B29236C759100575E15 /* NSTextField+Vibrancy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextField+Vibrancy.swift"; sourceTree = ""; };
- F92D0B2B236C7C3600575E15 /* MenuItemBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemBaseView.swift; sourceTree = ""; };
- F92D0B2D236D35C000575E15 /* ProxyItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyItemView.swift; sourceTree = ""; };
- F935B2EA2307B6BA009E4D33 /* Helper-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Helper-Info.plist"; sourceTree = ""; };
- F935B2F12307C802009E4D33 /* Helper-Launchd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Helper-Launchd.plist"; sourceTree = ""; };
- F935B2F22307CD32009E4D33 /* ProxyConfigHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProxyConfigHelper.h; sourceTree = ""; };
- F935B2F32307CD32009E4D33 /* ProxyConfigHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProxyConfigHelper.m; sourceTree = ""; };
- F935B2F52307D00D009E4D33 /* ProxyConfigRemoteProcessProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProxyConfigRemoteProcessProtocol.h; sourceTree = ""; };
- F935B2F823083EE6009E4D33 /* ProxySettingTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProxySettingTool.h; sourceTree = ""; };
- F935B2F923083EE6009E4D33 /* ProxySettingTool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProxySettingTool.m; sourceTree = ""; };
- F935B2FB23085515009E4D33 /* SystemProxyManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemProxyManager.swift; sourceTree = ""; };
- F939724B23A4B33500FE5A3F /* ClashProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClashProvider.swift; sourceTree = ""; };
- F939724D23A4DB0600FE5A3F /* DateFormatter+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+.swift"; sourceTree = ""; };
- F976275B23634DF8000EDEFE /* LoginServiceKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginServiceKit.swift; sourceTree = ""; };
- F977FAAB2366790500C17F1F /* AutoUpgardeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoUpgardeManager.swift; sourceTree = ""; };
- F977FAAD23669D6400C17F1F /* ConnectionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionManager.swift; sourceTree = ""; };
- F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = com.metacubex.ClashX.ProxyConfigHelper; sourceTree = BUILT_PRODUCTS_DIR; };
- F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebPortalManager.swift; sourceTree = ""; };
- F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAlert+Extension.swift"; sourceTree = ""; };
- F9E8F34523A12B89002DE5E8 /* String+Encode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Encode.swift"; sourceTree = ""; };
- F9FAB31D262BE04800DE02A6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 49CF3B1A20CD7463001EBF94 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 0192312629DD464400539EDD /* RxSwift in Frameworks */,
- 0192313829DD490400539EDD /* Yams in Frameworks */,
- 0192312429DD464400539EDD /* RxCocoa in Frameworks */,
- 0192312929DD476A00539EDD /* SwiftyJSON in Frameworks */,
- 0192312129DD457000539EDD /* Alamofire in Frameworks */,
- 01EACC702A2F9408001C584B /* KeyboardShortcuts in Frameworks */,
- 0192313B29DD496E00539EDD /* PromiseKit in Frameworks */,
- 0192312C29DD47FB00539EDD /* CocoaLumberjackSwift in Frameworks */,
- 012875E52A2E39CD004FB615 /* ClashX Dashboard in Frameworks */,
- 0192312F29DD483100539EDD /* Starscream in Frameworks */,
- 0192313529DD48BC00539EDD /* Gzip in Frameworks */,
- 0192313229DD488D00539EDD /* FlexibleDiff in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- F9A7C0662306E874007163C7 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 011BFE4E2A27A7500027AD15 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- );
- name = Frameworks;
- sourceTree = "";
- };
- 013C9F3E2AC160D200150FCC /* Actions */ = {
- isa = PBXGroup;
- children = (
- 013C9F412AC160D200150FCC /* UpdateExternalResourceAction.swift */,
- 013C9F3F2AC160D200150FCC /* TerminalCleanUpAction.swift */,
- 013C9F402AC160D200150FCC /* UpdateConfigAction.swift */,
- );
- path = Actions;
- sourceTree = "";
- };
- 4913C82021157CEB00F6B87C /* Macro */ = {
- isa = PBXGroup;
- children = (
- 4913C82221157D0200F6B87C /* Notification.swift */,
- 4949D153213242F600EF85E6 /* Paths.swift */,
- );
- path = Macro;
- sourceTree = "";
- };
- 491C24FF21BD558B00AB5D44 /* Extensions */ = {
- isa = PBXGroup;
- children = (
- 499A486422EEA3FC00F6C675 /* Array+Safe.swift */,
- 4966E9E22118153A00A391FB /* NSUserNotificationCenter+Extension.swift */,
- 499A485B22ED793C00F6C675 /* NSView+Nib.swift */,
- 499A485D22ED9B7C00F6C675 /* NSTableView+Reload.swift */,
- 4982F51E2344A216008804B0 /* Cgo+Convert.swift */,
- F9203A25236342820020D57D /* AppDelegate+..swift */,
- F92D0B29236C759100575E15 /* NSTextField+Vibrancy.swift */,
- F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */,
- F9E8F34523A12B89002DE5E8 /* String+Encode.swift */,
- F939724D23A4DB0600FE5A3F /* DateFormatter+.swift */,
- 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */,
- );
- path = Extensions;
- sourceTree = "";
- };
- 491C250021BD55B900AB5D44 /* Utils */ = {
- isa = PBXGroup;
- children = (
- 493AEAE2221AE3420016FE98 /* AppVersionUtil.swift */,
- 49D176A62355FE680093DD7B /* NetworkChangeNotifier.swift */,
- 49B445152457CDF000B27E3E /* ClashStatusTool.swift */,
- 01EACC712A2F9469001C584B /* SSIDSuspendTool.swift */,
- );
- path = Utils;
- sourceTree = "";
- };
- 491C250121BD561200AB5D44 /* Managers */ = {
- isa = PBXGroup;
- children = (
- 4952C3CF2117027C004A4FA8 /* ConfigFileManager.swift */,
- 49CF3B5B20CE8068001EBF94 /* ClashResourceManager.swift */,
- 49CF3B6420CEE06C001EBF94 /* ConfigManager.swift */,
- 495BFB8721919B9800C8779D /* RemoteConfigManager.swift */,
- 4952C3BE2115C7CA004A4FA8 /* MenuItemFactory.swift */,
- F935B2FB23085515009E4D33 /* SystemProxyManager.swift */,
- F977FAAB2366790500C17F1F /* AutoUpgardeManager.swift */,
- F977FAAD23669D6400C17F1F /* ConnectionManager.swift */,
- F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */,
- 49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */,
- 49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */,
- 49BB31E6246853EA008A4CB0 /* ICloudManager.swift */,
- 499ADAFC2498CC5900C488FE /* RemoteControlManager.swift */,
- 4929F67E258CE04700A435F6 /* Settings.swift */,
- );
- path = Managers;
- sourceTree = "";
- };
- 492C4866210EE69B004554A0 /* General */ = {
- isa = PBXGroup;
- children = (
- 491C250121BD561200AB5D44 /* Managers */,
- 491C250021BD55B900AB5D44 /* Utils */,
- 492C4868210EE6B9004554A0 /* ApiRequest.swift */,
- 015F1E90288E42A50052B20A /* ClashMetaConfig.swift */,
- 016BEAAF29D80102001586C5 /* AlphaMetaDownloader.swift */,
- );
- path = General;
- sourceTree = "";
- };
- 492C486E210EF621004554A0 /* Models */ = {
- isa = PBXGroup;
- children = (
- 492C4870210EF62E004554A0 /* ClashConfig.swift */,
- 49862F9F218418C600A1D5EC /* ClashRule.swift */,
- 49C9EF63223E78F5005D8B6A /* ClashProxy.swift */,
- 499A485722ED715200F6C675 /* RemoteConfigModel.swift */,
- F915A4612366ADEF004840BE /* ClashConnection.swift */,
- F92D0B23236BC12000575E15 /* SavedProxyModel.swift */,
- F939724B23A4B33500FE5A3F /* ClashProvider.swift */,
- 01943258287D19BC008CC51A /* ClashRuleProvider.swift */,
- );
- path = Models;
- sourceTree = "";
- };
- 4931969C21631F2E00A8E6E7 /* Views */ = {
- isa = PBXGroup;
- children = (
- 49BC1B4029AEEBBB002007B1 /* StatusItem */,
- F92D0B2B236C7C3600575E15 /* MenuItemBaseView.swift */,
- 49D176AA23575BB20093DD7B /* ProxyGroupMenuItemView.swift */,
- 49D176A8235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift */,
- F92D0B2D236D35C000575E15 /* ProxyItemView.swift */,
- 493AEAE4221AE7230016FE98 /* ProxyMenuItem.swift */,
- 499A485922ED781100F6C675 /* RemoteConfigAddView.xib */,
- F910AA23240134AF00116E95 /* ProxyGroupMenu.swift */,
- 493A9F272453E60400D35296 /* ProxyDelayHistoryMenu.swift */,
- 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */,
- 018F88F8286DD0CB004DD0F7 /* DualTitleMenuItem.swift */,
- 015EC9422A48891000145F7F /* NormalMenuItemView.swift */,
- );
- path = Views;
- sourceTree = "";
- };
- 49722FDD211ED2A900650A41 /* Vendor */ = {
- isa = PBXGroup;
- children = (
- 4929F683258CE07500A435F6 /* UserDefaultWrapper.swift */,
- F976275D23634F18000EDEFE /* LoginServiceKit */,
- 49722FE9211F338B00650A41 /* Witness */,
- 49D8276627E9B01700159D93 /* LoginKitWrapper.h */,
- 49D8276727E9B01700159D93 /* LoginKitWrapper.m */,
- );
- path = Vendor;
- sourceTree = "";
- };
- 49722FE9211F338B00650A41 /* Witness */ = {
- isa = PBXGroup;
- children = (
- 49722FEA211F338B00650A41 /* FileEvent.swift */,
- 49722FEB211F338B00650A41 /* EventStream.swift */,
- 49722FEC211F338B00650A41 /* Witness.swift */,
- 49722FED211F338B00650A41 /* Witness.h */,
- );
- path = Witness;
- sourceTree = "";
- };
- 49761DA521C9490400AE13EF /* Resources */ = {
- isa = PBXGroup;
- children = (
- 01B2274A29B845F100FE35C9 /* country.mmdb.gz */,
- 01B009AC2854533200B93618 /* geoip.dat.gz */,
- 01B009AD2854533300B93618 /* geosite.dat.gz */,
- 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */,
- 49761DA621C9497000AE13EF /* dashboard */,
- 4989F98D20D0AE990001E564 /* sampleConfig.yaml */,
- 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */,
- );
- path = Resources;
- sourceTree = "";
- };
- 4989F98520D0AA300001E564 /* ViewControllers */ = {
- isa = PBXGroup;
- children = (
- 498BC2512929CC0A00CA8084 /* Settings */,
- 49BC061B212931F4005A0FE7 /* AboutViewController.swift */,
- 01B1CB072A2E1EC10073EA34 /* DashboardManagerSwiftUI.swift */,
- 011946B92A334C4900502077 /* ClashWebViewContoller.swift */,
- 499A485322ED707300F6C675 /* RemoteConfigViewController.swift */,
- 499ADAFE2498FC6D00C488FE /* ExternalControlViewController.swift */,
- );
- path = ViewControllers;
- sourceTree = "";
- };
- 498BC2512929CC0A00CA8084 /* Settings */ = {
- isa = PBXGroup;
- children = (
- 498BC2522929CC2A00CA8084 /* SettingTabViewController.swift */,
- 01EACC732A2F94AB001C584B /* DebugSettingViewController.swift */,
- 01EACC742A2F94AB001C584B /* GlobalShortCutViewController.swift */,
- 498BC2542929CCAE00CA8084 /* GeneralSettingViewController.swift */,
- );
- path = Settings;
- sourceTree = "";
- };
- 4997732220D251A60009B136 /* Basic */ = {
- isa = PBXGroup;
- children = (
- 495A44D220D267D000888A0A /* LaunchAtLogin.swift */,
- 01C5B88C2A4FD1DB00C4E36A /* Logger.swift */,
- 01EACC772A2F94C7001C584B /* NSView+Layout.swift */,
- 49B10869216A356D0064FFCE /* String+Extension.swift */,
- 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */,
- 0144905B2A8150920056028A /* SpeedUtils.swift */,
- 0144905A2A8150920056028A /* Combine+Ext.swift */,
- );
- path = Basic;
- sourceTree = "";
- };
- 49BC1B4029AEEBBB002007B1 /* StatusItem */ = {
- isa = PBXGroup;
- children = (
- 495340AF20DE5F7200B0D3FF /* StatusItemView.xib */,
- 495340B220DE68C300B0D3FF /* StatusItemView.swift */,
- 49D6A45129AEEC15006487EF /* StatusItemTool.swift */,
- 49D6A45529AEEC55006487EF /* StatusItemViewProtocol.swift */,
- );
- path = StatusItem;
- sourceTree = "";
- };
- 49CF3B1420CD7463001EBF94 = {
- isa = PBXGroup;
- children = (
- 49CF3B1F20CD7463001EBF94 /* ClashX */,
- F9A7C06A2306E874007163C7 /* ProxyConfigHelper */,
- 49CF3B1E20CD7463001EBF94 /* Products */,
- 011BFE4E2A27A7500027AD15 /* Frameworks */,
- );
- sourceTree = "";
- };
- 49CF3B1E20CD7463001EBF94 /* Products */ = {
- isa = PBXGroup;
- children = (
- 49CF3B1D20CD7463001EBF94 /* ClashX Meta.app */,
- F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */,
- );
- name = Products;
- sourceTree = "";
- };
- 49CF3B1F20CD7463001EBF94 /* ClashX */ = {
- isa = PBXGroup;
- children = (
- 8A2BBEA527A03A920081EBEF /* AppleScript */,
- 49722FDD211ED2A900650A41 /* Vendor */,
- 4913C82021157CEB00F6B87C /* Macro */,
- 4997732220D251A60009B136 /* Basic */,
- 492C486E210EF621004554A0 /* Models */,
- 491C24FF21BD558B00AB5D44 /* Extensions */,
- 492C4866210EE69B004554A0 /* General */,
- 4931969C21631F2E00A8E6E7 /* Views */,
- 013C9F3E2AC160D200150FCC /* Actions */,
- 4989F98520D0AA300001E564 /* ViewControllers */,
- 49761DA521C9490400AE13EF /* Resources */,
- 49CF3B3A20CD783A001EBF94 /* Support Files */,
- 49CF3B2020CD7463001EBF94 /* AppDelegate.swift */,
- 49CF3B2620CD7465001EBF94 /* Main.storyboard */,
- 49CF3B2920CD7465001EBF94 /* Info.plist */,
- 49CF3B2A20CD7465001EBF94 /* ClashX.entitlements */,
- 49CF3B3520CD75DF001EBF94 /* ClashX-Bridging-Header.h */,
- F9FAB31D262BE04800DE02A6 /* Images.xcassets */,
- 0144905E2A8153250056028A /* ClashWindowController.swift */,
- );
- path = ClashX;
- sourceTree = "";
- };
- 49CF3B3A20CD783A001EBF94 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- 4981C88D216BAE4A008CC14A /* Localizable.strings */,
- );
- path = "Support Files";
- sourceTree = "";
- };
- 8A2BBEA527A03A920081EBEF /* AppleScript */ = {
- isa = PBXGroup;
- children = (
- 011946B52A32F64500502077 /* TunModeSettingCommand.swift */,
- 8A2BBEA627A03ACB0081EBEF /* ProxySetting.sdef */,
- 8ACD21BA27A04C7800BC4632 /* ProxySettingCommand.swift */,
- 8ACD21BC27A04ED500BC4632 /* ProxyModeChangeCommand.swift */,
- );
- path = AppleScript;
- sourceTree = "";
- };
- F976275D23634F18000EDEFE /* LoginServiceKit */ = {
- isa = PBXGroup;
- children = (
- F976275B23634DF8000EDEFE /* LoginServiceKit.swift */,
- );
- path = LoginServiceKit;
- sourceTree = "";
- };
- F9A7C06A2306E874007163C7 /* ProxyConfigHelper */ = {
- isa = PBXGroup;
- children = (
- 491E61FC258A424500313AEF /* CommonUtils.h */,
- 491E61FD258A424500313AEF /* CommonUtils.m */,
- 498960722340F21C00AFB7EC /* com.metacubex.ClashX.ProxyConfigHelper.entitlements */,
- 019A239528657A7A00AE5698 /* main.swift */,
- 0162E74E2864B819007218A6 /* MetaTask.swift */,
- 01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */,
- F935B2F12307C802009E4D33 /* Helper-Launchd.plist */,
- F935B2EA2307B6BA009E4D33 /* Helper-Info.plist */,
- F935B2F22307CD32009E4D33 /* ProxyConfigHelper.h */,
- F935B2F32307CD32009E4D33 /* ProxyConfigHelper.m */,
- F935B2F52307D00D009E4D33 /* ProxyConfigRemoteProcessProtocol.h */,
- F935B2F823083EE6009E4D33 /* ProxySettingTool.h */,
- F935B2F923083EE6009E4D33 /* ProxySettingTool.m */,
- 0162E74D2864B818007218A6 /* com.metacubex.ClashX.ProxyConfigHelper-Bridging-Header.h */,
- );
- path = ProxyConfigHelper;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 49CF3B1C20CD7463001EBF94 /* ClashX Meta */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 49CF3B2D20CD7465001EBF94 /* Build configuration list for PBXNativeTarget "ClashX Meta" */;
- buildPhases = (
- 49CF3B1920CD7463001EBF94 /* Sources */,
- 49CF3B1A20CD7463001EBF94 /* Frameworks */,
- 49CF3B1B20CD7463001EBF94 /* Resources */,
- 663E4677213FCDC4006F11BB /* Copy Files */,
- );
- buildRules = (
- );
- dependencies = (
- F935B2EC2307B7CD009E4D33 /* PBXTargetDependency */,
- );
- name = "ClashX Meta";
- packageProductDependencies = (
- 0192312029DD457000539EDD /* Alamofire */,
- 0192312329DD464400539EDD /* RxCocoa */,
- 0192312529DD464400539EDD /* RxSwift */,
- 0192312829DD476A00539EDD /* SwiftyJSON */,
- 0192312B29DD47FB00539EDD /* CocoaLumberjackSwift */,
- 0192312E29DD483100539EDD /* Starscream */,
- 0192313129DD488D00539EDD /* FlexibleDiff */,
- 0192313429DD48BC00539EDD /* Gzip */,
- 0192313729DD490400539EDD /* Yams */,
- 0192313A29DD496E00539EDD /* PromiseKit */,
- 012875E42A2E39CD004FB615 /* ClashX Dashboard */,
- 01EACC6F2A2F9408001C584B /* KeyboardShortcuts */,
- );
- productName = ClashX;
- productReference = 49CF3B1D20CD7463001EBF94 /* ClashX Meta.app */;
- productType = "com.apple.product-type.application";
- };
- F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = F9A7C06D2306E874007163C7 /* Build configuration list for PBXNativeTarget "com.metacubex.ClashX.ProxyConfigHelper" */;
- buildPhases = (
- F9A7C0652306E874007163C7 /* Sources */,
- F9A7C0662306E874007163C7 /* Frameworks */,
- F9A7C0672306E874007163C7 /* Copy Files */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = com.metacubex.ClashX.ProxyConfigHelper;
- productName = ProxyConfigHelper;
- productReference = F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */;
- productType = "com.apple.product-type.tool";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 49CF3B1520CD7463001EBF94 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 1420;
- LastUpgradeCheck = 1420;
- ORGANIZATIONNAME = west2online;
- TargetAttributes = {
- 49CF3B1C20CD7463001EBF94 = {
- CreatedOnToolsVersion = 9.4;
- LastSwiftMigration = 1020;
- SystemCapabilities = {
- com.apple.HardenedRuntime = {
- enabled = 1;
- };
- com.apple.Sandbox = {
- enabled = 0;
- };
- };
- };
- F9A7C0682306E874007163C7 = {
- CreatedOnToolsVersion = 10.3;
- LastSwiftMigration = 1340;
- };
- };
- };
- buildConfigurationList = 49CF3B1820CD7463001EBF94 /* Build configuration list for PBXProject "ClashX SwiftUI" */;
- compatibilityVersion = "Xcode 9.3";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- "zh-Hans",
- );
- mainGroup = 49CF3B1420CD7463001EBF94;
- packageReferences = (
- 0192311F29DD457000539EDD /* XCRemoteSwiftPackageReference "Alamofire" */,
- 0192312229DD464400539EDD /* XCRemoteSwiftPackageReference "RxSwift" */,
- 0192312729DD476A00539EDD /* XCRemoteSwiftPackageReference "SwiftyJSON" */,
- 0192312A29DD47FB00539EDD /* XCRemoteSwiftPackageReference "CocoaLumberjack" */,
- 0192312D29DD483100539EDD /* XCRemoteSwiftPackageReference "Starscream" */,
- 0192313029DD488D00539EDD /* XCRemoteSwiftPackageReference "FlexibleDiff" */,
- 0192313329DD48BC00539EDD /* XCRemoteSwiftPackageReference "GzipSwift" */,
- 0192313629DD490400539EDD /* XCRemoteSwiftPackageReference "Yams" */,
- 0192313929DD496E00539EDD /* XCRemoteSwiftPackageReference "PromiseKit" */,
- 012875E32A2E39CD004FB615 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */,
- 01EACC6E2A2F9408001C584B /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */,
- );
- productRefGroup = 49CF3B1E20CD7463001EBF94 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 49CF3B1C20CD7463001EBF94 /* ClashX Meta */,
- F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 49CF3B1B20CD7463001EBF94 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 01B009AF2854533300B93618 /* geosite.dat.gz in Resources */,
- 49761DA721C9497000AE13EF /* dashboard in Resources */,
- 4981C88B216BAE4A008CC14A /* Localizable.strings in Resources */,
- 8A2BBEA727A03ACB0081EBEF /* ProxySetting.sdef in Resources */,
- F9FAB31E262BE04800DE02A6 /* Images.xcassets in Resources */,
- 01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */,
- 495340B020DE5F7200B0D3FF /* StatusItemView.xib in Resources */,
- 01B009AE2854533300B93618 /* geoip.dat.gz in Resources */,
- 49CF3B2820CD7465001EBF94 /* Main.storyboard in Resources */,
- 499A485A22ED781100F6C675 /* RemoteConfigAddView.xib in Resources */,
- 4989F98E20D0AE990001E564 /* sampleConfig.yaml in Resources */,
- 01C1462A28962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */,
- 01B2274B29B845F100FE35C9 /* country.mmdb.gz in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 49CF3B1920CD7463001EBF94 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 011946BA2A334C4900502077 /* ClashWebViewContoller.swift in Sources */,
- 49ABB749236B0F9E00535CD7 /* UnsafePointer+bridge.swift in Sources */,
- 01EACC762A2F94AB001C584B /* GlobalShortCutViewController.swift in Sources */,
- 499A485522ED707300F6C675 /* RemoteConfigViewController.swift in Sources */,
- 0144905C2A8150920056028A /* Combine+Ext.swift in Sources */,
- 49D6A45229AEEC15006487EF /* StatusItemTool.swift in Sources */,
- 49CF3B5C20CE8068001EBF94 /* ClashResourceManager.swift in Sources */,
- 013C9F432AC160D200150FCC /* UpdateConfigAction.swift in Sources */,
- 4952C3D02117027C004A4FA8 /* ConfigFileManager.swift in Sources */,
- 49BC061C212931F4005A0FE7 /* AboutViewController.swift in Sources */,
- 01EACC782A2F94C7001C584B /* NSView+Layout.swift in Sources */,
- 4949D154213242F600EF85E6 /* Paths.swift in Sources */,
- 499ADAFF2498FC6D00C488FE /* ExternalControlViewController.swift in Sources */,
- F939724E23A4DB0600FE5A3F /* DateFormatter+.swift in Sources */,
- F915A4622366ADEF004840BE /* ClashConnection.swift in Sources */,
- F977FAAE23669D6400C17F1F /* ConnectionManager.swift in Sources */,
- 495340B320DE68C300B0D3FF /* StatusItemView.swift in Sources */,
- F935B2FC23085515009E4D33 /* SystemProxyManager.swift in Sources */,
- 495A44D320D267D000888A0A /* LaunchAtLogin.swift in Sources */,
- 01EACC722A2F9469001C584B /* SSIDSuspendTool.swift in Sources */,
- 01B1CB082A2E1EC10073EA34 /* DashboardManagerSwiftUI.swift in Sources */,
- 015EC9432A48891000145F7F /* NormalMenuItemView.swift in Sources */,
- 4929F67F258CE04700A435F6 /* Settings.swift in Sources */,
- 49D6A45629AEEC55006487EF /* StatusItemViewProtocol.swift in Sources */,
- 493AEAE3221AE3420016FE98 /* AppVersionUtil.swift in Sources */,
- 49CF3B2120CD7463001EBF94 /* AppDelegate.swift in Sources */,
- 49722FEF211F338B00650A41 /* FileEvent.swift in Sources */,
- 016BEAB029D80103001586C5 /* AlphaMetaDownloader.swift in Sources */,
- 49D176A72355FE680093DD7B /* NetworkChangeNotifier.swift in Sources */,
- 4913C82321157D0200F6B87C /* Notification.swift in Sources */,
- 0144905D2A8150920056028A /* SpeedUtils.swift in Sources */,
- 015F1E91288E42A50052B20A /* ClashMetaConfig.swift in Sources */,
- 8ACD21BD27A04ED500BC4632 /* ProxyModeChangeCommand.swift in Sources */,
- 498BC2552929CCAE00CA8084 /* GeneralSettingViewController.swift in Sources */,
- 49228457270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */,
- F9203A26236342820020D57D /* AppDelegate+..swift in Sources */,
- 499A485C22ED793C00F6C675 /* NSView+Nib.swift in Sources */,
- 493A9F282453E60400D35296 /* ProxyDelayHistoryMenu.swift in Sources */,
- 01E33AB229B5BF4200FD1006 /* NSColor+Extension.swift in Sources */,
- 01EACC752A2F94AB001C584B /* DebugSettingViewController.swift in Sources */,
- 492C4871210EF62E004554A0 /* ClashConfig.swift in Sources */,
- 492C4869210EE6B9004554A0 /* ApiRequest.swift in Sources */,
- 49CF3B6520CEE06C001EBF94 /* ConfigManager.swift in Sources */,
- 0144905F2A8153260056028A /* ClashWindowController.swift in Sources */,
- F9E754D0239CC21F00CEE7CC /* WebPortalManager.swift in Sources */,
- 018F88F9286DD0CB004DD0F7 /* DualTitleMenuItem.swift in Sources */,
- 495BFB8821919B9800C8779D /* RemoteConfigManager.swift in Sources */,
- 4982F51F2344A216008804B0 /* Cgo+Convert.swift in Sources */,
- 8ACD21BB27A04C7800BC4632 /* ProxySettingCommand.swift in Sources */,
- 49722FF1211F338B00650A41 /* Witness.swift in Sources */,
- 49722FF0211F338B00650A41 /* EventStream.swift in Sources */,
- 499A486522EEA3FD00F6C675 /* Array+Safe.swift in Sources */,
- F92D0B24236BC12000575E15 /* SavedProxyModel.swift in Sources */,
- F92D0B2A236C759100575E15 /* NSTextField+Vibrancy.swift in Sources */,
- F910AA24240134AF00116E95 /* ProxyGroupMenu.swift in Sources */,
- 4952C3BF2115C7CA004A4FA8 /* MenuItemFactory.swift in Sources */,
- 015F1E92288E60D30052B20A /* MetaTask.swift in Sources */,
- 013C9F422AC160D200150FCC /* TerminalCleanUpAction.swift in Sources */,
- F977FAAC2366790500C17F1F /* AutoUpgardeManager.swift in Sources */,
- 499A485822ED715200F6C675 /* RemoteConfigModel.swift in Sources */,
- 49D176AB23575BB20093DD7B /* ProxyGroupMenuItemView.swift in Sources */,
- 49B4575D244F4A2A00463C39 /* PrivilegedHelperManager.swift in Sources */,
- 49B4575F244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift in Sources */,
- 013C9F442AC160D200150FCC /* UpdateExternalResourceAction.swift in Sources */,
- 4966E9E32118153A00A391FB /* NSUserNotificationCenter+Extension.swift in Sources */,
- F9E754D2239CC28D00CEE7CC /* NSAlert+Extension.swift in Sources */,
- 49D176A9235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift in Sources */,
- F976275C23634DF8000EDEFE /* LoginServiceKit.swift in Sources */,
- 011946B62A32F64600502077 /* TunModeSettingCommand.swift in Sources */,
- 01C5B88D2A4FD1DB00C4E36A /* Logger.swift in Sources */,
- F92D0B2E236D35C000575E15 /* ProxyItemView.swift in Sources */,
- 49BB31E7246853EA008A4CB0 /* ICloudManager.swift in Sources */,
- 49B1086A216A356D0064FFCE /* String+Extension.swift in Sources */,
- F92D0B2C236C7C3600575E15 /* MenuItemBaseView.swift in Sources */,
- 499ADAFD2498CC5900C488FE /* RemoteControlManager.swift in Sources */,
- 49769FB427E9B3E400E3D664 /* LoginKitWrapper.m in Sources */,
- 493AEAE5221AE7230016FE98 /* ProxyMenuItem.swift in Sources */,
- 499A485E22ED9B7C00F6C675 /* NSTableView+Reload.swift in Sources */,
- F939724C23A4B33500FE5A3F /* ClashProvider.swift in Sources */,
- 498BC2532929CC2A00CA8084 /* SettingTabViewController.swift in Sources */,
- 49862FA0218418C600A1D5EC /* ClashRule.swift in Sources */,
- 01943259287D19BC008CC51A /* ClashRuleProvider.swift in Sources */,
- 49C9EF64223E78F5005D8B6A /* ClashProxy.swift in Sources */,
- 4929F684258CE07500A435F6 /* UserDefaultWrapper.swift in Sources */,
- F9E8F34623A12B89002DE5E8 /* String+Encode.swift in Sources */,
- 49B445162457CDF000B27E3E /* ClashStatusTool.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- F9A7C0652306E874007163C7 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- F935B2F42307CD32009E4D33 /* ProxyConfigHelper.m in Sources */,
- 0162E74F2864B819007218A6 /* MetaTask.swift in Sources */,
- 019A239628657A7A00AE5698 /* main.swift in Sources */,
- 491E6203258A424D00313AEF /* CommonUtils.m in Sources */,
- 01BC9ABE2928EB5A00F9B177 /* MetaDNS.swift in Sources */,
- F935B2FA23083EE6009E4D33 /* ProxySettingTool.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- F935B2EC2307B7CD009E4D33 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */;
- targetProxy = F935B2EB2307B7CD009E4D33 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 4981C88D216BAE4A008CC14A /* Localizable.strings */ = {
- isa = PBXVariantGroup;
- children = (
- 4981C88C216BAE4A008CC14A /* en */,
- 4981C88E216BAE4D008CC14A /* zh-Hans */,
- );
- name = Localizable.strings;
- sourceTree = "";
- };
- 49CF3B2620CD7465001EBF94 /* Main.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- 49CF3B2720CD7465001EBF94 /* Base */,
- 4981C887216BAB8A008CC14A /* zh-Hans */,
- );
- name = Main.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 49CF3B2B20CD7465001EBF94 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "Mac Developer";
- COPY_PHASE_STRIP = NO;
- DEAD_CODE_STRIPPING = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.14;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 49CF3B2C20CD7465001EBF94 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "Mac Developer";
- COPY_PHASE_STRIP = NO;
- DEAD_CODE_STRIPPING = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.14;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = macosx;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- };
- name = Release;
- };
- 49CF3B2E20CD7465001EBF94 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
- CODE_SIGN_IDENTITY = "-";
- CODE_SIGN_STYLE = Manual;
- COMBINE_HIDPI_IMAGES = YES;
- COMPRESS_PNG_FILES = YES;
- CURRENT_PROJECT_VERSION = 0;
- DEAD_CODE_STRIPPING = YES;
- DEVELOPMENT_TEAM = "";
- ENABLE_HARDENED_RUNTIME = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- );
- INFOPLIST_FILE = ClashX/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/../Frameworks",
- );
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ClashX",
- );
- MACOSX_DEPLOYMENT_TARGET = 12.0;
- MARKETING_VERSION = v1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- STRIP_INSTALLED_PRODUCT = NO;
- STRIP_PNG_TEXT = YES;
- SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- 49CF3B2F20CD7465001EBF94 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
- CODE_SIGN_IDENTITY = "-";
- CODE_SIGN_STYLE = Manual;
- COMBINE_HIDPI_IMAGES = YES;
- COMPRESS_PNG_FILES = YES;
- COPY_PHASE_STRIP = YES;
- CURRENT_PROJECT_VERSION = 0;
- DEAD_CODE_STRIPPING = YES;
- DEPLOYMENT_POSTPROCESSING = YES;
- DEVELOPMENT_TEAM = "";
- ENABLE_HARDENED_RUNTIME = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- "$(PROJECT_DIR)/ClashX/Support\\ Files",
- );
- INFOPLIST_FILE = ClashX/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/../Frameworks",
- );
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/ClashX",
- );
- MACOSX_DEPLOYMENT_TARGET = 12.0;
- MARKETING_VERSION = v1.0;
- OTHER_CODE_SIGN_FLAGS = "--timestamp";
- PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- STRIP_INSTALLED_PRODUCT = YES;
- STRIP_PNG_TEXT = YES;
- SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
- SWIFT_VERSION = 5.0;
- };
- name = Release;
- };
- F9A7C06E2306E874007163C7 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = ProxyConfigHelper/com.metacubex.ClashX.ProxyConfigHelper.entitlements;
- CODE_SIGN_IDENTITY = "-";
- CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 3;
- DEAD_CODE_STRIPPING = YES;
- DEVELOPMENT_TEAM = "";
- ENABLE_HARDENED_RUNTIME = YES;
- INFOPLIST_FILE = "$(SRCROOT)/ProxyConfigHelper/Helper-Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/../Frameworks",
- );
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
- MARKETING_VERSION = 1.2;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- OTHER_LDFLAGS = (
- "-sectcreate",
- __TEXT,
- __info_plist,
- "\"$(SRCROOT)/ProxyConfigHelper/Helper-Info.plist\"",
- "-sectcreate",
- __TEXT,
- __launchd_plist,
- "\"$(SRCROOT)/ProxyConfigHelper/Helper-Launchd.plist\"",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.ProxyConfigHelper;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SKIP_INSTALL = YES;
- SWIFT_OBJC_BRIDGING_HEADER = "ProxyConfigHelper/com.metacubex.ClashX.ProxyConfigHelper-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- F9A7C06F2306E874007163C7 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = ProxyConfigHelper/com.metacubex.ClashX.ProxyConfigHelper.entitlements;
- CODE_SIGN_IDENTITY = "-";
- CODE_SIGN_STYLE = Manual;
- CURRENT_PROJECT_VERSION = 3;
- DEAD_CODE_STRIPPING = YES;
- DEPLOYMENT_POSTPROCESSING = YES;
- DEVELOPMENT_TEAM = "";
- ENABLE_HARDENED_RUNTIME = YES;
- INFOPLIST_FILE = "$(SRCROOT)/ProxyConfigHelper/Helper-Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/../Frameworks",
- );
- LIBRARY_SEARCH_PATHS = "$(inherited)";
- MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
- MARKETING_VERSION = 1.2;
- MTL_FAST_MATH = YES;
- OTHER_LDFLAGS = (
- "-sectcreate",
- __TEXT,
- __info_plist,
- "\"$(SRCROOT)/ProxyConfigHelper/Helper-Info.plist\"",
- "-sectcreate",
- __TEXT,
- __launchd_plist,
- "\"$(SRCROOT)/ProxyConfigHelper/Helper-Launchd.plist\"",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.ProxyConfigHelper;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SKIP_INSTALL = YES;
- SWIFT_OBJC_BRIDGING_HEADER = "ProxyConfigHelper/com.metacubex.ClashX.ProxyConfigHelper-Bridging-Header.h";
- SWIFT_VERSION = 5.0;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 49CF3B1820CD7463001EBF94 /* Build configuration list for PBXProject "ClashX SwiftUI" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 49CF3B2B20CD7465001EBF94 /* Debug */,
- 49CF3B2C20CD7465001EBF94 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 49CF3B2D20CD7465001EBF94 /* Build configuration list for PBXNativeTarget "ClashX Meta" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 49CF3B2E20CD7465001EBF94 /* Debug */,
- 49CF3B2F20CD7465001EBF94 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- F9A7C06D2306E874007163C7 /* Build configuration list for PBXNativeTarget "com.metacubex.ClashX.ProxyConfigHelper" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- F9A7C06E2306E874007163C7 /* Debug */,
- F9A7C06F2306E874007163C7 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
-
-/* Begin XCRemoteSwiftPackageReference section */
- 012875E32A2E39CD004FB615 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/mrFq1/ClashX-Dashboard";
- requirement = {
- branch = dev;
- kind = branch;
- };
- };
- 0192311F29DD457000539EDD /* XCRemoteSwiftPackageReference "Alamofire" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/Alamofire/Alamofire";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 5.0.0;
- };
- };
- 0192312229DD464400539EDD /* XCRemoteSwiftPackageReference "RxSwift" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/ReactiveX/RxSwift";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 6.0.0;
- };
- };
- 0192312729DD476A00539EDD /* XCRemoteSwiftPackageReference "SwiftyJSON" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/SwiftyJSON/SwiftyJSON";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 5.0.0;
- };
- };
- 0192312A29DD47FB00539EDD /* XCRemoteSwiftPackageReference "CocoaLumberjack" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/CocoaLumberjack/CocoaLumberjack";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 3.0.0;
- };
- };
- 0192312D29DD483100539EDD /* XCRemoteSwiftPackageReference "Starscream" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/daltoniam/Starscream";
- requirement = {
- kind = exactVersion;
- version = 3.1.1;
- };
- };
- 0192313029DD488D00539EDD /* XCRemoteSwiftPackageReference "FlexibleDiff" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/RACCommunity/FlexibleDiff";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 0.0.9;
- };
- };
- 0192313329DD48BC00539EDD /* XCRemoteSwiftPackageReference "GzipSwift" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/1024jp/GzipSwift";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 6.0.0;
- };
- };
- 0192313629DD490400539EDD /* XCRemoteSwiftPackageReference "Yams" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/jpsim/Yams";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 5.0.0;
- };
- };
- 0192313929DD496E00539EDD /* XCRemoteSwiftPackageReference "PromiseKit" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/mxcl/PromiseKit";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 8.0.0;
- };
- };
- 01EACC6E2A2F9408001C584B /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */ = {
- isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/sindresorhus/KeyboardShortcuts";
- requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 1.0.0;
- };
- };
-/* End XCRemoteSwiftPackageReference section */
-
-/* Begin XCSwiftPackageProductDependency section */
- 012875E42A2E39CD004FB615 /* ClashX Dashboard */ = {
- isa = XCSwiftPackageProductDependency;
- package = 012875E32A2E39CD004FB615 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */;
- productName = "ClashX Dashboard";
- };
- 0192312029DD457000539EDD /* Alamofire */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192311F29DD457000539EDD /* XCRemoteSwiftPackageReference "Alamofire" */;
- productName = Alamofire;
- };
- 0192312329DD464400539EDD /* RxCocoa */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192312229DD464400539EDD /* XCRemoteSwiftPackageReference "RxSwift" */;
- productName = RxCocoa;
- };
- 0192312529DD464400539EDD /* RxSwift */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192312229DD464400539EDD /* XCRemoteSwiftPackageReference "RxSwift" */;
- productName = RxSwift;
- };
- 0192312829DD476A00539EDD /* SwiftyJSON */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192312729DD476A00539EDD /* XCRemoteSwiftPackageReference "SwiftyJSON" */;
- productName = SwiftyJSON;
- };
- 0192312B29DD47FB00539EDD /* CocoaLumberjackSwift */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192312A29DD47FB00539EDD /* XCRemoteSwiftPackageReference "CocoaLumberjack" */;
- productName = CocoaLumberjackSwift;
- };
- 0192312E29DD483100539EDD /* Starscream */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192312D29DD483100539EDD /* XCRemoteSwiftPackageReference "Starscream" */;
- productName = Starscream;
- };
- 0192313129DD488D00539EDD /* FlexibleDiff */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192313029DD488D00539EDD /* XCRemoteSwiftPackageReference "FlexibleDiff" */;
- productName = FlexibleDiff;
- };
- 0192313429DD48BC00539EDD /* Gzip */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192313329DD48BC00539EDD /* XCRemoteSwiftPackageReference "GzipSwift" */;
- productName = Gzip;
- };
- 0192313729DD490400539EDD /* Yams */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192313629DD490400539EDD /* XCRemoteSwiftPackageReference "Yams" */;
- productName = Yams;
- };
- 0192313A29DD496E00539EDD /* PromiseKit */ = {
- isa = XCSwiftPackageProductDependency;
- package = 0192313929DD496E00539EDD /* XCRemoteSwiftPackageReference "PromiseKit" */;
- productName = PromiseKit;
- };
- 01EACC6F2A2F9408001C584B /* KeyboardShortcuts */ = {
- isa = XCSwiftPackageProductDependency;
- package = 01EACC6E2A2F9408001C584B /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */;
- productName = KeyboardShortcuts;
- };
-/* End XCSwiftPackageProductDependency section */
- };
- rootObject = 49CF3B1520CD7463001EBF94 /* Project object */;
-}
diff --git a/ClashX SwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ClashX SwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a62..000000000
--- a/ClashX SwiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
deleted file mode 100644
index c3e2dab5d..000000000
--- a/ClashX SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ /dev/null
@@ -1,158 +0,0 @@
-{
- "pins" : [
- {
- "identity" : "alamofire",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/Alamofire/Alamofire",
- "state" : {
- "revision" : "b2fa556e4e48cbf06cf8c63def138c98f4b811fa",
- "version" : "5.8.0"
- }
- },
- {
- "identity" : "clashx-dashboard",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/mrFq1/ClashX-Dashboard",
- "state" : {
- "branch" : "dev",
- "revision" : "272999024e836c5b006b0f3869fa4a1f5d27286b"
- }
- },
- {
- "identity" : "cocoalumberjack",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/CocoaLumberjack/CocoaLumberjack",
- "state" : {
- "revision" : "67ec5818a757aba4d7c534e21a905d878d128dbf",
- "version" : "3.8.1"
- }
- },
- {
- "identity" : "dsfsparkline",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/dagronf/DSFSparkline.git",
- "state" : {
- "revision" : "cfcf80b9e214500cbc12b795b7c9943151b8bd4f",
- "version" : "4.6.4"
- }
- },
- {
- "identity" : "flexiblediff",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/RACCommunity/FlexibleDiff",
- "state" : {
- "revision" : "a5132719a812111ef7eaea647a659a351b15abf4",
- "version" : "0.0.9"
- }
- },
- {
- "identity" : "gzipswift",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/1024jp/GzipSwift",
- "state" : {
- "revision" : "731037f6cc2be2ec01562f6597c1d0aa3fe6fd05",
- "version" : "6.0.1"
- }
- },
- {
- "identity" : "keyboardshortcuts",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/sindresorhus/KeyboardShortcuts",
- "state" : {
- "revision" : "ac302e21da5883f4bd0490cbd0cb710b08740500",
- "version" : "1.15.0"
- }
- },
- {
- "identity" : "nimble",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/Quick/Nimble.git",
- "state" : {
- "revision" : "7a46a5fc86cb917f69e3daf79fcb045283d8f008",
- "version" : "8.1.2"
- }
- },
- {
- "identity" : "promisekit",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/mxcl/PromiseKit",
- "state" : {
- "revision" : "cb70b070cde06837cd10a1febdf6105c1a3bb348",
- "version" : "8.1.1"
- }
- },
- {
- "identity" : "quick",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/Quick/Quick.git",
- "state" : {
- "revision" : "09b3becb37cb2163919a3842a4c5fa6ec7130792",
- "version" : "2.2.1"
- }
- },
- {
- "identity" : "rxswift",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/ReactiveX/RxSwift",
- "state" : {
- "revision" : "9dcaa4b333db437b0fbfaf453fad29069044a8b4",
- "version" : "6.6.0"
- }
- },
- {
- "identity" : "starscream",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/daltoniam/Starscream",
- "state" : {
- "revision" : "e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d",
- "version" : "3.1.1"
- }
- },
- {
- "identity" : "swift-log",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/apple/swift-log.git",
- "state" : {
- "revision" : "532d8b529501fb73a2455b179e0bbb6d49b652ed",
- "version" : "1.5.3"
- }
- },
- {
- "identity" : "swift-nio-zlib-support",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/apple/swift-nio-zlib-support.git",
- "state" : {
- "revision" : "37760e9a52030bb9011972c5213c3350fa9d41fd",
- "version" : "1.0.0"
- }
- },
- {
- "identity" : "swiftui-introspect",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/siteline/swiftui-introspect",
- "state" : {
- "revision" : "121c146fe591b1320238d054ae35c81ffa45f45a",
- "version" : "0.12.0"
- }
- },
- {
- "identity" : "swiftyjson",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/SwiftyJSON/SwiftyJSON",
- "state" : {
- "revision" : "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
- "version" : "5.0.1"
- }
- },
- {
- "identity" : "yams",
- "kind" : "remoteSourceControl",
- "location" : "https://github.com/jpsim/Yams",
- "state" : {
- "revision" : "0d9ee7ea8c4ebd4a489ad7a73d5c6cad55d6fed3",
- "version" : "5.0.6"
- }
- }
- ],
- "version" : 2
-}
diff --git a/ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/com.metacubex.ClashX.ProxyConfigHelper.xcscheme b/ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/com.metacubex.ClashX.ProxyConfigHelper.xcscheme
deleted file mode 100644
index 58aa08473..000000000
--- a/ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/com.metacubex.ClashX.ProxyConfigHelper.xcscheme
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ClashX.xcodeproj/project.pbxproj b/ClashX.xcodeproj/project.pbxproj
index 4da741db4..8307765d1 100644
--- a/ClashX.xcodeproj/project.pbxproj
+++ b/ClashX.xcodeproj/project.pbxproj
@@ -33,6 +33,120 @@
01C1462A28962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */; };
01E33AB229B5BF4200FD1006 /* NSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */; };
01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */; };
+ 01F335CD2AD10D0B0048AF77 /* UnsafePointer+bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */; };
+ 01F335CE2AD10D0B0048AF77 /* RemoteConfigViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485322ED707300F6C675 /* RemoteConfigViewController.swift */; };
+ 01F335CF2AD10D0B0048AF77 /* StatusItemTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D6A45129AEEC15006487EF /* StatusItemTool.swift */; };
+ 01F335D02AD10D0B0048AF77 /* ClashResourceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B5B20CE8068001EBF94 /* ClashResourceManager.swift */; };
+ 01F335D12AD10D0B0048AF77 /* ConfigFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4952C3CF2117027C004A4FA8 /* ConfigFileManager.swift */; };
+ 01F335D22AD10D0B0048AF77 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BC061B212931F4005A0FE7 /* AboutViewController.swift */; };
+ 01F335D32AD10D0B0048AF77 /* Paths.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4949D153213242F600EF85E6 /* Paths.swift */; };
+ 01F335D42AD10D0B0048AF77 /* TunModeSettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2753484F2A3082FD0077B458 /* TunModeSettingCommand.swift */; };
+ 01F335D52AD10D0B0048AF77 /* DashboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B1CB092A2E20C10073EA34 /* DashboardManager.swift */; };
+ 01F335D62AD10D0B0048AF77 /* ExternalControlViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499ADAFE2498FC6D00C488FE /* ExternalControlViewController.swift */; };
+ 01F335D72AD10D0B0048AF77 /* DateFormatter+.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939724D23A4DB0600FE5A3F /* DateFormatter+.swift */; };
+ 01F335D82AD10D0B0048AF77 /* ClashConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F915A4612366ADEF004840BE /* ClashConnection.swift */; };
+ 01F335D92AD10D0B0048AF77 /* ConnectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F977FAAD23669D6400C17F1F /* ConnectionManager.swift */; };
+ 01F335DA2AD10D0B0048AF77 /* StatusItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495340B220DE68C300B0D3FF /* StatusItemView.swift */; };
+ 01F335DB2AD10D0B0048AF77 /* SystemProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F935B2FB23085515009E4D33 /* SystemProxyManager.swift */; };
+ 01F335DC2AD10D0B0048AF77 /* LaunchAtLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495A44D220D267D000888A0A /* LaunchAtLogin.swift */; };
+ 01F335DD2AD10D0B0048AF77 /* Combine+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4991D2312A565E6A00978143 /* Combine+Ext.swift */; };
+ 01F335DE2AD10D0B0048AF77 /* DebugSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49281C7F2A1F01FA00F60935 /* DebugSettingViewController.swift */; };
+ 01F335DF2AD10D0B0048AF77 /* ClashWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CCDA292A54F9AC00FF1E13 /* ClashWindowController.swift */; };
+ 01F335E02AD10D0B0048AF77 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4929F67E258CE04700A435F6 /* Settings.swift */; };
+ 01F335E12AD10D0B0048AF77 /* StatusItemViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D6A45529AEEC55006487EF /* StatusItemViewProtocol.swift */; };
+ 01F335E22AD10D0B0048AF77 /* AppVersionUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493AEAE2221AE3420016FE98 /* AppVersionUtil.swift */; };
+ 01F335E32AD10D0B0048AF77 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B2020CD7463001EBF94 /* AppDelegate.swift */; };
+ 01F335E42AD10D0B0048AF77 /* SpeedUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4991D22F2A564DDC00978143 /* SpeedUtils.swift */; };
+ 01F335E52AD10D0B0048AF77 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 496BDEDF21196F1E00C5207F /* Logger.swift */; };
+ 01F335E62AD10D0B0048AF77 /* NSView+Layout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4905A2C92A20841B00AEDA2E /* NSView+Layout.swift */; };
+ 01F335E72AD10D0B0048AF77 /* FileEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEA211F338B00650A41 /* FileEvent.swift */; };
+ 01F335E82AD10D0B0048AF77 /* AlphaMetaDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016BEAAF29D80102001586C5 /* AlphaMetaDownloader.swift */; };
+ 01F335E92AD10D0B0048AF77 /* NetworkChangeNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176A62355FE680093DD7B /* NetworkChangeNotifier.swift */; };
+ 01F335EA2AD10D0B0048AF77 /* GlobalShortCutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */; };
+ 01F335EB2AD10D0B0048AF77 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4913C82221157D0200F6B87C /* Notification.swift */; };
+ 01F335EC2AD10D0B0048AF77 /* ClashMetaConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015F1E90288E42A50052B20A /* ClashMetaConfig.swift */; };
+ 01F335ED2AD10D0B0048AF77 /* ProxyModeChangeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACD21BC27A04ED500BC4632 /* ProxyModeChangeCommand.swift */; };
+ 01F335EE2AD10D0B0048AF77 /* GeneralSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498BC2542929CCAE00CA8084 /* GeneralSettingViewController.swift */; };
+ 01F335EF2AD10D0B0048AF77 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */; };
+ 01F335F02AD10D0B0048AF77 /* AppDelegate+..swift in Sources */ = {isa = PBXBuildFile; fileRef = F9203A25236342820020D57D /* AppDelegate+..swift */; };
+ 01F335F12AD10D0B0048AF77 /* NSView+Nib.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485B22ED793C00F6C675 /* NSView+Nib.swift */; };
+ 01F335F22AD10D0B0048AF77 /* ProxyDelayHistoryMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493A9F272453E60400D35296 /* ProxyDelayHistoryMenu.swift */; };
+ 01F335F32AD10D0B0048AF77 /* NSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */; };
+ 01F335F42AD10D0B0048AF77 /* ClashConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492C4870210EF62E004554A0 /* ClashConfig.swift */; };
+ 01F335F52AD10D0B0048AF77 /* ApiRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492C4868210EE6B9004554A0 /* ApiRequest.swift */; };
+ 01F335F62AD10D0B0048AF77 /* ConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CF3B6420CEE06C001EBF94 /* ConfigManager.swift */; };
+ 01F335F72AD10D0B0048AF77 /* TerminalCleanUpAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49870ADA2AA75DC7002B106B /* TerminalCleanUpAction.swift */; };
+ 01F335F82AD10D0B0048AF77 /* WebPortalManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754CF239CC21F00CEE7CC /* WebPortalManager.swift */; };
+ 01F335F92AD10D0B0048AF77 /* DualTitleMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018F88F8286DD0CB004DD0F7 /* DualTitleMenuItem.swift */; };
+ 01F335FA2AD10D0B0048AF77 /* RemoteConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 495BFB8721919B9800C8779D /* RemoteConfigManager.swift */; };
+ 01F335FB2AD10D0B0048AF77 /* Cgo+Convert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4982F51E2344A216008804B0 /* Cgo+Convert.swift */; };
+ 01F335FC2AD10D0B0048AF77 /* ProxySettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACD21BA27A04C7800BC4632 /* ProxySettingCommand.swift */; };
+ 01F335FD2AD10D0B0048AF77 /* Witness.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEC211F338B00650A41 /* Witness.swift */; };
+ 01F335FE2AD10D0B0048AF77 /* EventStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49722FEB211F338B00650A41 /* EventStream.swift */; };
+ 01F335FF2AD10D0B0048AF77 /* Array+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A486422EEA3FC00F6C675 /* Array+Safe.swift */; };
+ 01F336002AD10D0B0048AF77 /* SavedProxyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B23236BC12000575E15 /* SavedProxyModel.swift */; };
+ 01F336012AD10D0B0048AF77 /* NSTextField+Vibrancy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B29236C759100575E15 /* NSTextField+Vibrancy.swift */; };
+ 01F336022AD10D0B0048AF77 /* SSIDSuspendTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D223382A1DA5F10002FFCB /* SSIDSuspendTool.swift */; };
+ 01F336032AD10D0B0048AF77 /* ProxyGroupMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F910AA23240134AF00116E95 /* ProxyGroupMenu.swift */; };
+ 01F336042AD10D0B0048AF77 /* MenuItemFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4952C3BE2115C7CA004A4FA8 /* MenuItemFactory.swift */; };
+ 01F336052AD10D0B0048AF77 /* MetaTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0162E74E2864B819007218A6 /* MetaTask.swift */; };
+ 01F336062AD10D0B0048AF77 /* AutoUpgardeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F977FAAB2366790500C17F1F /* AutoUpgardeManager.swift */; };
+ 01F336072AD10D0B0048AF77 /* RemoteConfigModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485722ED715200F6C675 /* RemoteConfigModel.swift */; };
+ 01F336082AD10D0B0048AF77 /* ProxyGroupMenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176AA23575BB20093DD7B /* ProxyGroupMenuItemView.swift */; };
+ 01F336092AD10D0B0048AF77 /* PrivilegedHelperManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575C244F4A2A00463C39 /* PrivilegedHelperManager.swift */; };
+ 01F3360A2AD10D0B0048AF77 /* PrivilegedHelperManager+Legacy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B4575E244FD4D100463C39 /* PrivilegedHelperManager+Legacy.swift */; };
+ 01F3360B2AD10D0B0048AF77 /* NSUserNotificationCenter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4966E9E22118153A00A391FB /* NSUserNotificationCenter+Extension.swift */; };
+ 01F3360C2AD10D0B0048AF77 /* NSAlert+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E754D1239CC28D00CEE7CC /* NSAlert+Extension.swift */; };
+ 01F3360D2AD10D0B0048AF77 /* ClashWebViewContoller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499976C721359F0400E7BF83 /* ClashWebViewContoller.swift */; };
+ 01F3360E2AD10D0B0048AF77 /* ProxyGroupSpeedTestMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D176A8235614340093DD7B /* ProxyGroupSpeedTestMenuItem.swift */; };
+ 01F3360F2AD10D0B0048AF77 /* LoginServiceKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976275B23634DF8000EDEFE /* LoginServiceKit.swift */; };
+ 01F336102AD10D0B0048AF77 /* NormalMenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4994B5532A47C4FF00E595B9 /* NormalMenuItemView.swift */; };
+ 01F336112AD10D0B0048AF77 /* ProxyItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B2D236D35C000575E15 /* ProxyItemView.swift */; };
+ 01F336122AD10D0B0048AF77 /* ICloudManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49BB31E6246853EA008A4CB0 /* ICloudManager.swift */; };
+ 01F336132AD10D0B0048AF77 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B10869216A356D0064FFCE /* String+Extension.swift */; };
+ 01F336142AD10D0B0048AF77 /* MenuItemBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F92D0B2B236C7C3600575E15 /* MenuItemBaseView.swift */; };
+ 01F336152AD10D0B0048AF77 /* RemoteControlManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499ADAFC2498CC5900C488FE /* RemoteControlManager.swift */; };
+ 01F336162AD10D0B0048AF77 /* LoginKitWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 49D8276727E9B01700159D93 /* LoginKitWrapper.m */; };
+ 01F336172AD10D0B0048AF77 /* ProxyMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 493AEAE4221AE7230016FE98 /* ProxyMenuItem.swift */; };
+ 01F336182AD10D0B0048AF77 /* UpdateExternalResourceAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 496322212AA5D89E00854231 /* UpdateExternalResourceAction.swift */; };
+ 01F336192AD10D0B0048AF77 /* UpdateConfigAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49870ADC2AA76602002B106B /* UpdateConfigAction.swift */; };
+ 01F3361A2AD10D0B0048AF77 /* NSTableView+Reload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A485D22ED9B7C00F6C675 /* NSTableView+Reload.swift */; };
+ 01F3361B2AD10D0B0048AF77 /* ClashProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F939724B23A4B33500FE5A3F /* ClashProvider.swift */; };
+ 01F3361C2AD10D0B0048AF77 /* SettingTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498BC2522929CC2A00CA8084 /* SettingTabViewController.swift */; };
+ 01F3361D2AD10D0B0048AF77 /* ClashRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49862F9F218418C600A1D5EC /* ClashRule.swift */; };
+ 01F3361E2AD10D0B0048AF77 /* ClashRuleProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01943258287D19BC008CC51A /* ClashRuleProvider.swift */; };
+ 01F3361F2AD10D0B0048AF77 /* ClashProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C9EF63223E78F5005D8B6A /* ClashProxy.swift */; };
+ 01F336202AD10D0B0048AF77 /* UserDefaultWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4929F683258CE07500A435F6 /* UserDefaultWrapper.swift */; };
+ 01F336212AD10D0B0048AF77 /* String+Encode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E8F34523A12B89002DE5E8 /* String+Encode.swift */; };
+ 01F336222AD10D0B0048AF77 /* ClashStatusTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49B445152457CDF000B27E3E /* ClashStatusTool.swift */; };
+ 01F336242AD10D0B0048AF77 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335BC2AD10D0B0048AF77 /* RxSwift */; };
+ 01F336252AD10D0B0048AF77 /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335BD2AD10D0B0048AF77 /* SwiftyJSON */; };
+ 01F336262AD10D0B0048AF77 /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335C62AD10D0B0048AF77 /* Gzip */; };
+ 01F336272AD10D0B0048AF77 /* CocoaLumberjackSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335C12AD10D0B0048AF77 /* CocoaLumberjackSwift */; };
+ 01F336282AD10D0B0048AF77 /* Starscream in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335C22AD10D0B0048AF77 /* Starscream */; };
+ 01F336292AD10D0B0048AF77 /* PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335CA2AD10D0B0048AF77 /* PromiseKit */; };
+ 01F3362A2AD10D0B0048AF77 /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335B62AD10D0B0048AF77 /* KeyboardShortcuts */; };
+ 01F3362B2AD10D0B0048AF77 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335B82AD10D0B0048AF77 /* Alamofire */; };
+ 01F3362C2AD10D0B0048AF77 /* CocoaLumberjack in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335BF2AD10D0B0048AF77 /* CocoaLumberjack */; };
+ 01F3362D2AD10D0B0048AF77 /* Yams in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335C82AD10D0B0048AF77 /* Yams */; };
+ 01F3362E2AD10D0B0048AF77 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335BA2AD10D0B0048AF77 /* RxCocoa */; };
+ 01F3362F2AD10D0B0048AF77 /* FlexibleDiff in Frameworks */ = {isa = PBXBuildFile; productRef = 01F335C42AD10D0B0048AF77 /* FlexibleDiff */; };
+ 01F336302AD10D0B0048AF77 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4908087A29F8F3FF007A4944 /* libresolv.tbd */; };
+ 01F336322AD10D0B0048AF77 /* geosite.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AD2854533300B93618 /* geosite.dat.gz */; };
+ 01F336332AD10D0B0048AF77 /* dashboard in Resources */ = {isa = PBXBuildFile; fileRef = 49761DA621C9497000AE13EF /* dashboard */; };
+ 01F336342AD10D0B0048AF77 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4981C88D216BAE4A008CC14A /* Localizable.strings */; };
+ 01F336352AD10D0B0048AF77 /* ProxySetting.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 8A2BBEA627A03ACB0081EBEF /* ProxySetting.sdef */; };
+ 01F336362AD10D0B0048AF77 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9FAB31D262BE04800DE02A6 /* Images.xcassets */; };
+ 01F336372AD10D0B0048AF77 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */; };
+ 01F336382AD10D0B0048AF77 /* StatusItemView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 495340AF20DE5F7200B0D3FF /* StatusItemView.xib */; };
+ 01F336392AD10D0B0048AF77 /* geoip.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AC2854533200B93618 /* geoip.dat.gz */; };
+ 01F3363A2AD10D0B0048AF77 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49CF3B2620CD7465001EBF94 /* Main.storyboard */; };
+ 01F3363B2AD10D0B0048AF77 /* RemoteConfigAddView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 499A485922ED781100F6C675 /* RemoteConfigAddView.xib */; };
+ 01F3363C2AD10D0B0048AF77 /* sampleConfig.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 4989F98D20D0AE990001E564 /* sampleConfig.yaml */; };
+ 01F3363D2AD10D0B0048AF77 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */; };
+ 01F3363E2AD10D0B0048AF77 /* country.mmdb.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B2274A29B845F100FE35C9 /* country.mmdb.gz */; };
+ 01F336402AD10D0B0048AF77 /* com.metacubex.ClashX.ProxyConfigHelper in Copy Files */ = {isa = PBXBuildFile; fileRef = F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+ 01F336482AD139CC0048AF77 /* ClashX Dashboard in Frameworks */ = {isa = PBXBuildFile; productRef = 01F336472AD139CC0048AF77 /* ClashX Dashboard */; };
275348502A3082FD0077B458 /* TunModeSettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2753484F2A3082FD0077B458 /* TunModeSettingCommand.swift */; };
4905A2C52A2058B000AEDA2E /* GlobalShortCutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */; };
4905A2C82A2058D400AEDA2E /* KeyboardShortcuts in Frameworks */ = {isa = PBXBuildFile; productRef = 4905A2C72A2058D400AEDA2E /* KeyboardShortcuts */; };
@@ -129,6 +243,13 @@
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 01F335B52AD10D0B0048AF77 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 49CF3B1520CD7463001EBF94 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F9A7C0682306E874007163C7;
+ remoteInfo = ProxyConfigHelper;
+ };
F935B2EB2307B7CD009E4D33 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 49CF3B1520CD7463001EBF94 /* Project object */;
@@ -139,6 +260,17 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
+ 01F3363F2AD10D0B0048AF77 /* Copy Files */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = Contents/Library/LaunchServices;
+ dstSubfolderSpec = 1;
+ files = (
+ 01F336402AD10D0B0048AF77 /* com.metacubex.ClashX.ProxyConfigHelper in Copy Files */,
+ );
+ name = "Copy Files";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
663E4677213FCDC4006F11BB /* Copy Files */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -178,6 +310,8 @@
01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = ""; };
01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = ""; };
01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; };
+ 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta SwiftUI.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 01F336452AD10D0B0048AF77 /* ClashX Meta SwiftUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "ClashX Meta SwiftUI-Info.plist"; path = "/Users/xjbeta/Developer/Clash/ClashX.Meta/ClashX Meta SwiftUI-Info.plist"; sourceTree = ""; };
2753484F2A3082FD0077B458 /* TunModeSettingCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunModeSettingCommand.swift; sourceTree = ""; };
4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalShortCutViewController.swift; sourceTree = ""; };
4905A2C92A20841B00AEDA2E /* NSView+Layout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSView+Layout.swift"; sourceTree = ""; };
@@ -290,6 +424,27 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 01F336232AD10D0B0048AF77 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 01F336242AD10D0B0048AF77 /* RxSwift in Frameworks */,
+ 01F336252AD10D0B0048AF77 /* SwiftyJSON in Frameworks */,
+ 01F336262AD10D0B0048AF77 /* Gzip in Frameworks */,
+ 01F336272AD10D0B0048AF77 /* CocoaLumberjackSwift in Frameworks */,
+ 01F336282AD10D0B0048AF77 /* Starscream in Frameworks */,
+ 01F336292AD10D0B0048AF77 /* PromiseKit in Frameworks */,
+ 01F3362A2AD10D0B0048AF77 /* KeyboardShortcuts in Frameworks */,
+ 01F3362B2AD10D0B0048AF77 /* Alamofire in Frameworks */,
+ 01F3362C2AD10D0B0048AF77 /* CocoaLumberjack in Frameworks */,
+ 01F3362D2AD10D0B0048AF77 /* Yams in Frameworks */,
+ 01F3362E2AD10D0B0048AF77 /* RxCocoa in Frameworks */,
+ 01F336482AD139CC0048AF77 /* ClashX Dashboard in Frameworks */,
+ 01F3362F2AD10D0B0048AF77 /* FlexibleDiff in Frameworks */,
+ 01F336302AD10D0B0048AF77 /* libresolv.tbd in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
49CF3B1A20CD7463001EBF94 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -536,6 +691,7 @@
children = (
49CF3B1D20CD7463001EBF94 /* ClashX Meta.app */,
F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */,
+ 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */,
);
name = Products;
sourceTree = "";
@@ -558,6 +714,7 @@
49CF3B2020CD7463001EBF94 /* AppDelegate.swift */,
49CF3B2620CD7465001EBF94 /* Main.storyboard */,
49CF3B2920CD7465001EBF94 /* Info.plist */,
+ 01F336452AD10D0B0048AF77 /* ClashX Meta SwiftUI-Info.plist */,
49CF3B2A20CD7465001EBF94 /* ClashX.entitlements */,
49CF3B3520CD75DF001EBF94 /* ClashX-Bridging-Header.h */,
F9FAB31D262BE04800DE02A6 /* Images.xcassets */,
@@ -625,6 +782,40 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 01F335B32AD10D0B0048AF77 /* ClashX Meta SwiftUI */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 01F336412AD10D0B0048AF77 /* Build configuration list for PBXNativeTarget "ClashX Meta SwiftUI" */;
+ buildPhases = (
+ 01F335CC2AD10D0B0048AF77 /* Sources */,
+ 01F336232AD10D0B0048AF77 /* Frameworks */,
+ 01F336312AD10D0B0048AF77 /* Resources */,
+ 01F3363F2AD10D0B0048AF77 /* Copy Files */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 01F335B42AD10D0B0048AF77 /* PBXTargetDependency */,
+ );
+ name = "ClashX Meta SwiftUI";
+ packageProductDependencies = (
+ 01F335B62AD10D0B0048AF77 /* KeyboardShortcuts */,
+ 01F335B82AD10D0B0048AF77 /* Alamofire */,
+ 01F335BA2AD10D0B0048AF77 /* RxCocoa */,
+ 01F335BC2AD10D0B0048AF77 /* RxSwift */,
+ 01F335BD2AD10D0B0048AF77 /* SwiftyJSON */,
+ 01F335BF2AD10D0B0048AF77 /* CocoaLumberjack */,
+ 01F335C12AD10D0B0048AF77 /* CocoaLumberjackSwift */,
+ 01F335C22AD10D0B0048AF77 /* Starscream */,
+ 01F335C42AD10D0B0048AF77 /* FlexibleDiff */,
+ 01F335C62AD10D0B0048AF77 /* Gzip */,
+ 01F335C82AD10D0B0048AF77 /* Yams */,
+ 01F335CA2AD10D0B0048AF77 /* PromiseKit */,
+ 01F336472AD139CC0048AF77 /* ClashX Dashboard */,
+ );
+ productName = ClashX;
+ productReference = 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */;
+ productType = "com.apple.product-type.application";
+ };
49CF3B1C20CD7463001EBF94 /* ClashX Meta */ = {
isa = PBXNativeTarget;
buildConfigurationList = 49CF3B2D20CD7465001EBF94 /* Build configuration list for PBXNativeTarget "ClashX Meta" */;
@@ -726,6 +917,7 @@
015B977E2A4F30EA00F9FA4D /* XCRemoteSwiftPackageReference "GzipSwift" */,
015B97812A4F311300F9FA4D /* XCRemoteSwiftPackageReference "Yams" */,
015B97842A4F31AE00F9FA4D /* XCRemoteSwiftPackageReference "PromiseKit" */,
+ 01F336462AD139CC0048AF77 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */,
);
productRefGroup = 49CF3B1E20CD7463001EBF94 /* Products */;
projectDirPath = "";
@@ -733,11 +925,32 @@
targets = (
49CF3B1C20CD7463001EBF94 /* ClashX Meta */,
F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */,
+ 01F335B32AD10D0B0048AF77 /* ClashX Meta SwiftUI */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 01F336312AD10D0B0048AF77 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 01F336322AD10D0B0048AF77 /* geosite.dat.gz in Resources */,
+ 01F336332AD10D0B0048AF77 /* dashboard in Resources */,
+ 01F336342AD10D0B0048AF77 /* Localizable.strings in Resources */,
+ 01F336352AD10D0B0048AF77 /* ProxySetting.sdef in Resources */,
+ 01F336362AD10D0B0048AF77 /* Images.xcassets in Resources */,
+ 01F336372AD10D0B0048AF77 /* menu_icon@2x.png in Resources */,
+ 01F336382AD10D0B0048AF77 /* StatusItemView.xib in Resources */,
+ 01F336392AD10D0B0048AF77 /* geoip.dat.gz in Resources */,
+ 01F3363A2AD10D0B0048AF77 /* Main.storyboard in Resources */,
+ 01F3363B2AD10D0B0048AF77 /* RemoteConfigAddView.xib in Resources */,
+ 01F3363C2AD10D0B0048AF77 /* sampleConfig.yaml in Resources */,
+ 01F3363D2AD10D0B0048AF77 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */,
+ 01F3363E2AD10D0B0048AF77 /* country.mmdb.gz in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
49CF3B1B20CD7463001EBF94 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -761,6 +974,99 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 01F335CC2AD10D0B0048AF77 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 01F335CD2AD10D0B0048AF77 /* UnsafePointer+bridge.swift in Sources */,
+ 01F335CE2AD10D0B0048AF77 /* RemoteConfigViewController.swift in Sources */,
+ 01F335CF2AD10D0B0048AF77 /* StatusItemTool.swift in Sources */,
+ 01F335D02AD10D0B0048AF77 /* ClashResourceManager.swift in Sources */,
+ 01F335D12AD10D0B0048AF77 /* ConfigFileManager.swift in Sources */,
+ 01F335D22AD10D0B0048AF77 /* AboutViewController.swift in Sources */,
+ 01F335D32AD10D0B0048AF77 /* Paths.swift in Sources */,
+ 01F335D42AD10D0B0048AF77 /* TunModeSettingCommand.swift in Sources */,
+ 01F335D52AD10D0B0048AF77 /* DashboardManager.swift in Sources */,
+ 01F335D62AD10D0B0048AF77 /* ExternalControlViewController.swift in Sources */,
+ 01F335D72AD10D0B0048AF77 /* DateFormatter+.swift in Sources */,
+ 01F335D82AD10D0B0048AF77 /* ClashConnection.swift in Sources */,
+ 01F335D92AD10D0B0048AF77 /* ConnectionManager.swift in Sources */,
+ 01F335DA2AD10D0B0048AF77 /* StatusItemView.swift in Sources */,
+ 01F335DB2AD10D0B0048AF77 /* SystemProxyManager.swift in Sources */,
+ 01F335DC2AD10D0B0048AF77 /* LaunchAtLogin.swift in Sources */,
+ 01F335DD2AD10D0B0048AF77 /* Combine+Ext.swift in Sources */,
+ 01F335DE2AD10D0B0048AF77 /* DebugSettingViewController.swift in Sources */,
+ 01F335DF2AD10D0B0048AF77 /* ClashWindowController.swift in Sources */,
+ 01F335E02AD10D0B0048AF77 /* Settings.swift in Sources */,
+ 01F335E12AD10D0B0048AF77 /* StatusItemViewProtocol.swift in Sources */,
+ 01F335E22AD10D0B0048AF77 /* AppVersionUtil.swift in Sources */,
+ 01F335E32AD10D0B0048AF77 /* AppDelegate.swift in Sources */,
+ 01F335E42AD10D0B0048AF77 /* SpeedUtils.swift in Sources */,
+ 01F335E52AD10D0B0048AF77 /* Logger.swift in Sources */,
+ 01F335E62AD10D0B0048AF77 /* NSView+Layout.swift in Sources */,
+ 01F335E72AD10D0B0048AF77 /* FileEvent.swift in Sources */,
+ 01F335E82AD10D0B0048AF77 /* AlphaMetaDownloader.swift in Sources */,
+ 01F335E92AD10D0B0048AF77 /* NetworkChangeNotifier.swift in Sources */,
+ 01F335EA2AD10D0B0048AF77 /* GlobalShortCutViewController.swift in Sources */,
+ 01F335EB2AD10D0B0048AF77 /* Notification.swift in Sources */,
+ 01F335EC2AD10D0B0048AF77 /* ClashMetaConfig.swift in Sources */,
+ 01F335ED2AD10D0B0048AF77 /* ProxyModeChangeCommand.swift in Sources */,
+ 01F335EE2AD10D0B0048AF77 /* GeneralSettingViewController.swift in Sources */,
+ 01F335EF2AD10D0B0048AF77 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */,
+ 01F335F02AD10D0B0048AF77 /* AppDelegate+..swift in Sources */,
+ 01F335F12AD10D0B0048AF77 /* NSView+Nib.swift in Sources */,
+ 01F335F22AD10D0B0048AF77 /* ProxyDelayHistoryMenu.swift in Sources */,
+ 01F335F32AD10D0B0048AF77 /* NSColor+Extension.swift in Sources */,
+ 01F335F42AD10D0B0048AF77 /* ClashConfig.swift in Sources */,
+ 01F335F52AD10D0B0048AF77 /* ApiRequest.swift in Sources */,
+ 01F335F62AD10D0B0048AF77 /* ConfigManager.swift in Sources */,
+ 01F335F72AD10D0B0048AF77 /* TerminalCleanUpAction.swift in Sources */,
+ 01F335F82AD10D0B0048AF77 /* WebPortalManager.swift in Sources */,
+ 01F335F92AD10D0B0048AF77 /* DualTitleMenuItem.swift in Sources */,
+ 01F335FA2AD10D0B0048AF77 /* RemoteConfigManager.swift in Sources */,
+ 01F335FB2AD10D0B0048AF77 /* Cgo+Convert.swift in Sources */,
+ 01F335FC2AD10D0B0048AF77 /* ProxySettingCommand.swift in Sources */,
+ 01F335FD2AD10D0B0048AF77 /* Witness.swift in Sources */,
+ 01F335FE2AD10D0B0048AF77 /* EventStream.swift in Sources */,
+ 01F335FF2AD10D0B0048AF77 /* Array+Safe.swift in Sources */,
+ 01F336002AD10D0B0048AF77 /* SavedProxyModel.swift in Sources */,
+ 01F336012AD10D0B0048AF77 /* NSTextField+Vibrancy.swift in Sources */,
+ 01F336022AD10D0B0048AF77 /* SSIDSuspendTool.swift in Sources */,
+ 01F336032AD10D0B0048AF77 /* ProxyGroupMenu.swift in Sources */,
+ 01F336042AD10D0B0048AF77 /* MenuItemFactory.swift in Sources */,
+ 01F336052AD10D0B0048AF77 /* MetaTask.swift in Sources */,
+ 01F336062AD10D0B0048AF77 /* AutoUpgardeManager.swift in Sources */,
+ 01F336072AD10D0B0048AF77 /* RemoteConfigModel.swift in Sources */,
+ 01F336082AD10D0B0048AF77 /* ProxyGroupMenuItemView.swift in Sources */,
+ 01F336092AD10D0B0048AF77 /* PrivilegedHelperManager.swift in Sources */,
+ 01F3360A2AD10D0B0048AF77 /* PrivilegedHelperManager+Legacy.swift in Sources */,
+ 01F3360B2AD10D0B0048AF77 /* NSUserNotificationCenter+Extension.swift in Sources */,
+ 01F3360C2AD10D0B0048AF77 /* NSAlert+Extension.swift in Sources */,
+ 01F3360D2AD10D0B0048AF77 /* ClashWebViewContoller.swift in Sources */,
+ 01F3360E2AD10D0B0048AF77 /* ProxyGroupSpeedTestMenuItem.swift in Sources */,
+ 01F3360F2AD10D0B0048AF77 /* LoginServiceKit.swift in Sources */,
+ 01F336102AD10D0B0048AF77 /* NormalMenuItemView.swift in Sources */,
+ 01F336112AD10D0B0048AF77 /* ProxyItemView.swift in Sources */,
+ 01F336122AD10D0B0048AF77 /* ICloudManager.swift in Sources */,
+ 01F336132AD10D0B0048AF77 /* String+Extension.swift in Sources */,
+ 01F336142AD10D0B0048AF77 /* MenuItemBaseView.swift in Sources */,
+ 01F336152AD10D0B0048AF77 /* RemoteControlManager.swift in Sources */,
+ 01F336162AD10D0B0048AF77 /* LoginKitWrapper.m in Sources */,
+ 01F336172AD10D0B0048AF77 /* ProxyMenuItem.swift in Sources */,
+ 01F336182AD10D0B0048AF77 /* UpdateExternalResourceAction.swift in Sources */,
+ 01F336192AD10D0B0048AF77 /* UpdateConfigAction.swift in Sources */,
+ 01F3361A2AD10D0B0048AF77 /* NSTableView+Reload.swift in Sources */,
+ 01F3361B2AD10D0B0048AF77 /* ClashProvider.swift in Sources */,
+ 01F3361C2AD10D0B0048AF77 /* SettingTabViewController.swift in Sources */,
+ 01F3361D2AD10D0B0048AF77 /* ClashRule.swift in Sources */,
+ 01F3361E2AD10D0B0048AF77 /* ClashRuleProvider.swift in Sources */,
+ 01F3361F2AD10D0B0048AF77 /* ClashProxy.swift in Sources */,
+ 01F336202AD10D0B0048AF77 /* UserDefaultWrapper.swift in Sources */,
+ 01F336212AD10D0B0048AF77 /* String+Encode.swift in Sources */,
+ 01F336222AD10D0B0048AF77 /* ClashStatusTool.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
49CF3B1920CD7463001EBF94 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -870,6 +1176,11 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 01F335B42AD10D0B0048AF77 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */;
+ targetProxy = 01F335B52AD10D0B0048AF77 /* PBXContainerItemProxy */;
+ };
F935B2EC2307B7CD009E4D33 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = F9A7C0682306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */;
@@ -901,6 +1212,98 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
+ 01F336422AD10D0B0048AF77 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD)";
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
+ CODE_SIGN_IDENTITY = "-";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ COMPRESS_PNG_FILES = YES;
+ CURRENT_PROJECT_VERSION = 0;
+ DEAD_CODE_STRIPPING = YES;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ );
+ INFOPLIST_FILE = "ClashX Meta SwiftUI-Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ClashX",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = v1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ STRIP_PNG_TEXT = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG SwiftUI_Version";
+ SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 01F336432AD10D0B0048AF77 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD)";
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
+ CODE_SIGN_IDENTITY = "-";
+ CODE_SIGN_STYLE = Manual;
+ COMBINE_HIDPI_IMAGES = YES;
+ COMPRESS_PNG_FILES = YES;
+ COPY_PHASE_STRIP = YES;
+ CURRENT_PROJECT_VERSION = 0;
+ DEAD_CODE_STRIPPING = YES;
+ DEPLOYMENT_POSTPROCESSING = YES;
+ DEVELOPMENT_TEAM = "";
+ ENABLE_HARDENED_RUNTIME = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ "$(PROJECT_DIR)/ClashX/Support\\ Files",
+ );
+ INFOPLIST_FILE = "ClashX Meta SwiftUI-Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ "@loader_path/../Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/ClashX",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = v1.0;
+ OTHER_CODE_SIGN_FLAGS = "--timestamp";
+ PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ STRIP_PNG_TEXT = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = SwiftUI_Version;
+ SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
49CF3B2B20CD7465001EBF94 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -1198,6 +1601,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 01F336412AD10D0B0048AF77 /* Build configuration list for PBXNativeTarget "ClashX Meta SwiftUI" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 01F336422AD10D0B0048AF77 /* Debug */,
+ 01F336432AD10D0B0048AF77 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
49CF3B1820CD7463001EBF94 /* Build configuration list for PBXProject "ClashX" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1300,6 +1712,94 @@
minimumVersion = 8.0.0;
};
};
+ 01F335B72AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/sindresorhus/KeyboardShortcuts.git";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 1.0.0;
+ };
+ };
+ 01F335B92AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Alamofire" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/Alamofire/Alamofire";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 5.0.0;
+ };
+ };
+ 01F335BB2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "RxSwift" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/ReactiveX/RxSwift";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 6.0.0;
+ };
+ };
+ 01F335BE2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "SwiftyJSON" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/SwiftyJSON/SwiftyJSON";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 5.0.0;
+ };
+ };
+ 01F335C02AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/CocoaLumberjack/CocoaLumberjack";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 3.0.0;
+ };
+ };
+ 01F335C32AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Starscream" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/daltoniam/Starscream";
+ requirement = {
+ kind = exactVersion;
+ version = 3.1.1;
+ };
+ };
+ 01F335C52AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "FlexibleDiff" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/RACCommunity/FlexibleDiff";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 0.0.9;
+ };
+ };
+ 01F335C72AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "GzipSwift" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/1024jp/GzipSwift";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 6.0.0;
+ };
+ };
+ 01F335C92AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Yams" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/jpsim/Yams";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 5.0.0;
+ };
+ };
+ 01F335CB2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "PromiseKit" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/mxcl/PromiseKit";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 8.0.0;
+ };
+ };
+ 01F336462AD139CC0048AF77 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/mrFq1/ClashX-Dashboard";
+ requirement = {
+ branch = dev;
+ kind = branch;
+ };
+ };
4905A2C62A2058D400AEDA2E /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/sindresorhus/KeyboardShortcuts.git";
@@ -1366,6 +1866,71 @@
package = 015B97842A4F31AE00F9FA4D /* XCRemoteSwiftPackageReference "PromiseKit" */;
productName = PromiseKit;
};
+ 01F335B62AD10D0B0048AF77 /* KeyboardShortcuts */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335B72AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */;
+ productName = KeyboardShortcuts;
+ };
+ 01F335B82AD10D0B0048AF77 /* Alamofire */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335B92AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Alamofire" */;
+ productName = Alamofire;
+ };
+ 01F335BA2AD10D0B0048AF77 /* RxCocoa */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335BB2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "RxSwift" */;
+ productName = RxCocoa;
+ };
+ 01F335BC2AD10D0B0048AF77 /* RxSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335BB2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "RxSwift" */;
+ productName = RxSwift;
+ };
+ 01F335BD2AD10D0B0048AF77 /* SwiftyJSON */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335BE2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "SwiftyJSON" */;
+ productName = SwiftyJSON;
+ };
+ 01F335BF2AD10D0B0048AF77 /* CocoaLumberjack */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C02AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */;
+ productName = CocoaLumberjack;
+ };
+ 01F335C12AD10D0B0048AF77 /* CocoaLumberjackSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C02AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "CocoaLumberjack" */;
+ productName = CocoaLumberjackSwift;
+ };
+ 01F335C22AD10D0B0048AF77 /* Starscream */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C32AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Starscream" */;
+ productName = Starscream;
+ };
+ 01F335C42AD10D0B0048AF77 /* FlexibleDiff */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C52AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "FlexibleDiff" */;
+ productName = FlexibleDiff;
+ };
+ 01F335C62AD10D0B0048AF77 /* Gzip */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C72AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "GzipSwift" */;
+ productName = Gzip;
+ };
+ 01F335C82AD10D0B0048AF77 /* Yams */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335C92AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "Yams" */;
+ productName = Yams;
+ };
+ 01F335CA2AD10D0B0048AF77 /* PromiseKit */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F335CB2AD10D0B0048AF77 /* XCRemoteSwiftPackageReference "PromiseKit" */;
+ productName = PromiseKit;
+ };
+ 01F336472AD139CC0048AF77 /* ClashX Dashboard */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = 01F336462AD139CC0048AF77 /* XCRemoteSwiftPackageReference "ClashX-Dashboard" */;
+ productName = "ClashX Dashboard";
+ };
4905A2C72A2058D400AEDA2E /* KeyboardShortcuts */ = {
isa = XCSwiftPackageProductDependency;
package = 4905A2C62A2058D400AEDA2E /* XCRemoteSwiftPackageReference "KeyboardShortcuts" */;
diff --git a/ClashX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ClashX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 8281b42d6..d9950a63a 100644
--- a/ClashX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/ClashX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -9,6 +9,15 @@
"version" : "5.8.0"
}
},
+ {
+ "identity" : "clashx-dashboard",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mrFq1/ClashX-Dashboard",
+ "state" : {
+ "branch" : "dev",
+ "revision" : "272999024e836c5b006b0f3869fa4a1f5d27286b"
+ }
+ },
{
"identity" : "cocoalumberjack",
"kind" : "remoteSourceControl",
@@ -18,6 +27,15 @@
"version" : "3.8.1"
}
},
+ {
+ "identity" : "dsfsparkline",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/dagronf/DSFSparkline.git",
+ "state" : {
+ "revision" : "cfcf80b9e214500cbc12b795b7c9943151b8bd4f",
+ "version" : "4.6.4"
+ }
+ },
{
"identity" : "flexiblediff",
"kind" : "remoteSourceControl",
@@ -108,6 +126,15 @@
"version" : "1.0.0"
}
},
+ {
+ "identity" : "swiftui-introspect",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/siteline/swiftui-introspect",
+ "state" : {
+ "revision" : "121c146fe591b1320238d054ae35c81ffa45f45a",
+ "version" : "0.12.0"
+ }
+ },
{
"identity" : "swiftyjson",
"kind" : "remoteSourceControl",
diff --git a/ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/ClashX Meta.xcscheme b/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
similarity index 75%
rename from ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/ClashX Meta.xcscheme
rename to ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
index 274480923..1b34a3874 100644
--- a/ClashX SwiftUI.xcodeproj/xcshareddata/xcschemes/ClashX Meta.xcscheme
+++ b/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
+ BlueprintIdentifier = "01F335B32AD10D0B0048AF77"
+ BuildableName = "ClashX Meta SwiftUI.app"
+ BlueprintName = "ClashX Meta SwiftUI"
+ ReferencedContainer = "container:ClashX.xcodeproj">
@@ -44,10 +44,10 @@
runnableDebuggingMode = "0">
+ BlueprintIdentifier = "01F335B32AD10D0B0048AF77"
+ BuildableName = "ClashX Meta SwiftUI.app"
+ BlueprintName = "ClashX Meta SwiftUI"
+ ReferencedContainer = "container:ClashX.xcodeproj">
@@ -61,10 +61,10 @@
runnableDebuggingMode = "0">
+ BlueprintIdentifier = "01F335B32AD10D0B0048AF77"
+ BuildableName = "ClashX Meta SwiftUI.app"
+ BlueprintName = "ClashX Meta SwiftUI"
+ ReferencedContainer = "container:ClashX.xcodeproj">
diff --git a/ClashX/ViewControllers/DashboardManager.swift b/ClashX/ViewControllers/DashboardManager.swift
index 73c3a600a..61e253080 100644
--- a/ClashX/ViewControllers/DashboardManager.swift
+++ b/ClashX/ViewControllers/DashboardManager.swift
@@ -6,23 +6,111 @@
//
import Cocoa
+import RxSwift
+#if SwiftUI_Version
+import ClashX_Dashboard
+#endif
+
class DashboardManager: NSObject {
static let shared = DashboardManager()
+ override init() {
+ }
+
+#if SwiftUI_Version
+ let enableSwiftUI = true
+ var useYacd = MenuItemFactory.useYacdDashboard {
+ didSet {
+ if useYacd {
+ deinitNotifications()
+ dashboardWindowController?.close()
+ } else {
+ clashWebWindowController?.close()
+ }
+ }
+ }
+ var dashboardWindowController: DashboardWindowController?
+#else
let enableSwiftUI = false
var useYacd = true
-
- var dashboardWindowController: ClashWebViewWindowController?
+#endif
+
+ private var disposables = [Disposable]()
+
+ var clashWebWindowController: ClashWebViewWindowController?
+
func show(_ sender: NSMenuItem?) {
+#if SwiftUI_Version
+ initNotifications()
+
+ if useYacd {
+ dashboardWindowController = nil
+ showWebWindow(sender)
+ } else {
+ clashWebWindowController = nil
+ showSwiftUIWindow(sender)
+ }
+#else
+ showWebWindow(sender)
+#endif
+ }
+
+ func showWebWindow(_ sender: NSMenuItem?) {
+ if clashWebWindowController == nil {
+ clashWebWindowController = ClashWebViewWindowController.create()
+ clashWebWindowController?.onWindowClose = {
+ [weak self] in
+ self?.clashWebWindowController = nil
+ }
+ }
+ clashWebWindowController?.showWindow(sender)
+ }
+
+ func deinitNotifications() {
+ disposables.forEach {
+ $0.dispose()
+ }
+ disposables.removeAll()
+ }
+
+ deinit {
+ deinitNotifications()
+ }
+}
+
+#if SwiftUI_Version
+extension DashboardManager {
+ func showSwiftUIWindow(_ sender: NSMenuItem?) {
if dashboardWindowController == nil {
- dashboardWindowController = ClashWebViewWindowController.create()
+ dashboardWindowController = DashboardWindowController.create()
dashboardWindowController?.onWindowClose = {
[weak self] in
self?.dashboardWindowController = nil
}
}
+
+ dashboardWindowController?.set(ConfigManager.apiUrl, secret: ConfigManager.shared.overrideSecret ?? ConfigManager.shared.apiSecret)
+
dashboardWindowController?.showWindow(sender)
}
+
+ func initNotifications() {
+ guard !useYacd, disposables.count == 0 else { return }
+
+ let n1 = NotificationCenter.default.rx.notification(.configFileChange).subscribe {
+ [weak self] _ in
+ self?.dashboardWindowController?.reload()
+ }
+
+ let n2 = NotificationCenter.default.rx.notification(.reloadDashboard).subscribe {
+ [weak self] _ in
+ self?.dashboardWindowController?.reload()
+ }
+ disposables.append(n1)
+ disposables.append(n2)
+ }
+
}
+#endif
diff --git a/ClashX/ViewControllers/DashboardManagerSwiftUI.swift b/ClashX/ViewControllers/DashboardManagerSwiftUI.swift
deleted file mode 100644
index de1a8dcd6..000000000
--- a/ClashX/ViewControllers/DashboardManagerSwiftUI.swift
+++ /dev/null
@@ -1,100 +0,0 @@
-//
-// DashboardManagerSwiftUI.swift
-// ClashX Meta
-//
-// Copyright © 2023 west2online. All rights reserved.
-//
-
-import Cocoa
-import RxSwift
-import ClashX_Dashboard
-
-class DashboardManager: NSObject {
-
- private var disposables = [Disposable]()
-
- static let shared = DashboardManager()
-
- override init() {
- }
-
- let enableSwiftUI = true
-
- var useYacd = MenuItemFactory.useYacdDashboard {
- didSet {
- if useYacd {
- deinitNotifications()
- dashboardWindowController?.close()
- } else {
- yacdWindowController?.close()
- }
- }
- }
-
- var yacdWindowController: ClashWebViewWindowController?
- var dashboardWindowController: DashboardWindowController?
-
- func show(_ sender: NSMenuItem?) {
- initNotifications()
-
- if useYacd {
- dashboardWindowController = nil
- showWebWindow(sender)
- } else {
- yacdWindowController = nil
- showSwiftUIWindow(sender)
- }
- }
-
- func showWebWindow(_ sender: NSMenuItem?) {
- if yacdWindowController == nil {
- yacdWindowController = ClashWebViewWindowController.create()
- yacdWindowController?.onWindowClose = {
- [weak self] in
- self?.yacdWindowController = nil
- }
- }
- yacdWindowController?.showWindow(sender)
- }
-
- func showSwiftUIWindow(_ sender: NSMenuItem?) {
- if dashboardWindowController == nil {
- dashboardWindowController = DashboardWindowController.create()
- dashboardWindowController?.onWindowClose = {
- [weak self] in
- self?.dashboardWindowController = nil
- }
- }
-
- dashboardWindowController?.set(ConfigManager.apiUrl, secret: ConfigManager.shared.overrideSecret ?? ConfigManager.shared.apiSecret)
-
- dashboardWindowController?.showWindow(sender)
- }
-
- func initNotifications() {
- guard !useYacd, disposables.count == 0 else { return }
-
- let n1 = NotificationCenter.default.rx.notification(.configFileChange).subscribe {
- [weak self] _ in
- self?.dashboardWindowController?.reload()
- }
-
- let n2 = NotificationCenter.default.rx.notification(.reloadDashboard).subscribe {
- [weak self] _ in
- self?.dashboardWindowController?.reload()
- }
- disposables.append(n1)
- disposables.append(n2)
- }
-
- func deinitNotifications() {
- disposables.forEach {
- $0.dispose()
- }
- disposables.removeAll()
- }
-
- deinit {
- deinitNotifications()
- }
-}
From f497008435618f27fc4554acbecbe51c9cbe7eb7 Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Sat, 7 Oct 2023 16:50:23 +0800
Subject: [PATCH 3/6] misc: fix ci
---
.github/workflows/main.yml | 8 ++++----
ClashX.xcodeproj/project.pbxproj | 10 +++++-----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index adfed918b..35bc3fd4a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -51,20 +51,20 @@ jobs:
- name: install deps
- run: bash install_dependency.sh
+ run: |
+ bash install_dependency.sh
+ xcodebuild -resolvePackageDependencies -project ClashX.xcodeproj
- name: build
if: startsWith(github.ref, 'refs/tags/')
run: |
- xcodebuild -resolvePackageDependencies -project ClashX.xcodeproj
xcodebuild archive -project ClashX.xcodeproj -scheme ClashX\ Meta -archivePath archive/ClashX.xcarchive -showBuildTimingSummary -allowProvisioningUpdates
- name: build-SwiftUI
run: |
- xcodebuild -resolvePackageDependencies -project ClashX\ SwiftUI.xcodeproj
- xcodebuild archive -project ClashX\ SwiftUI.xcodeproj -scheme ClashX\ Meta -archivePath archive/ClashX\ SwiftUI.xcarchive -showBuildTimingSummary -allowProvisioningUpdates
+ xcodebuild archive -project ClashX.xcodeproj -scheme ClashX\ Meta\ SwiftUI -archivePath archive/ClashX\ SwiftUI.xcarchive -showBuildTimingSummary -allowProvisioningUpdates
- name: create zip
diff --git a/ClashX.xcodeproj/project.pbxproj b/ClashX.xcodeproj/project.pbxproj
index 8307765d1..1027eef87 100644
--- a/ClashX.xcodeproj/project.pbxproj
+++ b/ClashX.xcodeproj/project.pbxproj
@@ -310,7 +310,7 @@
01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = ""; };
01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = ""; };
01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; };
- 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta SwiftUI.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 01F336442AD10D0B0048AF77 /* ClashX Meta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta.app"; sourceTree = BUILT_PRODUCTS_DIR; };
01F336452AD10D0B0048AF77 /* ClashX Meta SwiftUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "ClashX Meta SwiftUI-Info.plist"; path = "/Users/xjbeta/Developer/Clash/ClashX.Meta/ClashX Meta SwiftUI-Info.plist"; sourceTree = ""; };
2753484F2A3082FD0077B458 /* TunModeSettingCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunModeSettingCommand.swift; sourceTree = ""; };
4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalShortCutViewController.swift; sourceTree = ""; };
@@ -691,7 +691,7 @@
children = (
49CF3B1D20CD7463001EBF94 /* ClashX Meta.app */,
F9A7C0692306E874007163C7 /* com.metacubex.ClashX.ProxyConfigHelper */,
- 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */,
+ 01F336442AD10D0B0048AF77 /* ClashX Meta.app */,
);
name = Products;
sourceTree = "";
@@ -813,7 +813,7 @@
01F336472AD139CC0048AF77 /* ClashX Dashboard */,
);
productName = ClashX;
- productReference = 01F336442AD10D0B0048AF77 /* ClashX Meta SwiftUI.app */;
+ productReference = 01F336442AD10D0B0048AF77 /* ClashX Meta.app */;
productType = "com.apple.product-type.application";
};
49CF3B1C20CD7463001EBF94 /* ClashX Meta */ = {
@@ -1247,7 +1247,7 @@
MACOSX_DEPLOYMENT_TARGET = 12.0;
MARKETING_VERSION = v1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_NAME = "ClashX Meta";
PROVISIONING_PROFILE_SPECIFIER = "";
STRIP_PNG_TEXT = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG SwiftUI_Version";
@@ -1295,7 +1295,7 @@
MARKETING_VERSION = v1.0;
OTHER_CODE_SIGN_FLAGS = "--timestamp";
PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_NAME = "ClashX Meta";
PROVISIONING_PROFILE_SPECIFIER = "";
STRIP_PNG_TEXT = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = SwiftUI_Version;
From d938c62c40fad52aa575bb5f52a9098e444d7a9d Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Sat, 7 Oct 2023 17:04:21 +0800
Subject: [PATCH 4/6] misc: builds
---
ClashX.xcodeproj/project.pbxproj | 8 +-
.../xcschemes/ClashX Meta SwiftUI.xcscheme | 6 +-
.../ClashX Meta SwiftUI-Info.plist | 0
ClashX/goClash/proccess.go | 108 ------------------
4 files changed, 7 insertions(+), 115 deletions(-)
rename ClashX Meta SwiftUI-Info.plist => ClashX/ClashX Meta SwiftUI-Info.plist (100%)
delete mode 100644 ClashX/goClash/proccess.go
diff --git a/ClashX.xcodeproj/project.pbxproj b/ClashX.xcodeproj/project.pbxproj
index 1027eef87..b0cc0fc4c 100644
--- a/ClashX.xcodeproj/project.pbxproj
+++ b/ClashX.xcodeproj/project.pbxproj
@@ -308,10 +308,10 @@
01B2274A29B845F100FE35C9 /* country.mmdb.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = country.mmdb.gz; sourceTree = ""; };
01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaDNS.swift; sourceTree = ""; };
01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = ""; };
+ 01D567DF2AD1562700CDA0AE /* ClashX Meta SwiftUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ClashX Meta SwiftUI-Info.plist"; sourceTree = ""; };
01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = ""; };
01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; };
01F336442AD10D0B0048AF77 /* ClashX Meta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 01F336452AD10D0B0048AF77 /* ClashX Meta SwiftUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "ClashX Meta SwiftUI-Info.plist"; path = "/Users/xjbeta/Developer/Clash/ClashX.Meta/ClashX Meta SwiftUI-Info.plist"; sourceTree = ""; };
2753484F2A3082FD0077B458 /* TunModeSettingCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunModeSettingCommand.swift; sourceTree = ""; };
4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalShortCutViewController.swift; sourceTree = ""; };
4905A2C92A20841B00AEDA2E /* NSView+Layout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSView+Layout.swift"; sourceTree = ""; };
@@ -714,7 +714,7 @@
49CF3B2020CD7463001EBF94 /* AppDelegate.swift */,
49CF3B2620CD7465001EBF94 /* Main.storyboard */,
49CF3B2920CD7465001EBF94 /* Info.plist */,
- 01F336452AD10D0B0048AF77 /* ClashX Meta SwiftUI-Info.plist */,
+ 01D567DF2AD1562700CDA0AE /* ClashX Meta SwiftUI-Info.plist */,
49CF3B2A20CD7465001EBF94 /* ClashX.entitlements */,
49CF3B3520CD75DF001EBF94 /* ClashX-Bridging-Header.h */,
F9FAB31D262BE04800DE02A6 /* Images.xcassets */,
@@ -1234,7 +1234,7 @@
"$(PROJECT_DIR)/ClashX/Support\\ Files",
"$(PROJECT_DIR)/ClashX/Support\\ Files",
);
- INFOPLIST_FILE = "ClashX Meta SwiftUI-Info.plist";
+ INFOPLIST_FILE = "ClashX/ClashX Meta SwiftUI-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
@@ -1281,7 +1281,7 @@
"$(PROJECT_DIR)/ClashX/Support\\ Files",
"$(PROJECT_DIR)/ClashX/Support\\ Files",
);
- INFOPLIST_FILE = "ClashX Meta SwiftUI-Info.plist";
+ INFOPLIST_FILE = "ClashX/ClashX Meta SwiftUI-Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
diff --git a/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme b/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
index 1b34a3874..5ad8c3342 100644
--- a/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
+++ b/ClashX.xcodeproj/xcshareddata/xcschemes/ClashX Meta SwiftUI.xcscheme
@@ -15,7 +15,7 @@
@@ -45,7 +45,7 @@
@@ -62,7 +62,7 @@
diff --git a/ClashX Meta SwiftUI-Info.plist b/ClashX/ClashX Meta SwiftUI-Info.plist
similarity index 100%
rename from ClashX Meta SwiftUI-Info.plist
rename to ClashX/ClashX Meta SwiftUI-Info.plist
diff --git a/ClashX/goClash/proccess.go b/ClashX/goClash/proccess.go
deleted file mode 100644
index b3e6b29bd..000000000
--- a/ClashX/goClash/proccess.go
+++ /dev/null
@@ -1,108 +0,0 @@
-package main
-
-import (
- "encoding/binary"
- "fmt"
- "net/netip"
- "strconv"
- "strings"
- "syscall"
- "unsafe"
-)
-
-const (
- procpidpathinfo = 0xb
- procpidpathinfosize = 1024
- proccallnumpidinfo = 0x2
-)
-
-var structSize = func() int {
- value, _ := syscall.Sysctl("kern.osrelease")
- major, _, _ := strings.Cut(value, ".")
- n, _ := strconv.ParseInt(major, 10, 64)
- switch true {
- case n >= 22:
- return 408
- default:
- // from darwin-xnu/bsd/netinet/in_pcblist.c:get_pcblist_n
- // size/offset are round up (aligned) to 8 bytes in darwin
- // rup8(sizeof(xinpcb_n)) + rup8(sizeof(xsocket_n)) +
- // 2 * rup8(sizeof(xsockbuf_n)) + rup8(sizeof(xsockstat_n))
- return 384
- }
-}()
-
-func GetTcpNetList() string {
- value, err := syscall.Sysctl("net.inet.tcp.pcblist_n")
- if err != nil {
- return ""
- }
-
- buf := []byte(value)
- itemSize := structSize
- // tcp
- // rup8(sizeof(xtcpcb_n))
- itemSize += 208
-
- result := ""
- for i := 24; i+itemSize <= len(buf); i += itemSize {
- // offset of xinpcb_n and xsocket_n
- inp, so := i, i+104
- srcPort := binary.BigEndian.Uint16(buf[inp+18 : inp+20])
- // xinpcb_n.inp_vflag
- flag := buf[inp+44]
-
- var srcIP netip.Addr
- switch {
- case flag&0x1 > 0:
- // ipv4
- srcIP = netip.AddrFrom4([4]byte(buf[inp+76 : inp+80]))
- case flag&0x2 > 0:
- // ipv6
- srcIP = netip.AddrFrom16([16]byte(buf[inp+64 : inp+80]))
- default:
- continue
- }
- pid := readNativeUint32(buf[so+68 : so+72])
- result += fmt.Sprintf("%s %d %d\n", srcIP, srcPort, pid)
- }
- return result
-}
-
-func GetUDpList() string {
- value, err := syscall.Sysctl("net.inet.udp.pcblist_n")
- if err != nil {
- return ""
- }
-
- buf := []byte(value)
- itemSize := structSize
- result := ""
-
- for i := 24; i+itemSize <= len(buf); i += itemSize {
- // offset of xinpcb_n and xsocket_n
- inp, so := i, i+104
- srcPort := binary.BigEndian.Uint16(buf[inp+18 : inp+20])
- // xinpcb_n.inp_vflag
- flag := buf[inp+44]
- var srcIP netip.Addr
- switch {
- case flag&0x1 > 0:
- // ipv4
- srcIP = netip.AddrFrom4([4]byte(buf[inp+76 : inp+80]))
- case flag&0x2 > 0:
- // ipv6
- srcIP = netip.AddrFrom16([16]byte(buf[inp+64 : inp+80]))
- default:
- continue
- }
-
- pid := readNativeUint32(buf[so+68 : so+72])
- result += fmt.Sprintf("%s %d %d\n", srcIP, srcPort, pid)
- }
- return result
-}
-
-func readNativeUint32(b []byte) uint32 {
- return *(*uint32)(unsafe.Pointer(&b[0]))
-}
From c2bb3f570fd184a145e2f2d14ac9653bbf922af8 Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Sun, 8 Oct 2023 15:36:07 +0800
Subject: [PATCH 5/6] feat: meta setting view
---
ClashX.xcodeproj/project.pbxproj | 12 +
ClashX/AppDelegate.swift | 102 +------
ClashX/Base.lproj/Main.storyboard | 59 +---
ClashX/General/ClashMetaConfig.swift | 5 +-
ClashX/General/Managers/ConfigManager.swift | 21 ++
ClashX/General/Managers/MenuItemFactory.swift | 12 -
.../ClashWebViewContoller.swift | 7 +-
ClashX/ViewControllers/DashboardManager.swift | 31 +-
.../Settings/MetaPrefs.storyboard | 268 ++++++++++++++++++
.../Settings/MetaPrefsViewController.swift | 161 +++++++++++
install_dependency.sh | 14 +-
11 files changed, 512 insertions(+), 180 deletions(-)
create mode 100644 ClashX/ViewControllers/Settings/MetaPrefs.storyboard
create mode 100644 ClashX/ViewControllers/Settings/MetaPrefsViewController.swift
diff --git a/ClashX.xcodeproj/project.pbxproj b/ClashX.xcodeproj/project.pbxproj
index b0cc0fc4c..e950be5e2 100644
--- a/ClashX.xcodeproj/project.pbxproj
+++ b/ClashX.xcodeproj/project.pbxproj
@@ -31,6 +31,10 @@
01B2274B29B845F100FE35C9 /* country.mmdb.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B2274A29B845F100FE35C9 /* country.mmdb.gz */; };
01BC9ABE2928EB5A00F9B177 /* MetaDNS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */; };
01C1462A28962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */; };
+ 01D567E32AD158B600CDA0AE /* MetaPrefs.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01D567E12AD158B500CDA0AE /* MetaPrefs.storyboard */; };
+ 01D567E42AD158B600CDA0AE /* MetaPrefs.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01D567E12AD158B500CDA0AE /* MetaPrefs.storyboard */; };
+ 01D567E52AD158B600CDA0AE /* MetaPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D567E22AD158B500CDA0AE /* MetaPrefsViewController.swift */; };
+ 01D567E62AD158B600CDA0AE /* MetaPrefsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D567E22AD158B500CDA0AE /* MetaPrefsViewController.swift */; };
01E33AB229B5BF4200FD1006 /* NSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */; };
01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */; };
01F335CD2AD10D0B0048AF77 /* UnsafePointer+bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49ABB748236B0F9E00535CD7 /* UnsafePointer+bridge.swift */; };
@@ -309,6 +313,8 @@
01BC9ABD2928E5C600F9B177 /* MetaDNS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaDNS.swift; sourceTree = ""; };
01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = ""; };
01D567DF2AD1562700CDA0AE /* ClashX Meta SwiftUI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ClashX Meta SwiftUI-Info.plist"; sourceTree = ""; };
+ 01D567E12AD158B500CDA0AE /* MetaPrefs.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MetaPrefs.storyboard; sourceTree = ""; };
+ 01D567E22AD158B500CDA0AE /* MetaPrefsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaPrefsViewController.swift; sourceTree = ""; };
01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = ""; };
01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = ""; };
01F336442AD10D0B0048AF77 /* ClashX Meta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ClashX Meta.app"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -647,6 +653,8 @@
498BC2542929CCAE00CA8084 /* GeneralSettingViewController.swift */,
49281C7F2A1F01FA00F60935 /* DebugSettingViewController.swift */,
4905A2C42A2058B000AEDA2E /* GlobalShortCutViewController.swift */,
+ 01D567E12AD158B500CDA0AE /* MetaPrefs.storyboard */,
+ 01D567E22AD158B500CDA0AE /* MetaPrefsViewController.swift */,
);
path = Settings;
sourceTree = "";
@@ -939,6 +947,7 @@
01F336332AD10D0B0048AF77 /* dashboard in Resources */,
01F336342AD10D0B0048AF77 /* Localizable.strings in Resources */,
01F336352AD10D0B0048AF77 /* ProxySetting.sdef in Resources */,
+ 01D567E42AD158B600CDA0AE /* MetaPrefs.storyboard in Resources */,
01F336362AD10D0B0048AF77 /* Images.xcassets in Resources */,
01F336372AD10D0B0048AF77 /* menu_icon@2x.png in Resources */,
01F336382AD10D0B0048AF77 /* StatusItemView.xib in Resources */,
@@ -959,6 +968,7 @@
49761DA721C9497000AE13EF /* dashboard in Resources */,
4981C88B216BAE4A008CC14A /* Localizable.strings in Resources */,
8A2BBEA727A03ACB0081EBEF /* ProxySetting.sdef in Resources */,
+ 01D567E32AD158B600CDA0AE /* MetaPrefs.storyboard in Resources */,
F9FAB31E262BE04800DE02A6 /* Images.xcassets in Resources */,
01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */,
495340B020DE5F7200B0D3FF /* StatusItemView.xib in Resources */,
@@ -1003,6 +1013,7 @@
01F335E32AD10D0B0048AF77 /* AppDelegate.swift in Sources */,
01F335E42AD10D0B0048AF77 /* SpeedUtils.swift in Sources */,
01F335E52AD10D0B0048AF77 /* Logger.swift in Sources */,
+ 01D567E62AD158B600CDA0AE /* MetaPrefsViewController.swift in Sources */,
01F335E62AD10D0B0048AF77 /* NSView+Layout.swift in Sources */,
01F335E72AD10D0B0048AF77 /* FileEvent.swift in Sources */,
01F335E82AD10D0B0048AF77 /* AlphaMetaDownloader.swift in Sources */,
@@ -1096,6 +1107,7 @@
49CF3B2120CD7463001EBF94 /* AppDelegate.swift in Sources */,
4991D2302A564DDC00978143 /* SpeedUtils.swift in Sources */,
496BDEE021196F1E00C5207F /* Logger.swift in Sources */,
+ 01D567E52AD158B600CDA0AE /* MetaPrefsViewController.swift in Sources */,
4905A2CA2A20841B00AEDA2E /* NSView+Layout.swift in Sources */,
49722FEF211F338B00650A41 /* FileEvent.swift in Sources */,
016BEAB029D80103001586C5 /* AlphaMetaDownloader.swift in Sources */,
diff --git a/ClashX/AppDelegate.swift b/ClashX/AppDelegate.swift
index 0855da95f..a394d38ba 100644
--- a/ClashX/AppDelegate.swift
+++ b/ClashX/AppDelegate.swift
@@ -51,8 +51,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet var tunModeMenuItem: NSMenuItem!
- @IBOutlet var hideUnselecableMenuItem: NSMenuItem!
- @IBOutlet var useYacdDashboardMenuItem: NSMenuItem!
@IBOutlet var proxyProvidersMenu: NSMenu!
@IBOutlet var ruleProvidersMenu: NSMenu!
@IBOutlet var proxyProvidersMenuItem: NSMenuItem!
@@ -60,10 +58,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet var snifferMenuItem: NSMenuItem!
@IBOutlet var flushFakeipCacheMenuItem: NSMenuItem!
- @IBOutlet var useAlphaMetaMenuItem: NSMenuItem!
- @IBOutlet var alphaMetaVersionMenuItem: NSMenuItem!
- @IBOutlet var updateAlphaMetaMenuItem: NSMenuItem!
-
var disposeBag = DisposeBag()
var statusItemView: StatusItemViewProtocol!
var isSpeedTesting = false
@@ -207,12 +201,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
statusItemView.updateViewStatus(enableProxy: ConfigManager.shared.proxyPortAutoSet)
- hideUnselecableMenuItem.state = .init(rawValue: MenuItemFactory.hideUnselectable)
-
- useYacdDashboardMenuItem.state = MenuItemFactory.useYacdDashboard ? .on : .off
- useYacdDashboardMenuItem.isHidden = !DashboardManager.shared.enableSwiftUI
-
- useAlphaMetaMenuItem.state = MenuItemFactory.useAlphaCore ? .on : .off
}
func setupData() {
@@ -490,13 +478,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
// alpha core
- if let v = testMetaCore(alphaCorePath.path) {
- updateAlphaVersion(v.version)
- if MenuItemFactory.useAlphaCore {
+ if let _ = testMetaCore(alphaCorePath.path) {
+ if ConfigManager.useAlphaCore {
return (alphaCorePath.path, nil)
}
- } else {
- updateAlphaVersion(nil)
}
let fm = FileManager.default
@@ -1168,31 +1153,6 @@ extension AppDelegate {
}
}
- @IBAction func hideUnselectable(_ sender: NSMenuItem) {
- var newState = NSControl.StateValue.off
- switch sender.state {
- case .off:
- newState = .mixed
- case .mixed:
- newState = .on
- case .on:
- newState = .off
- default:
- return
- }
-
- sender.state = newState
- MenuItemFactory.hideUnselectable = newState.rawValue
- }
-
- @IBAction func useYacdDashboard(_ sender: NSMenuItem) {
- guard DashboardManager.shared.enableSwiftUI else { return }
-
- let useYacd = sender.state == .off
- sender.state = useYacd ? .on : .off
- MenuItemFactory.useYacdDashboard = useYacd
- }
-
@IBAction func checkForUpdate(_ sender: NSMenuItem) {
let unc = NSUserNotificationCenter.default
AF.request("https://api.github.com/repos/MetaCubeX/ClashX.Meta/releases/latest").responseString {
@@ -1259,64 +1219,6 @@ extension AppDelegate {
sender.state = enable ? .on : .off
}
}
-
- @IBAction func useAlphaMeta(_ sender: NSMenuItem) {
- if UserDefaults.standard.object(forKey: "useAlphaCore") as? Bool == nil {
- let alert = NSAlert()
- alert.messageText = NSLocalizedString("Alpha Meta core Warning", comment: "")
- alert.alertStyle = .warning
- alert.addButton(withTitle: NSLocalizedString("Continue", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- if alert.runModal() != .alertFirstButtonReturn {
- return
- }
- }
-
- let use = sender.state != .on
- MenuItemFactory.useAlphaCore = use
- sender.state = use ? .on : .off
- }
-
- @IBAction func showAlphaInFinder(_ sender: NSMenuItem) {
- guard let u = Paths.alphaCorePath(),
- FileManager.default.fileExists(atPath: u.path) else { return }
- NSWorkspace.shared.activateFileViewerSelecting([u])
- }
-
- @IBAction func updateAlphaMeta(_ sender: NSMenuItem) {
- sender.isEnabled = false
-
- AlphaMetaDownloader.alphaAsset().then {
- AlphaMetaDownloader.checkVersion($0)
- }.then {
- AlphaMetaDownloader.downloadCore($0)
- }.then {
- AlphaMetaDownloader.replaceCore($0)
- }.done {
- self.updateAlphaVersion($0)
- let msg = NSLocalizedString("Version: ", comment: "") + $0
- NSUserNotificationCenter.default.post(title: "Clash Meta Core", info: msg)
- }.ensure {
- sender.isEnabled = true
- }.catch {
- let error = $0 as? AlphaMetaDownloader.errors
- NSUserNotificationCenter.default.post(title: "Clash Meta Core", info: error?.des() ?? "")
- }
- }
-
- func updateAlphaVersion(_ version: String?) {
- let enable = version != nil
- useAlphaMetaMenuItem.isEnabled = enable
- alphaMetaVersionMenuItem.isEnabled = enable
- if let v = version {
- let info = NSLocalizedString("Version: ", comment: "") + v
- alphaMetaVersionMenuItem.title = info
- updateAlphaMetaMenuItem.title = NSLocalizedString("Update Alpha Meta core", comment: "")
- } else {
- alphaMetaVersionMenuItem.title = NSLocalizedString("Version: ", comment: "") + "none"
- updateAlphaMetaMenuItem.title = NSLocalizedString("Download Meta core", comment: "")
- }
- }
}
// MARK: crash hanlder
diff --git a/ClashX/Base.lproj/Main.storyboard b/ClashX/Base.lproj/Main.storyboard
index 07e8bbe63..d64808d6e 100644
--- a/ClashX/Base.lproj/Main.storyboard
+++ b/ClashX/Base.lproj/Main.storyboard
@@ -1,11 +1,18 @@
-
+
+
+
+
+
+
+
+
@@ -14,6 +21,7 @@
+
@@ -28,6 +36,7 @@
+
@@ -699,7 +708,6 @@
-
@@ -709,7 +717,6 @@
-
@@ -730,9 +737,6 @@
-
-
-
@@ -2140,5 +2102,6 @@
+
diff --git a/ClashX/General/ClashMetaConfig.swift b/ClashX/General/ClashMetaConfig.swift
index 35c36eb9d..6b420202c 100644
--- a/ClashX/General/ClashMetaConfig.swift
+++ b/ClashX/General/ClashMetaConfig.swift
@@ -11,7 +11,10 @@ class ClashMetaConfig: NSObject {
struct Config: Codable {
var externalUI: String? = {
- guard let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "dashboard") else {
+ var subpath = "dashboard/"
+ subpath += ConfigManager.useYacdDashboard ? "yacd" : "xd"
+
+ guard let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: subpath) else {
return nil
}
return URL(fileURLWithPath: htmlPath).deletingLastPathComponent().path
diff --git a/ClashX/General/Managers/ConfigManager.swift b/ClashX/General/Managers/ConfigManager.swift
index 03f88b18a..64d738f98 100644
--- a/ClashX/General/Managers/ConfigManager.swift
+++ b/ClashX/General/Managers/ConfigManager.swift
@@ -185,3 +185,24 @@ extension ConfigManager {
}
}
}
+
+extension ConfigManager {
+ static var useYacdDashboard: Bool = UserDefaults.standard.object(forKey: "useYacdDashboard") as? Bool ?? false {
+ didSet {
+ UserDefaults.standard.set(useYacdDashboard, forKey: "useYacdDashboard")
+ }
+ }
+
+ static var useSwiftUIDashboard: Bool = UserDefaults.standard.object(forKey: "useSwiftUIDashboard") as? Bool ?? false {
+ didSet {
+ UserDefaults.standard.set(useSwiftUIDashboard, forKey: "useSwiftUIDashboard")
+ }
+ }
+
+
+ static var useAlphaCore: Bool = UserDefaults.standard.object(forKey: "useAlphaCore") as? Bool ?? false {
+ didSet {
+ UserDefaults.standard.set(useAlphaCore, forKey: "useAlphaCore")
+ }
+ }
+}
diff --git a/ClashX/General/Managers/MenuItemFactory.swift b/ClashX/General/Managers/MenuItemFactory.swift
index 51849e240..e37207353 100644
--- a/ClashX/General/Managers/MenuItemFactory.swift
+++ b/ClashX/General/Managers/MenuItemFactory.swift
@@ -22,18 +22,6 @@ class MenuItemFactory {
}
}
- static var useYacdDashboard: Bool = UserDefaults.standard.object(forKey: "useYacdDashboard") as? Bool ?? false {
- didSet {
- UserDefaults.standard.set(useYacdDashboard, forKey: "useYacdDashboard")
- DashboardManager.shared.useYacd = useYacdDashboard
- }
- }
-
- static var useAlphaCore: Bool = UserDefaults.standard.object(forKey: "useAlphaCore") as? Bool ?? false {
- didSet {
- UserDefaults.standard.set(useAlphaCore, forKey: "useAlphaCore")
- }
- }
static let updateAllProvidersTitle = NSLocalizedString("Update All Providers", comment: "")
diff --git a/ClashX/ViewControllers/ClashWebViewContoller.swift b/ClashX/ViewControllers/ClashWebViewContoller.swift
index 664296a8a..3e134db06 100644
--- a/ClashX/ViewControllers/ClashWebViewContoller.swift
+++ b/ClashX/ViewControllers/ClashWebViewContoller.swift
@@ -153,9 +153,10 @@ class ClashWebViewContoller: NSViewController {
var params = [String]()
let cm = ConfigManager.shared
- if cm.apiPort != "9090" {
- params.append("port=\(cm.apiPort)")
- }
+
+ params.append("hostname=127.0.0.1")
+ params.append("port=\(cm.apiPort)")
+
if cm.apiSecret != "" {
params.append("secret=\(cm.apiSecret)")
}
diff --git a/ClashX/ViewControllers/DashboardManager.swift b/ClashX/ViewControllers/DashboardManager.swift
index 61e253080..ba20f9370 100644
--- a/ClashX/ViewControllers/DashboardManager.swift
+++ b/ClashX/ViewControllers/DashboardManager.swift
@@ -13,27 +13,32 @@ import ClashX_Dashboard
class DashboardManager: NSObject {
+
static let shared = DashboardManager()
override init() {
}
+
#if SwiftUI_Version
- let enableSwiftUI = true
- var useYacd = MenuItemFactory.useYacdDashboard {
- didSet {
- if useYacd {
+ var useSwiftUI: Bool {
+ get {
+ return ConfigManager.useSwiftUIDashboard
+ }
+ set {
+ ConfigManager.useSwiftUIDashboard = newValue
+
+ if newValue {
+ clashWebWindowController?.close()
+ } else {
deinitNotifications()
dashboardWindowController?.close()
- } else {
- clashWebWindowController?.close()
}
}
}
var dashboardWindowController: DashboardWindowController?
#else
- let enableSwiftUI = false
- var useYacd = true
+ let useSwiftUI = false
#endif
private var disposables = [Disposable]()
@@ -45,12 +50,12 @@ class DashboardManager: NSObject {
#if SwiftUI_Version
initNotifications()
- if useYacd {
- dashboardWindowController = nil
- showWebWindow(sender)
- } else {
+ if useSwiftUI {
clashWebWindowController = nil
showSwiftUIWindow(sender)
+ } else {
+ dashboardWindowController = nil
+ showWebWindow(sender)
}
#else
showWebWindow(sender)
@@ -97,7 +102,7 @@ extension DashboardManager {
}
func initNotifications() {
- guard !useYacd, disposables.count == 0 else { return }
+ guard useSwiftUI, disposables.count == 0 else { return }
let n1 = NotificationCenter.default.rx.notification(.configFileChange).subscribe {
[weak self] _ in
diff --git a/ClashX/ViewControllers/Settings/MetaPrefs.storyboard b/ClashX/ViewControllers/Settings/MetaPrefs.storyboard
new file mode 100644
index 000000000..afacfa16c
--- /dev/null
+++ b/ClashX/ViewControllers/Settings/MetaPrefs.storyboard
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ClashX/ViewControllers/Settings/MetaPrefsViewController.swift b/ClashX/ViewControllers/Settings/MetaPrefsViewController.swift
new file mode 100644
index 000000000..b4249db1c
--- /dev/null
+++ b/ClashX/ViewControllers/Settings/MetaPrefsViewController.swift
@@ -0,0 +1,161 @@
+//
+// MetaPrefsViewController.swift
+// ClashX Meta
+//
+// Copyright © 2023 west2online. All rights reserved.
+//
+
+import Cocoa
+
+class MetaPrefsViewController: NSViewController {
+ // Meta Setting
+ @IBOutlet var hideUnselectableButton: NSButton!
+
+ @IBAction func hideUnselectable(_ sender: NSButton) {
+ var newState = NSControl.StateValue.off
+ switch sender.state {
+ case .off:
+ newState = .mixed
+ case .mixed:
+ newState = .on
+ case .on:
+ newState = .off
+ default:
+ return
+ }
+
+ sender.state = newState
+ MenuItemFactory.hideUnselectable = newState.rawValue
+ }
+
+ // Dashboard
+ @IBOutlet var useSwiftuiButton: NSButton!
+ @IBOutlet var useYacdButton: NSButton!
+ @IBOutlet var useXDButton: NSButton!
+
+ @IBAction func switchDashboard(_ sender: NSButton) {
+ switch sender {
+#if SwiftUI_Version
+ case useSwiftuiButton:
+ DashboardManager.shared.useSwiftUI = sender.state == .on
+#endif
+ case useYacdButton:
+ ConfigManager.useYacdDashboard = sender.state == .on
+ case useXDButton:
+ ConfigManager.useYacdDashboard = sender.state == .off
+ default:
+ break
+ }
+ initDashboardButtons()
+ }
+
+ // Alpha Core
+ @IBOutlet var useAlphaButton: NSButton!
+ @IBOutlet var alphaVersionTextField: NSTextField!
+ @IBOutlet var updateButton: NSButton!
+ @IBOutlet var updateProgressIndicator: NSProgressIndicator!
+ @IBOutlet var showAlphaButton: NSButton!
+
+
+ @IBAction func useAlphaMeta(_ sender: NSButton) {
+ if UserDefaults.standard.object(forKey: "useAlphaCore") as? Bool == nil {
+ let alert = NSAlert()
+ alert.messageText = NSLocalizedString("Alpha Meta core Warning", comment: "")
+ alert.alertStyle = .warning
+ alert.addButton(withTitle: NSLocalizedString("Continue", comment: ""))
+ alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
+ if alert.runModal() != .alertFirstButtonReturn {
+ return
+ }
+ }
+
+ let use = sender.state == .on
+ ConfigManager.useAlphaCore = use
+ }
+
+ @IBAction func updateAlpha(_ sender: NSButton) {
+ sender.isEnabled = false
+ updateProgressIndicator.isHidden = false
+ updateProgressIndicator.startAnimation(nil)
+ AlphaMetaDownloader.alphaAsset().then {
+ AlphaMetaDownloader.checkVersion($0)
+ }.then {
+ AlphaMetaDownloader.downloadCore($0)
+ }.then {
+ AlphaMetaDownloader.replaceCore($0)
+ }.done {
+ self.updateAlphaVersion($0)
+ let msg = NSLocalizedString("Version: ", comment: "") + $0
+ NSUserNotificationCenter.default.post(title: "Clash Meta Core", info: msg)
+ }.ensure {
+ sender.isEnabled = true
+ self.updateProgressIndicator.isHidden = true
+ self.updateProgressIndicator.stopAnimation(nil)
+ }.catch {
+ let error = $0 as? AlphaMetaDownloader.errors
+ NSUserNotificationCenter.default.post(title: "Clash Meta Core", info: error?.des() ?? "")
+ }
+ }
+
+ @IBAction func showAlphaInFinder(_ sender: NSButton) {
+ guard let u = Paths.alphaCorePath(),
+ FileManager.default.fileExists(atPath: u.path) else { return }
+ NSWorkspace.shared.activateFileViewerSelecting([u])
+ }
+
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ // Meta Setting
+ hideUnselectableButton.state = .init(rawValue: MenuItemFactory.hideUnselectable)
+
+ // Dashboard
+ initDashboardButtons()
+
+ // Alpha Core
+ useAlphaButton.state = ConfigManager.useAlphaCore ? .on : .off
+ updateProgressIndicator.isHidden = true
+ setAlphaVersion()
+ }
+
+ func initDashboardButtons() {
+ let useSwiftUI = DashboardManager.shared.useSwiftUI
+ let useYacd = ConfigManager.useYacdDashboard
+
+ useSwiftuiButton.state = useSwiftUI ? .on : .off
+ useYacdButton.state = useYacd ? .on : .off
+ useXDButton.state = useYacd ? .off : .on
+
+#if SwiftUI_Version
+ useSwiftuiButton.isEnabled = true
+#else
+ useSwiftuiButton.isEnabled = false
+#endif
+ useYacdButton.isEnabled = !useSwiftUI
+ useXDButton.isEnabled = !useSwiftUI
+ }
+
+ func setAlphaVersion() {
+ if let alphaCorePath = Paths.alphaCorePath(),
+ let delegate = NSApplication.shared.delegate as? AppDelegate,
+ let v = delegate.testMetaCore(alphaCorePath.path)?.version {
+ updateAlphaVersion(v)
+ } else {
+ updateAlphaVersion(nil)
+ }
+ }
+
+ func updateAlphaVersion(_ version: String?) {
+ let enable = version != nil
+ useAlphaButton.isEnabled = enable
+ showAlphaButton.isEnabled = enable
+ if let v = version {
+ alphaVersionTextField.stringValue = v
+ updateButton.title = NSLocalizedString("Update Alpha Meta core", comment: "")
+ } else {
+ alphaVersionTextField.stringValue = "none"
+ updateButton.title = NSLocalizedString("Download Meta core", comment: "")
+ }
+ }
+
+}
diff --git a/install_dependency.sh b/install_dependency.sh
index a43854e9e..438d3a04e 100755
--- a/install_dependency.sh
+++ b/install_dependency.sh
@@ -36,8 +36,16 @@ echo "install geoip"
curl -LO https://github.com/MetaCubeX/meta-rules-dat/raw/release/geoip.dat
gzip geoip.dat
mv geoip.dat.gz ./ClashX/Resources/geoip.dat.gz
-echo "install dashboard"
+
+
+echo "install yacd dashboard"
cd ClashX/Resources
-git clone -b gh-pages https://github.com/MetaCubeX/yacd.git dashboard
-cd dashboard
+git clone -b gh-pages https://github.com/MetaCubeX/yacd.git dashboard/yacd
+cd dashboard/yacd
rm -rf *.webmanifest *.js CNAME .git
+cd ../../
+
+echo "install XD dashboard"
+git clone -b gh-pages https://github.com/metacubex/metacubexd.git dashboard/xd
+cd dashboard/xd
+rm -rf *.webmanifest CNAME .git
\ No newline at end of file
From df1ff5049fd0364817fdf1b0894b338f0867e34b Mon Sep 17 00:00:00 2001
From: mrFq1 <1xxbx0il0@mozmail.com>
Date: Sun, 8 Oct 2023 15:57:14 +0800
Subject: [PATCH 6/6] misc: restart tips
---
.../Settings/MetaPrefs.storyboard | 75 +++++++++++++++----
1 file changed, 62 insertions(+), 13 deletions(-)
diff --git a/ClashX/ViewControllers/Settings/MetaPrefs.storyboard b/ClashX/ViewControllers/Settings/MetaPrefs.storyboard
index afacfa16c..8f4a8477f 100644
--- a/ClashX/ViewControllers/Settings/MetaPrefs.storyboard
+++ b/ClashX/ViewControllers/Settings/MetaPrefs.storyboard
@@ -170,8 +170,20 @@
+
+
+
-
+
-
-
-
@@ -240,12 +240,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+