iOS Comtesting si la asistencia WiFi está habilitada

Estoy tratando de verificar si la asistencia Wi-Fi está habilitada. Tengo un problema cuando estoy conectado a mi punto de acceso para get algunos datos, y cuando tengo una connection deficiente, se utilizan mis datos celulares y esto interfiere con mi punto de acceso. ¿Hay alguna forma de comprobar si esta opción está habilitada?

Ok, creo que puedo ayudar un poco. Necesita verificar SCNetworkReachabilityFlags , por lo que creo, sería una combinación específica de banderas. No pude encontrar la documentation que admita qué combinación de indicadores indicaría que está utilizando WI-FI y Cellular, tampoco he podido encontrar la documentation que le permita verificar esa configuration directamente.

Según la experiencia previa, Apple probablemente no tenga una forma para que controle esa configuration directamente.

Entonces … ¿Aquí hay un pequeño código para comenzar?

 public enum InternetStatus { case notReachable case reachableViaWWAN case reachableViaWiFi case wifiAssist } 

Y una variable que puede definir en una extensión de su elección. (¿Tal vez URLSession ?)

 static public var internetStatus: InternetStatus { var zeroAddress = sockaddr_in() zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size) zeroAddress.sin_family = sa_family_t(AF_INET) guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { SCNetworkReachabilityCreateWithAddress(nil, $0) } }) else { return .notReachable } var flags: SCNetworkReachabilityFlags = [] if flags.contains(.connectionOnDemand) { print("Connection On Demand") } if flags.contains(.connectionAutomatic) { print("Connection Automatic") } if flags.contains(.connectionOnTraffic) { print("Connection On Traffic") } if flags.contains(.connectionRequinetworking) { print("Connection Requinetworking") } if flags.contains(.interventionRequinetworking) { print("Intervention Requinetworking") } if flags.contains(.isDirect) { print("isDirect") } if flags.contains(.isLocalAddress) { print("Local Address") } if flags.contains(.isWWAN) { print("WWAN") } if flags.contains(.reachable) { print("Reachable") } if flags.contains(.transientConnection) { print("Transient Connection") } if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { return .notReachable } if flags.contains(.reachable) == false { // The target host is not reachable. return .notReachable } else if flags.contains(.isWWAN) == true { // WWAN connections are OK if the calling application is using the CFNetwork APIs. return .reachableViaWWAN } else if flags.contains(.connectionRequinetworking) == false { // If the target host is reachable and no connection is requinetworking then we'll assume that you're on Wi-Fi... return .reachableViaWiFi }else if flags.contains(.connectionRequinetworking) && flags.contains(.isWWAN) { // Not sure here, maybe Wi-Fi assist is currently being utilized? Will need to test. return .wifiAssist }else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequinetworking) == false { // The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed return .reachableViaWiFi } else { return .notReachable } } 

El truco será depurar en un entorno en el que sepa que la asistencia Wi-Fi está activa y observar las banderas. O sea más listo que yo y solo sepa lo que son. Actualizaré esta respuesta si alguien señala, o me doy count de la combinación correcta de banderas.