2015-08-11 24 views
17

Uno dei miei progetti utilizza la classe Reachability di Apple per monitorare lo stato della rete e ricevere notifiche in caso di modifiche.Raggiungibilità e IPv6

Dopo aver letto this article in merito al supporto di IPv6, mi chiedevo se dovessero essere apportati a questa classe per farlo funzionare con IPv6.

Ho impostato una rete IPv6 dopo the same article e tutto sembra funzionare correttamente ma forse c'è un problema con l'installazione.

La parte della classe Reachability controlla la connessione Internet che funziona con IPv6 come è ora o richiede alcune modifiche?

+0

hai capito? – anoop4real

+0

Questo problema crea se non sto aggiornando la libreria di raggiungibilità? E cosa accadrà se la mia app è già stata caricata con una vecchia libreria? \ – PJR

risposta

8

Breve risposta da Apple stessa (https://developer.apple.com/videos/play/wwdc2015/719/ a ~ 10: 30 - anche se mi sento di raccomandare a guardare il video per intero - o almeno guardare attraverso i punti chiave qui: http://www.internetsociety.org/deploy360/blog/2015/06/video-of-apple-wwdc-session-about-ipv6-and-ios-9-now-available-and-some-screenshots/):

Basta provare la connessione.

Una copia incolla da https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW25 che ribadisce questo:

connettersi senza verifica preliminare

Le API di raggiungibilità (vedi SCNetworkReachability di riferimento) sono destinati a scopi diagnostici dopo aver individuato un problema di connettività . Molte app utilizzano erroneamente queste API per verificare proattivamente la connessione Internet chiamando il metodo SCNetworkReachabilityCreateWithAddress e passandogli un indirizzo IPv4 di 0.0.0.0, che indica che esiste un router sulla rete . Tuttavia, la presenza di un router non garantisce la presenza di una connessione Internet . In generale, evitare la raggiungibilità della rete . Basta provare a creare una connessione e gestire con garbo gli errori . Se è necessario verificare la disponibilità della rete, evitare di chiamare il metodo SCNetworkReachabilityCreateWithAddress. Chiama il metodo SCNetworkReachabilityCreateWithName e passa invece un nome host .

Alcune applicazioni anche passare il metodo SCNetworkReachabilityCreateWithAddress un indirizzo IPv4 di 169.254.0.0, un indirizzo link-local auto-assegnato, per controllo per una connessione Wi-Fi attiva. Per verificare la connettività Wi-Fi o cellulare , cercare invece il flag di raggiungibilità della rete kSCNetworkReachabilityFlagsIsWWAN.

+0

È questo il problema se non sto aggiornando la libreria di raggiungibilità? E cosa accadrà se la mia app è già stata caricata con una vecchia libreria? – PJR

+0

Se si evita di chiamare le vecchie routine, allora si avrà solo un codice morto, che probabilmente non è un problema. –

0

Ho anche dubbi simili riguardo alla classe IPv6 e Reachability. Apple ha chiesto nei propri documenti di fornire supporto per i tipi di IPv6 come (struct in_addr6, AF_INET6, struct sockaddr_in6 etc) ma la classe sembra non essere ancora stata aggiornata per avere questi tipi. Questo è il dubbio che sto avendo. Devo ancora provare i test IPv6, ma ho appena osservato mentre eseguivo i controlli del codice statico. Alcuni cambiamenti potrebbero essere richiesti.

Reachability.m

+ (instancetype)reachabilityForInternetConnection 
{ 
    struct sockaddr_in zeroAddress; 

    bzero(&zeroAddress, sizeof(zeroAddress)); 

    zeroAddress.sin_len = sizeof(zeroAddress); 

    zeroAddress.sin_family = AF_INET; 

    return [self reachabilityWithAddress:&zeroAddress]; 
} 
+0

Se è necessario verificare la disponibilità della rete, evitare di chiamare il metodo 'SCNetworkReachabilityCreateWithAddress'. Chiama il metodo 'SCNetworkReachabilityCreateWithName' e passa invece un nome host. https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html –

+0

Sto utilizzando https://github.com/ashleymills/Reachability.swift ora – anoop4real