ios - Alcance e IPv6
objective-c reachability (2)
Respuesta corta de la propia Apple ( https://developer.apple.com/videos/play/wwdc2015/719/ en ~ 10: 30 - aunque recomendaría ver el video completo - o al menos mirar los puntos clave aquí: http://www.internetsociety.org/deploy360/blog/2015/06/video-of-apple-wwdc-session-about-ipv6-and-ios-9-now-available-and-some-screenshots/ ):
Sólo intente la conexión.
Conectar Sin Preflight
Las API de accesibilidad (consulte la referencia de SCNetworkReachability) están destinadas a fines de diagnóstico después de identificar un problema de conectividad. Muchas aplicaciones utilizan incorrectamente estas API para verificar de forma proactiva una conexión a Internet llamando al método SCNetworkReachabilityCreateWithAddress y pasándole una dirección IPv4 de 0.0.0.0, lo que indica que hay un enrutador en la red. Sin embargo, la presencia de un enrutador no garantiza que exista una conexión a Internet. En general, evite el alcance de la red de verificación previa. Solo trata de hacer una conexión y manejar con gracia las fallas. Si debe verificar la disponibilidad de la red, evite llamar al método SCNetworkReachabilityCreateWithAddress. Llame al método SCNetworkReachabilityCreateWithName y pásele un nombre de host.
Algunas aplicaciones también pasan el método SCNetworkReachabilityCreateWithAddress una dirección IPv4 de 169.254.0.0, una dirección de enlace local autoasignada, para verificar si hay una conexión Wi-Fi activa. Para verificar la conectividad celular o Wi-Fi, busque el indicador de accesibilidad de la red kSCNetworkReachabilityFlagsIsWWAN en su lugar.
Uno de mis proyectos usa la clase de Alcance de Apple para monitorear el estado de la red y ser notificado en caso de cambios.
Después de leer este artículo sobre el soporte de IPv6, me preguntaba si se realizaría en esta clase para que funcione con IPv6.
Configuré una red IPv6 siguiendo el mismo artículo y todo parece funcionar bien, pero quizás haya un problema con la configuración.
¿La parte de la clase de Alcance está comprobando que la conexión a Internet funciona con IPv6 tal como está ahora o necesita algunos cambios?
También tengo dudas similares con respecto a IPv6 y la clase de accesibilidad. Apple ha pedido en sus documentos que ofrezcan soporte para tipos de IPv6 también como (struct in_addr6, AF_INET6, struct sockaddr_in6 etc)
pero parece que la clase aún no está actualizada para tener estos tipos. Esta es la duda que estoy teniendo. Todavía tengo que probar las pruebas de IPv6, pero solo las observé mientras realizaba las comprobaciones de código estático. Algunos cambios pueden ser necesarios.
+ (instancetype)reachabilityForInternetConnection
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}