diff --git a/ShadowsocksX-NG2/Domain/Plugin/ManagedPluginProviding.swift b/ShadowsocksX-NG2/Domain/Plugin/ManagedPluginProviding.swift index 0bef3747..b682f16c 100644 --- a/ShadowsocksX-NG2/Domain/Plugin/ManagedPluginProviding.swift +++ b/ShadowsocksX-NG2/Domain/Plugin/ManagedPluginProviding.swift @@ -45,6 +45,8 @@ struct ManagedPluginInfo: Equatable, Sendable { let license: String /// 构建期 Developer ID 重签的 identifier(`.plugin.`)。 let signIdentifier: String + /// 内置插件在没有额外本地参数时也会传递的启动参数。 + let defaultArguments: [String] } /// 本版本受管集:固定版本的 v2ray-plugin 与 Cloak 客户端。 @@ -59,7 +61,8 @@ enum ManagedPluginCatalog { projectURL: "https://github.com/shadowsocks/v2ray-plugin", release: "v1.4.0", license: "MIT", - signIdentifier: "com.qiuyuzhou.ShadowsocksX-NG2.plugin.v2ray-plugin"), + signIdentifier: "com.qiuyuzhou.ShadowsocksX-NG2.plugin.v2ray-plugin", + defaultArguments: ["-disableAccessLog"]), ManagedPluginInfo( program: "ck-client", names: ["cloak", "cloak-v2"], @@ -68,7 +71,8 @@ enum ManagedPluginCatalog { projectURL: "https://github.com/cbeuw/Cloak", release: "v2.12.0", license: "GPL-3.0", - signIdentifier: "com.qiuyuzhou.ShadowsocksX-NG2.plugin.ck-client"), + signIdentifier: "com.qiuyuzhou.ShadowsocksX-NG2.plugin.ck-client", + defaultArguments: []), ] static func info(forProgram program: String) -> ManagedPluginInfo? { @@ -92,7 +96,7 @@ struct BundleManagedPluginProvider: PluginExecutableResolving { .appendingPathComponent("Contents/Helpers/Plugins") .appendingPathComponent(info.executableName) guard fileManager.isExecutableFile(atPath: url.path) else { return nil } - return ResolvedPlugin(path: url.path, arguments: []) + return ResolvedPlugin(path: url.path, arguments: info.defaultArguments) } } diff --git a/ShadowsocksX-NG2/Domain/Plugin/PluginCatalogSnapshot.swift b/ShadowsocksX-NG2/Domain/Plugin/PluginCatalogSnapshot.swift index 4e5b0899..45f5f10d 100644 --- a/ShadowsocksX-NG2/Domain/Plugin/PluginCatalogSnapshot.swift +++ b/ShadowsocksX-NG2/Domain/Plugin/PluginCatalogSnapshot.swift @@ -54,13 +54,16 @@ struct PluginCatalogSnapshot: PluginExecutableResolving, Equatable, Sendable { ?? managed.bundleURL .appendingPathComponent("Contents/Helpers/Plugins") .appendingPathComponent(info?.executableName ?? program).path + let arguments = + user?.arguments + ?? info.map { + $0.defaultArguments + (configuration.managedArguments[$0.program] ?? []) + } ?? [] return Entry( program: program, path: path, source: source, availability: mappingsUnreadable ? .unreadable : Self.availability(at: path, fileManager: managed.fileManager), - managedInfo: source == .managed ? info : nil, - arguments: user?.arguments ?? info.flatMap { configuration.managedArguments[$0.program] } - ?? [], + managedInfo: source == .managed ? info : nil, arguments: arguments, mode: user?.mode ?? info.flatMap { configuration.managedModes[$0.program] } ?? .tcpOnly, recordID: user?.id) } @@ -74,7 +77,8 @@ struct PluginCatalogSnapshot: PluginExecutableResolving, Equatable, Sendable { program: info.program, path: path, source: .managed, availability: mappingsUnreadable ? .unreadable : Self.availability(at: path, fileManager: managed.fileManager), - managedInfo: info, arguments: configuration.managedArguments[info.program] ?? [], + managedInfo: info, + arguments: info.defaultArguments + (configuration.managedArguments[info.program] ?? []), mode: configuration.managedModes[info.program] ?? .tcpOnly) ) })