Мне нужно разорвать VPN-соединение, запущенное через Wireguard, когда приложение закрывается (а не в фоновом режиме). Как этого добиться?
Я пробовал:
- Центр уведомлений
- семафоры
- наблюдение за исчезновением ContentView (является основным представлением)
- и установка приложения может быть немедленно завершено, когда пользователь завершает работу или выходит из системы НЕТ
мое приложение в настоящее время не поддерживает фоновую активность, но, возможно, в будущем это будет, я читал, что это может как-то мешать, но информация, которую я нашел, немного устарела
р>
@main
struct testWireGuardInstructions01SwiftUIApp: App {
//used to replicate old UIKit appDelegate 1/2
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(MyManager.shared)
}
}
}
//MARK: - section used to replicate UIKit app delegate behaviour
//used to replicate old UIKit appdelegate 2/2
class AppDelegate: UIResponder, UIApplicationDelegate {
let myManager = MyManager.shared
var bgTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 0);
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Logger.info("loaded didFinishLaunchingWithOptions")
return true
}
func applicationWillTerminate(_ application: UIApplication) {
Logger.info("applicationWillTerminate")
myManager.turnOffTunnel()
}
}
метод, который мне нужно вызвать
func turnOffTunnel() {
NETunnelProviderManager.loadAllFromPreferences { tunnelManagersInSettings, error in
if let error = error {
NSLog("Error (loadAllFromPreferences): \(error)")
return
}
if let tunnelManager = tunnelManagersInSettings?.first {
guard let session = tunnelManager.connection as? NETunnelProviderSession else {
fatalError("tunnelManager.connection is invalid")
}
switch session.status {
case .connected, .connecting, .reasserting:
NSLog("Stopping the tunnel")
session.stopTunnel()
DispatchQueue.main.async {
self.isConnected = false
}
default:
break
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... swiftui-io
Мобильная версия