mirror of
https://github.com/jkcoxson/LocalDevVPN.git
synced 2026-03-02 06:26:16 +01:00
mock VPN connection on sim
This commit is contained in:
@@ -47,6 +47,13 @@ class TunnelManager: ObservableObject {
|
|||||||
@Published var vpnManager: NETunnelProviderManager?
|
@Published var vpnManager: NETunnelProviderManager?
|
||||||
private var vpnObserver: NSObjectProtocol?
|
private var vpnObserver: NSObjectProtocol?
|
||||||
private var isProcessingStatusChange = false
|
private var isProcessingStatusChange = false
|
||||||
|
private let isSimulator: Bool = {
|
||||||
|
#if targetEnvironment(simulator)
|
||||||
|
return true
|
||||||
|
#else
|
||||||
|
return false
|
||||||
|
#endif
|
||||||
|
}()
|
||||||
|
|
||||||
private var tunnelDeviceIp: String {
|
private var tunnelDeviceIp: String {
|
||||||
UserDefaults.standard.string(forKey: "TunnelDeviceIP") ?? "10.7.0.0"
|
UserDefaults.standard.string(forKey: "TunnelDeviceIP") ?? "10.7.0.0"
|
||||||
@@ -108,9 +115,17 @@ class TunnelManager: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private init() {
|
private init() {
|
||||||
|
if isSimulator {
|
||||||
|
loadTunnelPreferences()
|
||||||
|
VPNLogger.shared.log("Running on Simulator – VPN calls are mocked")
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
self?.waitingOnSettings = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
setupStatusObserver()
|
setupStatusObserver()
|
||||||
loadTunnelPreferences()
|
loadTunnelPreferences()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Private Methods
|
// MARK: - Private Methods
|
||||||
|
|
||||||
@@ -321,6 +336,11 @@ class TunnelManager: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func startVPN() {
|
func startVPN() {
|
||||||
|
if isSimulator {
|
||||||
|
simulateStartVPN()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if let manager = vpnManager {
|
if let manager = vpnManager {
|
||||||
let currentStatus = manager.connection.status
|
let currentStatus = manager.connection.status
|
||||||
VPNLogger.shared.log("Current manager status: \(currentStatus.rawValue)")
|
VPNLogger.shared.log("Current manager status: \(currentStatus.rawValue)")
|
||||||
@@ -499,6 +519,11 @@ class TunnelManager: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func stopVPN() {
|
func stopVPN() {
|
||||||
|
if isSimulator {
|
||||||
|
simulateStopVPN()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
guard let manager = vpnManager else {
|
guard let manager = vpnManager else {
|
||||||
VPNLogger.shared.log("No VPN manager available to stop")
|
VPNLogger.shared.log("No VPN manager available to stop")
|
||||||
return
|
return
|
||||||
@@ -575,6 +600,11 @@ class TunnelManager: ObservableObject {
|
|||||||
// MARK: - Cleanup Utilities
|
// MARK: - Cleanup Utilities
|
||||||
|
|
||||||
func cleanupAllVPNConfigurations() {
|
func cleanupAllVPNConfigurations() {
|
||||||
|
if isSimulator {
|
||||||
|
VPNLogger.shared.log("Simulator cleanup skipped – no real VPN configurations to remove")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, error in
|
NETunnelProviderManager.loadAllFromPreferences { [weak self] managers, error in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
|
||||||
@@ -617,6 +647,30 @@ class TunnelManager: ObservableObject {
|
|||||||
NotificationCenter.default.removeObserver(observer)
|
NotificationCenter.default.removeObserver(observer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func simulateStartVPN() {
|
||||||
|
VPNLogger.shared.log("Simulator: pretend to start VPN")
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
self?.tunnelStatus = .connecting
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { [weak self] in
|
||||||
|
self?.tunnelStatus = .connected
|
||||||
|
VPNLogger.shared.log("Simulator: VPN marked connected")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func simulateStopVPN() {
|
||||||
|
VPNLogger.shared.log("Simulator: pretend to stop VPN")
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
self?.tunnelStatus = .disconnecting
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { [weak self] in
|
||||||
|
self?.tunnelStatus = .disconnected
|
||||||
|
VPNLogger.shared.log("Simulator: VPN marked disconnected")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Views
|
// MARK: - Views
|
||||||
|
|||||||
Reference in New Issue
Block a user