Cómo obtener Wifi SSID en iOS9 después de que CaptiveNetwork haya quedado en desuso y las llamadas al nombre Wifi ya estén bloqueadas

Hasta el día de hoy, utilicé la Interfaz CaptiveNetwork para mostrar el nombre del Wifi actualmente conectado. La referencia de iOS 9 Prerelease ya mencionada, que los métodos de CaptiveNetwork se desprenden ahora, pero todavía funcionaban al principio.

Con la versión más nueva, Apple parece haber bloqueado ya estas llamadas (¿quizás por cuestiones de privacidad?).

¿Hay alguna otra manera de obtener el nombre del Wifi actual?

Así es como obtuve el SSID hasta hoy, pero ahora solo obtienes nada:

#import  NSString *wifiName = nil; NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *name in interFaceNames) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); if (info[@"SSID"]) { wifiName = info[@"SSID"]; } } 

En el GM para iOS 9, parece que esto está habilitado de nuevo. De hecho, ni siquiera aparece como obsoleto en la documentación en línea, sin embargo, el archivo de encabezado de CaptiveNetwork tiene lo siguiente:

 CNCopySupportedInterfaces (void) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_8, __MAC_NA, __IPHONE_4_1, __IPHONE_9_0, CN_DEPRECATION_NOTICE); 

Por lo tanto, está trabajando en el iOS 9 GM, pero no estoy seguro de cuánto tiempo 🙂

Registre su aplicación como ayudante de Hotspot.

 #import  NSArray * networkInterfaces = [NEHotspotHelper supportedNetworkInterfaces]; NSLog(@"Networks %@",networkInterfaces); 

ACTUALIZACIÓN (11 de septiembre de 2015)

En su lugar, las siguientes API de red cautiva se han vuelto a habilitar en la última versión de iOS 9.

  • CNCopySupportedInterfaces
  • CNCopyCurrentNetworkInfo

ACTUALIZACIÓN (16 de septiembre de 2015)

Si aún prefiere usar NetworkExtension y Apple le dio permiso para agregar las autorizaciones, puede hacerlo para obtener la información de wifi:

 for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) { NSString *ssid = hotspotNetwork.SSID; NSString *bssid = hotspotNetwork.BSSID; BOOL secure = hotspotNetwork.secure; BOOL autoJoined = hotspotNetwork.autoJoined; double signalStrength = hotspotNetwork.signalStrength; } 

NetworkExtension proporciona información adicional como seguridad, auto unida o la potencia de la señal. Y también le permite establecer credenciales a wifis en modo de fondo, cuando el usuario escanea wifis.

Confirmar en 2017-abril-27, la red cautiva sigue funcionando para Swift 3.1 , XCode 8.3

Para Swift> 3.0

 func printCurrentWifiInfo() { if let interface = CNCopySupportedInterfaces() { for i in 0.. 

Para Objective-C

 NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *name in interFaceNames) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); NSLog(@"wifi info: bssid: %@, ssid:%@, ssidData: %@", info[@"BSSID"], info[@"SSID"], info[@"SSIDDATA"]); } 

CaptiveNetwork todavía funciona. Debido a muchas solicitudes, Apple puede haber restablecido las API.

Usando CaptiveNetwork podemos obtener el SSID de la red WiFi. Incluso funciona en iOS 10.

 #import  NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); 

Aquí está el resultado:

 Printing description of info: { BSSID = "5*:**:**:**:**:**"; SSID = Cisco12814; SSIDDATA = <43697363 6f313238 3134>; } 

Como se mencionó antes, CaptiveNetwork funciona bien con Xcode 8.3 y superior. Aquí hay fragmentos de código para Swift 3 , Swift 4 y Objective-C .

Swift 3 y 4

 import SystemConfiguration.CaptiveNetwork internal class SSID { class func fetchSSIDInfo() -> [String: Any] { var interface = [String: Any]() if let interfaces = CNCopySupportedInterfaces() { for i in 0.. 

C objective

 #import  + (NSDictionary *)fetchSSIDInfo { NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *name in interFaceNames) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); return info; } return nil; }