diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a0e04bd..1fd220405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. +## 2.11.1 - 2023-12-05 + +[NEW] Option to Block LAN traffic when connected to an untrusted network +[NEW] Option to turn off the prompt when connecting or disconnecting VPN from the Widget +[FIXED] Control panel not rendering when launching the app in landscape mode on iPad +[FIXED] Removed redundant entitlements for V2Ray connections +[FIXED] Minor UI fixes and improvements + ## 2.11.0 - 2023-11-16 [NEW] Obfuscation with V2Ray for WireGuard connections diff --git a/IVPNClient/AppDelegate.swift b/IVPNClient/AppDelegate.swift index 83c2364a8..5bd838243 100644 --- a/IVPNClient/AppDelegate.swift +++ b/IVPNClient/AppDelegate.swift @@ -146,6 +146,15 @@ class AppDelegate: UIResponder { switch endpoint { case Config.urlTypeConnect: + guard !UserDefaults.shared.disableWidgetPrompt else { + if UserDefaults.shared.networkProtectionEnabled { + Application.shared.connectionManager.resetRulesAndConnectShortcut(closeApp: true, actionType: .connect) + return + } + Application.shared.connectionManager.connectShortcut(closeApp: true, actionType: .connect) + return + } + viewController.showActionAlert(title: "Please confirm", message: "Do you want to connect to VPN?", action: "Connect", actionHandler: { _ in if UserDefaults.shared.networkProtectionEnabled { Application.shared.connectionManager.resetRulesAndConnectShortcut(closeApp: true, actionType: .connect) @@ -154,6 +163,15 @@ class AppDelegate: UIResponder { Application.shared.connectionManager.connectShortcut(closeApp: true, actionType: .connect) }) case Config.urlTypeDisconnect: + guard !UserDefaults.shared.disableWidgetPrompt else { + if UserDefaults.shared.networkProtectionEnabled { + Application.shared.connectionManager.resetRulesAndDisconnectShortcut(closeApp: true, actionType: .disconnect) + return + } + Application.shared.connectionManager.disconnectShortcut(closeApp: true, actionType: .disconnect) + return + } + viewController.showActionAlert(title: "Please confirm", message: "Do you want to disconnect from VPN?", action: "Disconnect", actionHandler: { _ in if UserDefaults.shared.networkProtectionEnabled { Application.shared.connectionManager.resetRulesAndDisconnectShortcut(closeApp: true, actionType: .disconnect) diff --git a/IVPNClient/IVPNClient.entitlements b/IVPNClient/IVPNClient.entitlements index 0a88a973e..7af37748d 100644 --- a/IVPNClient/IVPNClient.entitlements +++ b/IVPNClient/IVPNClient.entitlements @@ -10,8 +10,6 @@ NSFileProtectionCompleteUntilFirstUserAuthentication com.apple.developer.networking.networkextension - app-proxy-provider - content-filter-provider packet-tunnel-provider com.apple.developer.networking.vpn.api diff --git a/IVPNClient/Managers/AppKeyManager.swift b/IVPNClient/Managers/AppKeyManager.swift index 732243d23..09800cfd8 100644 --- a/IVPNClient/Managers/AppKeyManager.swift +++ b/IVPNClient/Managers/AppKeyManager.swift @@ -76,7 +76,7 @@ class AppKeyManager { return TimeInterval(10) } - return TimeInterval(60 * 60) + return TimeInterval(60 * 10) } static var regenerationInterval: TimeInterval { diff --git a/IVPNClient/Managers/VPNManager.swift b/IVPNClient/Managers/VPNManager.swift index 0f3473984..c2cfc37cd 100644 --- a/IVPNClient/Managers/VPNManager.swift +++ b/IVPNClient/Managers/VPNManager.swift @@ -236,6 +236,10 @@ class VPNManager { self.disable(tunnelType: .wireguard) { _ in self.setup(settings: settings, accessDetails: accessDetails, status: .disconnected) { _ in self.disconnect(tunnelType: .ipsec) + // Fix for iOS 16+ bug where VPN status is .disconnecting for active on-demand rules and disconnected VPN + DispatchQueue.delay(1) { + self.ipsecManager?.connection.stopVPNTunnel() + } } } } @@ -243,6 +247,7 @@ class VPNManager { disable(tunnelType: .ipsec) { _ in self.disable(tunnelType: .wireguard) { _ in self.setup(settings: settings, accessDetails: accessDetails, status: .disconnected) { _ in + // Fix for iOS 16+ bug where VPN status is .disconnecting for active on-demand rules and disconnected VPN DispatchQueue.delay(1) { self.openvpnManager?.connection.stopVPNTunnel() } @@ -253,6 +258,7 @@ class VPNManager { disable(tunnelType: .ipsec) { _ in self.disable(tunnelType: .openvpn) { _ in self.setup(settings: settings, accessDetails: accessDetails, status: .disconnected) { _ in + // Fix for iOS 16+ bug where VPN status is .disconnecting for active on-demand rules and disconnected VPN DispatchQueue.delay(1) { self.wireguardManager?.connection.stopVPNTunnel() } diff --git a/IVPNClient/Scenes/Base.lproj/Main.storyboard b/IVPNClient/Scenes/Base.lproj/Main.storyboard index c756fac63..4f04e5a7c 100644 --- a/IVPNClient/Scenes/Base.lproj/Main.storyboard +++ b/IVPNClient/Scenes/Base.lproj/Main.storyboard @@ -21,7 +21,7 @@ - +