Update On Tue May 27 20:37:11 CEST 2025

This commit is contained in:
github-action[bot]
2025-05-27 20:37:12 +02:00
parent b4f16385aa
commit e252910be8
3135 changed files with 138418 additions and 166021 deletions

View File

@@ -483,14 +483,10 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-resources.sh\"\n";
@@ -504,14 +500,10 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-V2rayU/Pods-V2rayU-frameworks.sh\"\n";

View File

@@ -427,14 +427,37 @@ class ImportUri {
v2ray.serverTrojan = svr
v2ray.enableMux = false
v2ray.serverProtocol = V2rayProtocolOutbound.trojan.rawValue
// tcp
v2ray.streamNetwork = "tcp"
v2ray.streamSecurity = trojan.security
v2ray.securityTls.allowInsecure = true
v2ray.securityTls.serverName = trojan.sni // default tls sni
v2ray.securityTls.fingerprint = trojan.fp
v2ray.serverProtocol = V2rayProtocolOutbound.trojan.rawValue
switch trojan.network {
case "h2","http":
v2ray.streamNetwork = trojan.network
v2ray.streamH2.host = [trojan.netHost]
v2ray.streamH2.path = trojan.netPath
case "ws":
v2ray.streamNetwork = "ws"
v2ray.streamWs.path = trojan.netPath
v2ray.streamWs.headers.host = trojan.netHost
case "grpc":
v2ray.streamNetwork = "grpc"
v2ray.streamGrpc.serviceName = trojan.netPath
v2ray.streamGrpc.multiMode = true // v2rayN
default:
v2ray.streamNetwork = "tcp"
v2ray.streamTcp.header.type = trojan.headerType
if v2ray.streamTcp.header.type == "http" {
var tcpReq = TcpSettingHeaderRequest()
tcpReq.path = [trojan.netPath]
tcpReq.headers.host = [trojan.netHost]
v2ray.streamTcp.header.request = tcpReq
}
}
// check is valid
v2ray.checkManualValid()
if v2ray.isValid {

View File

@@ -206,23 +206,34 @@ class MenuController: NSObject, NSMenuDelegate {
}
// subscribe items
for (itemKey, menu) in groupMenus {
if itemKey == "default" {
continue
// ,使
if groupMenus.count > 1 {
for (itemKey, menu) in groupMenus {
if itemKey == "default" {
continue
}
let newGroup: NSMenuItem = NSMenuItem()
var groupTagName = "🌏 订阅"
if let sub = V2raySubItem.load(name: itemKey) {
groupTagName = "🌏 " + sub.remark + " (\(menu.items.count))"
}
newGroup.submenu = menu
newGroup.title = groupTagName
newGroup.target = self
newGroup.isEnabled = true
if chooseGroup == itemKey {
newGroup.state = NSControl.StateValue.on
}
_subMenus.addItem(newGroup)
}
let newGroup: NSMenuItem = NSMenuItem()
var groupTagName = "🌏 订阅"
if let sub = V2raySubItem.load(name: itemKey) {
groupTagName = "🌏 " + sub.remark + " (\(menu.items.count))"
} else {
// only one group, add all items to the first menu
for (_, subMenus) in groupMenus {
for menu in subMenus.items {
subMenus.removeItem(menu) //
_subMenus.addItem(menu)
}
}
newGroup.submenu = menu
newGroup.title = groupTagName
newGroup.target = self
newGroup.isEnabled = true
if chooseGroup == itemKey {
newGroup.state = NSControl.StateValue.on
}
_subMenus.addItem(newGroup)
}
if validCount == 0 {

View File

@@ -184,6 +184,7 @@ class ShareUri {
ss.security = "tls"
ss.fp = self.v2ray.securityTls.fingerprint
ss.flow = self.v2ray.serverTrojan.flow
ss.sni = self.v2ray.securityTls.serverName
self.uri = ss.encode()
self.error = ss.error

View File

@@ -418,6 +418,7 @@ class ShadowsockRUri: ShadowsockUri {
// trojan
class TrojanUri {
var host: String = ""
var path: String = ""
var port: Int = 443
var password: String = ""
var remark: String = ""
@@ -426,7 +427,11 @@ class TrojanUri {
var security: String = "tls"
var fp: String = ""
var error: String = ""
var network: String = "tcp" // network type: tcp,ws,h2,grpc,domainsocket
var netHost: String = "" // host for ws,h2
var netPath: String = "" // path for ws,h2,grpc,ds,kcp
var headerType: String = "none" // header type: none,http,wireguard,srtp,utp,wechat-video,dtls
// trojan://pass@remote_host:443?flow=xtls-rprx-origin&security=xtls&sni=sni&host=remote_host#trojan
func encode() -> String {
var uri = URLComponents()
@@ -439,6 +444,11 @@ class TrojanUri {
URLQueryItem(name: "security", value: self.security),
URLQueryItem(name: "sni", value: self.sni),
URLQueryItem(name: "fp", value: self.fp),
URLQueryItem(name: "type", value: self.network),
URLQueryItem(name: "host", value: self.netHost),
URLQueryItem(name: "path", value: self.netPath),
URLQueryItem(name: "headerType", value: self.headerType),
URLQueryItem(name: "serviceName", value: self.netPath)
]
return (uri.url?.absoluteString ?? "") + "#" + self.remark
}
@@ -474,6 +484,21 @@ class TrojanUri {
case "fp":
self.fp = item.value as! String
break
case "type":
self.network = item.value as! String
break
case "path":
self.netPath = item.value as! String
break
case "host":
self.netHost = item.value as! String
break
case "serviceName":
self.netPath = item.value as! String
break
case "headerType":
self.headerType = item.value as! String
break
default:
break
}

View File

@@ -14,7 +14,7 @@ let RoutingRuleCn = "routing.cn"
let RoutingRuleLANAndCn = "routing.lanAndCn"
let defaultRuleCn = Dictionary(uniqueKeysWithValues: [
(RoutingRuleGlobal, "🌏全局"),
(RoutingRuleGlobal, "🌏 全局"),
(RoutingRuleLAN, "🌏 绕过局域网"),
(RoutingRuleCn, "🌏 绕过中国大陆"),
(RoutingRuleLANAndCn, "🌏 绕过局域网和中国大陆")