Move frameworks from extemsion to host app
This commit is contained in:
parent
8591d4e96c
commit
b20e25f052
14 changed files with 172 additions and 138 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -24,6 +24,10 @@ ui_*.h
|
||||||
Makefile*
|
Makefile*
|
||||||
*build-*
|
*build-*
|
||||||
|
|
||||||
|
# fastlane
|
||||||
|
client/fastlane/report.xml
|
||||||
|
client/fastlane/build/*
|
||||||
|
|
||||||
# Qt-es
|
# Qt-es
|
||||||
client/Release-iphoneos/
|
client/Release-iphoneos/
|
||||||
client/Debug-iphoneos/
|
client/Debug-iphoneos/
|
||||||
|
|
|
@ -5,52 +5,52 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000364">
|
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000214">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="1: Switch to certificates lane" time="0.000171">
|
<testcase classname="fastlane.lanes" name="1: Switch to certificates lane" time="0.000144">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="2: match" time="3.198096">
|
<testcase classname="fastlane.lanes" name="2: match" time="3.322423">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="3: notification" time="0.23742">
|
<testcase classname="fastlane.lanes" name="3: notification" time="0.236243">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="4: clean_build_artifacts" time="0.000377">
|
<testcase classname="fastlane.lanes" name="4: clean_build_artifacts" time="0.000632">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="5: build_app" time="233.201786">
|
<testcase classname="fastlane.lanes" name="5: build_app" time="231.210464">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="6: testflight" time="77.518086">
|
<testcase classname="fastlane.lanes" name="6: testflight" time="68.731283">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="7: get_version_number" time="0.120716">
|
<testcase classname="fastlane.lanes" name="7: get_version_number" time="0.121762">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="8: get_build_number" time="1.105765">
|
<testcase classname="fastlane.lanes" name="8: get_build_number" time="1.022995">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="9: increment_build_number" time="2.668868">
|
<testcase classname="fastlane.lanes" name="9: increment_build_number" time="2.417907">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>5</string>
|
<string>9</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>$(MARKETING_VERSION)</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>5</string>
|
<string>9</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
|
|
@ -76,6 +76,7 @@ static void SocketCallback(CFSocketRef socket, CFSocketCallBackType type, CFData
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[self invalidateSocketsIfNeeded];
|
[self invalidateSocketsIfNeeded];
|
||||||
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
# pragma mark - Socket configuration
|
# pragma mark - Socket configuration
|
||||||
|
|
|
@ -3,7 +3,7 @@ import NetworkExtension
|
||||||
import os
|
import os
|
||||||
import Darwin
|
import Darwin
|
||||||
import OpenVPNAdapter
|
import OpenVPNAdapter
|
||||||
import Tun2socks
|
//import Tun2socks
|
||||||
|
|
||||||
enum TunnelProtoType: String {
|
enum TunnelProtoType: String {
|
||||||
case wireguard, openvpn, shadowsocks, none
|
case wireguard, openvpn, shadowsocks, none
|
||||||
|
@ -58,17 +58,17 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
private var openVPNConfig: Data? = nil
|
private var openVPNConfig: Data? = nil
|
||||||
var ssCompletion: ShadowsocksProxyCompletion = nil
|
var ssCompletion: ShadowsocksProxyCompletion = nil
|
||||||
|
|
||||||
private var ssProvider: ShadowSocksTunnel? = nil
|
// private var ssProvider: ShadowSocksTunnel? = nil
|
||||||
private var ssLocalPort: Int = 8585
|
// private var ssLocalPort: Int = 8585
|
||||||
private var ssRemoteHost = ""
|
// private var ssRemoteHost = ""
|
||||||
private var leafProvider: TunProvider? = nil
|
// private var leafProvider: TunProvider? = nil
|
||||||
|
//
|
||||||
private var tun2socksTunnel: Tun2socksOutlineTunnelProtocol? = nil
|
// private var tun2socksTunnel: Tun2socksOutlineTunnelProtocol? = nil
|
||||||
private var tun2socksWriter: Tun2socksTunWriter? = nil
|
// private var tun2socksWriter: Tun2socksTunWriter? = nil
|
||||||
private let processQueue = DispatchQueue(label: Constants.processQueueName)
|
// private let processQueue = DispatchQueue(label: Constants.processQueueName)
|
||||||
private var connection: NWTCPConnection? = nil
|
// private var connection: NWTCPConnection? = nil
|
||||||
private var session: NWUDPSession? = nil
|
// private var session: NWUDPSession? = nil
|
||||||
private var observer: AnyObject?
|
// private var observer: AnyObject?
|
||||||
|
|
||||||
let vpnReachability = OpenVPNReachability()
|
let vpnReachability = OpenVPNReachability()
|
||||||
|
|
||||||
|
@ -99,7 +99,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
case .openvpn:
|
case .openvpn:
|
||||||
startOpenVPN(completionHandler: completionHandler)
|
startOpenVPN(completionHandler: completionHandler)
|
||||||
case .shadowsocks:
|
case .shadowsocks:
|
||||||
startShadowSocks(completionHandler: completionHandler)
|
break
|
||||||
|
// startShadowSocks(completionHandler: completionHandler)
|
||||||
case .none:
|
case .none:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -112,7 +113,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
case .openvpn:
|
case .openvpn:
|
||||||
stopOpenVPN(with: reason, completionHandler: completionHandler)
|
stopOpenVPN(with: reason, completionHandler: completionHandler)
|
||||||
case .shadowsocks:
|
case .shadowsocks:
|
||||||
stopShadowSocks(with: reason, completionHandler: completionHandler)
|
break
|
||||||
|
// stopShadowSocks(with: reason, completionHandler: completionHandler)
|
||||||
case .none:
|
case .none:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -125,7 +127,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
case .openvpn:
|
case .openvpn:
|
||||||
handleWireguardAppMessage(messageData, completionHandler: completionHandler)
|
handleWireguardAppMessage(messageData, completionHandler: completionHandler)
|
||||||
case .shadowsocks:
|
case .shadowsocks:
|
||||||
handleShadowSocksAppMessage(messageData, completionHandler: completionHandler)
|
break
|
||||||
|
// handleShadowSocksAppMessage(messageData, completionHandler: completionHandler)
|
||||||
case .none:
|
case .none:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -195,7 +198,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
setupAndlaunchOpenVPN(withConfig: ovpnConfiguration, completionHandler: completionHandler)
|
setupAndlaunchOpenVPN(withConfig: ovpnConfiguration, completionHandler: completionHandler)
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
private func startShadowSocks(completionHandler: @escaping (Error?) -> Void) {
|
private func startShadowSocks(completionHandler: @escaping (Error?) -> Void) {
|
||||||
guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol,
|
guard let protocolConfiguration = self.protocolConfiguration as? NETunnelProviderProtocol,
|
||||||
let providerConfiguration = protocolConfiguration.providerConfiguration,
|
let providerConfiguration = protocolConfiguration.providerConfiguration,
|
||||||
|
@ -212,7 +215,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
// startTun2SocksTunnel(completion: completionHandler)
|
// startTun2SocksTunnel(completion: completionHandler)
|
||||||
self.startLeafRedirector(completion: completionHandler)
|
self.startLeafRedirector(completion: completionHandler)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
private func stopWireguard(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
private func stopWireguard(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
||||||
wg_log(.info, staticMessage: "Stopping tunnel")
|
wg_log(.info, staticMessage: "Stopping tunnel")
|
||||||
|
|
||||||
|
@ -240,7 +243,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
ovpnAdapter.disconnect()
|
ovpnAdapter.disconnect()
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
private func stopShadowSocks(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
private func stopShadowSocks(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
||||||
stopOpenVPN(with: reason) { [weak self] in
|
stopOpenVPN(with: reason) { [weak self] in
|
||||||
guard let `self` = self else { return }
|
guard let `self` = self else { return }
|
||||||
|
@ -249,7 +252,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
self.stopLeafRedirector(completion: completionHandler)
|
self.stopLeafRedirector(completion: completionHandler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
private func handleWireguardAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {
|
private func handleWireguardAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {
|
||||||
guard let completionHandler = completionHandler else { return }
|
guard let completionHandler = completionHandler else { return }
|
||||||
if messageData.count == 1 && messageData[0] == 0 {
|
if messageData.count == 1 && messageData[0] == 0 {
|
||||||
|
@ -294,7 +297,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
private func handleShadowSocksAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {
|
private func handleShadowSocksAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) {
|
||||||
guard let completionHandler = completionHandler else { return }
|
guard let completionHandler = completionHandler else { return }
|
||||||
if let configString = String(data: messageData, encoding: .utf8) {
|
if let configString = String(data: messageData, encoding: .utf8) {
|
||||||
|
@ -303,9 +306,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
completionHandler(messageData)
|
completionHandler(messageData)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// MARK: -- Tun2sock provider methods
|
// MARK: -- Tun2sock provider methods
|
||||||
|
/*
|
||||||
private func startTun2SocksTunnel(completion: @escaping (Error?) -> Void) {
|
private func startTun2SocksTunnel(completion: @escaping (Error?) -> Void) {
|
||||||
guard let ssConfiguration = self.shadowSocksConfig,
|
guard let ssConfiguration = self.shadowSocksConfig,
|
||||||
let ovpnConfiguration = self.openVPNConfig,
|
let ovpnConfiguration = self.openVPNConfig,
|
||||||
|
@ -420,9 +423,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
var insettings: [String: Any] = .init()
|
var insettings: [String: Any] = .init()
|
||||||
insettings["name"] = iface
|
insettings["name"] = iface
|
||||||
insettings["address"] = "10.8.0.4"
|
insettings["address"] = "127.0.0.2"
|
||||||
insettings["netmask"] = "255.255.255.0"
|
insettings["netmask"] = "255.255.255.0"
|
||||||
insettings["gateway"] = "10.8.0.1"
|
insettings["gateway"] = "127.0.0.1"
|
||||||
insettings["mtu"] = 1600
|
insettings["mtu"] = 1600
|
||||||
|
|
||||||
var inbounds: [String: Any] = .init()
|
var inbounds: [String: Any] = .init()
|
||||||
|
@ -469,22 +472,15 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func startLeafRedirector(completion: @escaping (Error?) -> Void) {
|
private func startLeafRedirector(completion: @escaping (Error?) -> Void) {
|
||||||
let ipv4settings: NEIPv4Settings = .init(addresses: ["10.8.0.4"], subnetMasks: ["255.255.255.0"])
|
let ipv4settings: NEIPv4Settings = .init(addresses: ["127.0.0.2"], subnetMasks: ["255.255.255.0"])
|
||||||
ipv4settings.includedRoutes = [.default()]
|
ipv4settings.includedRoutes = [.default()]
|
||||||
ipv4settings.excludedRoutes = []
|
ipv4settings.excludedRoutes = []
|
||||||
|
|
||||||
let dnsSettings: NEDNSSettings = .init(servers: ["1.1.1.1", "9.9.9.9", "208.67.222.222", "208.67.220.220"])
|
let dnsSettings: NEDNSSettings = .init(servers: ["1.1.1.1", "9.9.9.9", "208.67.222.222", "208.67.220.220"])
|
||||||
dnsSettings.matchDomains = []
|
dnsSettings.matchDomains = []
|
||||||
let proxySettings: NEProxySettings = .init()
|
let settings: NEPacketTunnelNetworkSettings = .init(tunnelRemoteAddress: "127.0.0.1")
|
||||||
proxySettings.httpEnabled = true
|
|
||||||
proxySettings.httpServer = .init(address: "localhost", port: 8585)
|
|
||||||
proxySettings.httpsEnabled = true
|
|
||||||
proxySettings.httpsServer = .init(address: "localhost", port: 8585)
|
|
||||||
proxySettings.excludeSimpleHostnames = true
|
|
||||||
let settings: NEPacketTunnelNetworkSettings = .init(tunnelRemoteAddress: "10.8.0.1")
|
|
||||||
settings.ipv4Settings = ipv4settings
|
settings.ipv4Settings = ipv4settings
|
||||||
settings.dnsSettings = dnsSettings
|
settings.dnsSettings = dnsSettings
|
||||||
settings.proxySettings = proxySettings
|
|
||||||
settings.mtu = 1600
|
settings.mtu = 1600
|
||||||
|
|
||||||
self.setTunnelNetworkSettings(settings) { tunError in
|
self.setTunnelNetworkSettings(settings) { tunError in
|
||||||
|
@ -567,17 +563,22 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func startAndHandleTunnelOverSS(completionHandler: @escaping (Error?) -> Void) {
|
private func startAndHandleTunnelOverSS(completionHandler: @escaping (Error?) -> Void) {
|
||||||
let ipv4settings: NEIPv4Settings = .init(addresses: ["192.0.2.2"], subnetMasks: ["255.255.255.0"])
|
// let ipv4settings: NEIPv4Settings = .init(addresses: ["192.0.2.2"], subnetMasks: ["255.255.255.0"])
|
||||||
ipv4settings.includedRoutes = [.default()]
|
// let addedRoute1 = NEIPv4Route(destinationAddress: "0.0.0.0", subnetMask: "0.0.0.0")
|
||||||
ipv4settings.excludedRoutes = []
|
// addedRoute1.gatewayAddress = "192.0.2.1"
|
||||||
|
// ipv4settings.includedRoutes = [addedRoute1]
|
||||||
|
// ipv4settings.excludedRoutes = []
|
||||||
|
//
|
||||||
|
// let dnsSettings: NEDNSSettings = .init(servers: ["1.1.1.1", "9.9.9.9", "208.67.222.222", "208.67.220.220"])
|
||||||
|
// let settings: NEPacketTunnelNetworkSettings = .init(tunnelRemoteAddress: "192.0.2.1")
|
||||||
|
// settings.ipv4Settings = ipv4settings
|
||||||
|
// settings.dnsSettings = dnsSettings
|
||||||
|
// settings.mtu = 1600
|
||||||
|
//
|
||||||
|
// setTunnelNetworkSettings(settings) { tunError in
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
let dnsSettings: NEDNSSettings = .init(servers: ["1.1.1.1", "9.9.9.9", "208.67.222.222", "208.67.220.220"])
|
|
||||||
let settings: NEPacketTunnelNetworkSettings = .init(tunnelRemoteAddress: "192.0.2.1")
|
|
||||||
settings.ipv4Settings = ipv4settings
|
|
||||||
settings.dnsSettings = dnsSettings
|
|
||||||
settings.mtu = 1600
|
|
||||||
|
|
||||||
setTunnelNetworkSettings(settings) { tunError in
|
|
||||||
let ifaces = Interface.allInterfaces()
|
let ifaces = Interface.allInterfaces()
|
||||||
.filter { $0.family == .ipv4 }
|
.filter { $0.family == .ipv4 }
|
||||||
.map { iface in iface.name }
|
.map { iface in iface.name }
|
||||||
|
@ -585,10 +586,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
wg_log(.error, message: "Available TUN Interfaces: \(ifaces)")
|
wg_log(.error, message: "Available TUN Interfaces: \(ifaces)")
|
||||||
let endpoint = NWHostEndpoint(hostname: "127.0.0.1", port: "\(self.ssLocalPort)")
|
let endpoint = NWHostEndpoint(hostname: "127.0.0.1", port: "\(self.ssLocalPort)")
|
||||||
self.session = self.createUDPSession(to: endpoint, from: nil)
|
self.session = self.createUDPSession(to: endpoint, from: nil)
|
||||||
|
self.setupWriteToFlow()
|
||||||
self.observer = self.session!.observe(\.state, options: [.new]) { conn, _ in
|
self.observer = self.session!.observe(\.state, options: [.new]) { conn, _ in
|
||||||
switch conn.state {
|
switch conn.state {
|
||||||
case .ready:
|
case .ready:
|
||||||
self.setupWriteToFlow()
|
|
||||||
self.readFromFlow()
|
self.readFromFlow()
|
||||||
completionHandler(nil)
|
completionHandler(nil)
|
||||||
case .cancelled, .failed, .invalid:
|
case .cancelled, .failed, .invalid:
|
||||||
|
@ -601,7 +602,6 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private func setupAndHandleOpenVPNOverSSConnection(withConfig ovpnConfig: Data) {
|
private func setupAndHandleOpenVPNOverSSConnection(withConfig ovpnConfig: Data) {
|
||||||
let endpoint = NWHostEndpoint(hostname: "127.0.0.1", port: "\(self.ssLocalPort)")
|
let endpoint = NWHostEndpoint(hostname: "127.0.0.1", port: "\(self.ssLocalPort)")
|
||||||
|
@ -685,7 +685,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
completionHandler()
|
completionHandler()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
private func setupAndlaunchOpenVPN(withConfig ovpnConfiguration: Data, withShadowSocks viaSS: Bool = false, completionHandler: @escaping (Error?) -> Void) {
|
private func setupAndlaunchOpenVPN(withConfig ovpnConfiguration: Data, withShadowSocks viaSS: Bool = false, completionHandler: @escaping (Error?) -> Void) {
|
||||||
wg_log(.info, message: "Inside setupAndlaunchOpenVPN()")
|
wg_log(.info, message: "Inside setupAndlaunchOpenVPN()")
|
||||||
let str = String(decoding: ovpnConfiguration, as: UTF8.self)
|
let str = String(decoding: ovpnConfiguration, as: UTF8.self)
|
||||||
|
@ -798,7 +798,7 @@ extension WireGuardLogLevel {
|
||||||
|
|
||||||
extension NEPacketTunnelFlow: OpenVPNAdapterPacketFlow {}
|
extension NEPacketTunnelFlow: OpenVPNAdapterPacketFlow {}
|
||||||
|
|
||||||
extension NEPacketTunnelFlow: ShadowSocksAdapterPacketFlow {}
|
/* extension NEPacketTunnelFlow: ShadowSocksAdapterPacketFlow {} */
|
||||||
|
|
||||||
extension PacketTunnelProvider: OpenVPNAdapterDelegate {
|
extension PacketTunnelProvider: OpenVPNAdapterDelegate {
|
||||||
|
|
||||||
|
@ -877,7 +877,7 @@ extension PacketTunnelProvider: OpenVPNAdapterDelegate {
|
||||||
wg_log(.info, message: logMessage)
|
wg_log(.info, message: logMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
extension PacketTunnelProvider: Tun2socksTunWriterProtocol {
|
extension PacketTunnelProvider: Tun2socksTunWriterProtocol {
|
||||||
func write(_ p0: Data?, n: UnsafeMutablePointer<Int>?) throws {
|
func write(_ p0: Data?, n: UnsafeMutablePointer<Int>?) throws {
|
||||||
if let packets = p0 {
|
if let packets = p0 {
|
||||||
|
@ -887,3 +887,4 @@ extension PacketTunnelProvider: Tun2socksTunWriterProtocol {
|
||||||
|
|
||||||
func close() throws {}
|
func close() throws {}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
|
@ -297,7 +297,7 @@ public class IOSVpnProtocolImpl : NSObject {
|
||||||
ovpnConfig: String,
|
ovpnConfig: String,
|
||||||
failureCallback: @escaping () -> Void) {
|
failureCallback: @escaping () -> Void) {
|
||||||
Logger.global?.log(message: "Connecting")
|
Logger.global?.log(message: "Connecting")
|
||||||
assert(tunnel != nil)
|
// assert(tunnel != nil)
|
||||||
|
|
||||||
self.openVPNConfig = ovpnConfig
|
self.openVPNConfig = ovpnConfig
|
||||||
self.shadowSocksConfig = ssConfig
|
self.shadowSocksConfig = ssConfig
|
||||||
|
@ -316,7 +316,7 @@ public class IOSVpnProtocolImpl : NSObject {
|
||||||
|
|
||||||
@objc func connect(ovpnConfig: String, failureCallback: @escaping () -> Void) {
|
@objc func connect(ovpnConfig: String, failureCallback: @escaping () -> Void) {
|
||||||
Logger.global?.log(message: "Connecting")
|
Logger.global?.log(message: "Connecting")
|
||||||
assert(tunnel != nil)
|
// assert(tunnel != nil)
|
||||||
|
|
||||||
let addr: String = ovpnConfig
|
let addr: String = ovpnConfig
|
||||||
.splitToArray(separator: "\n", trimmingCharacters: nil)
|
.splitToArray(separator: "\n", trimmingCharacters: nil)
|
||||||
|
@ -332,7 +332,7 @@ public class IOSVpnProtocolImpl : NSObject {
|
||||||
|
|
||||||
@objc func connect(dnsServer: String, serverIpv6Gateway: String, serverPublicKey: String, presharedKey: String, serverIpv4AddrIn: String, serverPort: Int, allowedIPAddressRanges: Array<VPNIPAddressRange>, ipv6Enabled: Bool, reason: Int, failureCallback: @escaping () -> Void) {
|
@objc func connect(dnsServer: String, serverIpv6Gateway: String, serverPublicKey: String, presharedKey: String, serverIpv4AddrIn: String, serverPort: Int, allowedIPAddressRanges: Array<VPNIPAddressRange>, ipv6Enabled: Bool, reason: Int, failureCallback: @escaping () -> Void) {
|
||||||
Logger.global?.log(message: "Connecting")
|
Logger.global?.log(message: "Connecting")
|
||||||
assert(tunnel != nil)
|
// assert(tunnel != nil)
|
||||||
|
|
||||||
// Let's remove the previous config if it exists.
|
// Let's remove the previous config if it exists.
|
||||||
(tunnel?.protocolConfiguration as? NETunnelProviderProtocol)?.destroyConfigurationReference()
|
(tunnel?.protocolConfiguration as? NETunnelProviderProtocol)?.destroyConfigurationReference()
|
||||||
|
@ -526,7 +526,7 @@ public class IOSVpnProtocolImpl : NSObject {
|
||||||
|
|
||||||
@objc func checkStatus(callback: @escaping (String, String, String) -> Void) {
|
@objc func checkStatus(callback: @escaping (String, String, String) -> Void) {
|
||||||
Logger.global?.log(message: "Check status")
|
Logger.global?.log(message: "Check status")
|
||||||
assert(tunnel != nil)
|
// assert(tunnel != nil)
|
||||||
|
|
||||||
let protoType = (tunnel!.localizedDescription ?? "").toTunnelType
|
let protoType = (tunnel!.localizedDescription ?? "").toTunnelType
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
import ShadowSocks
|
import ShadowSocks
|
||||||
|
|
||||||
import NetworkExtension
|
import NetworkExtension
|
||||||
import Darwin
|
import Darwin
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ private:
|
||||||
bool m_checkingStatus = false;
|
bool m_checkingStatus = false;
|
||||||
std::function<void(const QString&)> m_logCallback;
|
std::function<void(const QString&)> m_logCallback;
|
||||||
|
|
||||||
|
bool m_isChangingState = false;
|
||||||
|
|
||||||
void setupWireguardProtocol(const QtJson::JsonObject& result);
|
void setupWireguardProtocol(const QtJson::JsonObject& result);
|
||||||
void setupOpenVPNProtocol(const QtJson::JsonObject& result);
|
void setupOpenVPNProtocol(const QtJson::JsonObject& result);
|
||||||
void setupShadowSocksProtocol(const QtJson::JsonObject& result);
|
void setupShadowSocksProtocol(const QtJson::JsonObject& result);
|
||||||
|
|
|
@ -80,6 +80,9 @@ ErrorCode IOSVpnProtocol::start()
|
||||||
return InternalError;
|
return InternalError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_isChangingState)
|
||||||
|
return NoError;
|
||||||
|
|
||||||
QString protocol = result["protocol"].toString();
|
QString protocol = result["protocol"].toString();
|
||||||
|
|
||||||
if (!m_controller)
|
if (!m_controller)
|
||||||
|
@ -145,6 +148,7 @@ void IOSVpnProtocol::stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
[m_controller disconnect];
|
[m_controller disconnect];
|
||||||
|
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
});
|
});
|
||||||
|
@ -301,6 +305,7 @@ void IOSVpnProtocol::setupWireguardProtocol(const QtJson::JsonObject &result)
|
||||||
m_controller = nullptr;
|
m_controller = nullptr;
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Error);
|
emit connectionStateChanged(VpnConnectionState::Error);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -309,6 +314,7 @@ void IOSVpnProtocol::setupWireguardProtocol(const QtJson::JsonObject &result)
|
||||||
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Connected);
|
emit connectionStateChanged(VpnConnectionState::Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -317,6 +323,7 @@ void IOSVpnProtocol::setupWireguardProtocol(const QtJson::JsonObject &result)
|
||||||
[m_controller disconnect];
|
[m_controller disconnect];
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -330,12 +337,14 @@ void IOSVpnProtocol::setupWireguardProtocol(const QtJson::JsonObject &result)
|
||||||
if (a_connected) {
|
if (a_connected) {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Connected);
|
emit connectionStateChanged(Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
// emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
// });
|
m_isChangingState = false;
|
||||||
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,6 +371,7 @@ void IOSVpnProtocol::setupOpenVPNProtocol(const QtJson::JsonObject &result)
|
||||||
m_controller = nullptr;
|
m_controller = nullptr;
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Error);
|
emit connectionStateChanged(VpnConnectionState::Error);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -370,6 +380,7 @@ void IOSVpnProtocol::setupOpenVPNProtocol(const QtJson::JsonObject &result)
|
||||||
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Connected);
|
emit connectionStateChanged(VpnConnectionState::Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -378,6 +389,7 @@ void IOSVpnProtocol::setupOpenVPNProtocol(const QtJson::JsonObject &result)
|
||||||
// [m_controller disconnect];
|
// [m_controller disconnect];
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -391,12 +403,14 @@ void IOSVpnProtocol::setupOpenVPNProtocol(const QtJson::JsonObject &result)
|
||||||
if (a_connected) {
|
if (a_connected) {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Connected);
|
emit connectionStateChanged(Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
// emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
// });
|
m_isChangingState = false;
|
||||||
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,6 +439,7 @@ void IOSVpnProtocol::setupShadowSocksProtocol(const QtJson::JsonObject &result)
|
||||||
m_controller = nullptr;
|
m_controller = nullptr;
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Error);
|
emit connectionStateChanged(VpnConnectionState::Error);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -433,6 +448,7 @@ void IOSVpnProtocol::setupShadowSocksProtocol(const QtJson::JsonObject &result)
|
||||||
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
// QDateTime qtDate(QDateTime::fromNSDate(date));
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Connected);
|
emit connectionStateChanged(VpnConnectionState::Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -441,6 +457,7 @@ void IOSVpnProtocol::setupShadowSocksProtocol(const QtJson::JsonObject &result)
|
||||||
// [m_controller disconnect];
|
// [m_controller disconnect];
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
emit connectionStateChanged(VpnConnectionState::Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -454,12 +471,14 @@ void IOSVpnProtocol::setupShadowSocksProtocol(const QtJson::JsonObject &result)
|
||||||
if (a_connected) {
|
if (a_connected) {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Connected);
|
emit connectionStateChanged(Connected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
// emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
// });
|
m_isChangingState = false;
|
||||||
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,6 +535,7 @@ void IOSVpnProtocol::launchWireguardTunnel(const QtJson::JsonObject &result)
|
||||||
qDebug() << "Wireguard Protocol - connection failed";
|
qDebug() << "Wireguard Protocol - connection failed";
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -530,6 +550,7 @@ void IOSVpnProtocol::launchOpenVPNTunnel(const QtJson::JsonObject &result)
|
||||||
qDebug() << "IOSVPNProtocol (OpenVPN) - connection failed";
|
qDebug() << "IOSVPNProtocol (OpenVPN) - connection failed";
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
@ -546,6 +567,7 @@ void IOSVpnProtocol::launchShadowSocksTunnel(const QtJson::JsonObject &result) {
|
||||||
qDebug() << "IOSVPNProtocol (ShadowSocks) - connection failed";
|
qDebug() << "IOSVPNProtocol (ShadowSocks) - connection failed";
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
emit connectionStateChanged(Disconnected);
|
emit connectionStateChanged(Disconnected);
|
||||||
|
m_isChangingState = false;
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,10 +71,10 @@ class XCodeprojPatcher
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/3rd",
|
"$(PROJECT_DIR)/3rd",
|
||||||
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
|
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
|
||||||
"$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
|
# "$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
|
||||||
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
|
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
|
||||||
"$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
|
# "$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
|
||||||
"${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
|
# "${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
|
||||||
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
|
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -279,13 +279,14 @@ class XCodeprojPatcher
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/3rd",
|
"$(PROJECT_DIR)/3rd",
|
||||||
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
|
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
|
||||||
"$(PROJECT_DIR)/3rd/libleaf/include",
|
# "$(PROJECT_DIR)/3rd/libleaf/lib",
|
||||||
"$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
|
# "$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
|
||||||
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
|
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
|
||||||
"$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
|
# "$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
|
||||||
"${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
|
# "${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
|
||||||
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
|
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
|
||||||
]
|
]
|
||||||
|
# config.build_settings['LIBRARY_SEARCH_PATHS'] = [config.build_settings['LIBRARY_SEARCH_PATHS'], "$(PROJECT_DIR)/3rd/libleaf/lib"]
|
||||||
|
|
||||||
# Versions and names
|
# Versions and names
|
||||||
config.build_settings['MARKETING_VERSION'] ||= shortVersion
|
config.build_settings['MARKETING_VERSION'] ||= shortVersion
|
||||||
|
@ -370,17 +371,17 @@ class XCodeprojPatcher
|
||||||
'platforms/ios/iostunnel.swift',
|
'platforms/ios/iostunnel.swift',
|
||||||
'platforms/ios/ioslogger.swift',
|
'platforms/ios/ioslogger.swift',
|
||||||
'platforms/ios/iosinterface.swift',
|
'platforms/ios/iosinterface.swift',
|
||||||
'platforms/ios/ssprovider.swift',
|
# 'platforms/ios/ssprovider.swift',
|
||||||
'platforms/ios/iosglue.mm',
|
'platforms/ios/iosglue.mm',
|
||||||
'platforms/ios/ssconnectivity.h',
|
# 'platforms/ios/ssconnectivity.h',
|
||||||
'platforms/ios/ssconnectivity.m',
|
# 'platforms/ios/ssconnectivity.m',
|
||||||
'platforms/ios/iosopenvpn2ssadapter.h',
|
# 'platforms/ios/iosopenvpn2ssadapter.h',
|
||||||
'platforms/ios/iosopenvpn2ssadapter.m',
|
# 'platforms/ios/iosopenvpn2ssadapter.m',
|
||||||
'platforms/ios/sspacket.h',
|
# 'platforms/ios/sspacket.h',
|
||||||
'platforms/ios/sspacket.m',
|
# 'platforms/ios/sspacket.m',
|
||||||
'platforms/ios/ssadapterpacketflow.h',
|
# 'platforms/ios/ssadapterpacketflow.h',
|
||||||
'platforms/ios/tun2ssprovider.swift',
|
# 'platforms/ios/tun2ssprovider.swift',
|
||||||
'platforms/ios/tun2sockswriter.swift',
|
# 'platforms/ios/tun2sockswriter.swift',
|
||||||
].each { |filename|
|
].each { |filename|
|
||||||
file = group.new_file(filename)
|
file = group.new_file(filename)
|
||||||
@target_extension.add_file_references([file])
|
@target_extension.add_file_references([file])
|
||||||
|
@ -394,32 +395,32 @@ class XCodeprojPatcher
|
||||||
framework_ref = frameworks_group.new_file('libwg-go.a')
|
framework_ref = frameworks_group.new_file('libwg-go.a')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
framework_ref = frameworks_group.new_file('3rd/libleaf/lib/libleaf.a')
|
# framework_ref = frameworks_group.new_file('3rd/libleaf/lib/libleaf.a')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
framework_ref = frameworks_group.new_file('NetworkExtension.framework')
|
framework_ref = frameworks_group.new_file('NetworkExtension.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/LZ4.framework')
|
# framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/LZ4.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
#
|
||||||
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/mbedTLS.framework')
|
# framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/mbedTLS.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
#
|
||||||
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNClient.framework')
|
# framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNClient.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework')
|
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
framework_ref = frameworks_group.new_file('3rd/ShadowSocks/build/Release-iphoneos/ShadowSocks.framework')
|
# framework_ref = frameworks_group.new_file('3rd/ShadowSocks/build/Release-iphoneos/ShadowSocks.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
#
|
||||||
framework_ref = frameworks_group.new_file('3rd/CocoaAsyncSocket/build/Release-iphoneos/CocoaAsyncSocket.framework')
|
# framework_ref = frameworks_group.new_file('3rd/CocoaAsyncSocket/build/Release-iphoneos/CocoaAsyncSocket.framework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
#
|
||||||
framework_ref = frameworks_group.new_file('3rd/outline-go-tun2socks/build/ios/Tun2socks.xcframework')
|
# framework_ref = frameworks_group.new_file('3rd/outline-go-tun2socks/build/ios/Tun2socks.xcframework')
|
||||||
frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
||||||
# framework_ref = frameworks_group.new_file('3rd/CocoaLumberjack/build/Release-iphoneos/CocoaLumberjack.framework')
|
# framework_ref = frameworks_group.new_file('3rd/CocoaLumberjack/build/Release-iphoneos/CocoaLumberjack.framework')
|
||||||
# frameworks_build_phase.add_file_reference(framework_ref)
|
# frameworks_build_phase.add_file_reference(framework_ref)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
# current version 2.0.8
|
||||||
|
|
||||||
!defined(VERSION, var):VERSION = 2
|
!defined(VERSION, var):VERSION = 2.0.8
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
!defined(BUILDVERSION, var):BUILDVERSION = 5
|
# current build 7
|
||||||
|
!defined(BUILDVERSION, var):BUILDVERSION = 9
|
Loading…
Add table
Add a link
Reference in a new issue