Ответ 1
В расширении добавьте наблюдателя для defaultPath. Затем вы будете уведомлены, когда интерфейс изменится, и вы сможете подключиться к WIFI
Изменить: пример кода
//add observer
let options = NSKeyValueObservingOptions([.new, .old])
self.addObserver(self, forKeyPath: "defaultPath", options: options, context: nil)
//detect interface changes
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let keyPath = keyPath {
if keyPath == "defaultPath" {
let oldPath = change?[.oldKey] as! NWPath
let newPath = change?[.newKey] as! NWPath
//expensive is 3g, not expensive is wifi
if !oldPath.isEqual(to: newPath)) {
//disconnect the VPN, maybe with cancelTunnelWithError
}
}
}
}