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 @@
-
+