2016-05-06 50 views
14

Poiché Apple richiede l'app inviata per la revisione deve supportare la rete solo IPv6 a partire dal 1 ° giugno 2016, sto verificando se è necessario sostituire determinate API/librerie nella mia app. Tuttavia, non ne so abbastanza del networking e di alcuni aspetti correlati, di conseguenza non sono in grado di avere una risposta definitiva su questo e vorrei cercare aiuto.Devo sostituire NSURLConnection per ottenere supporto obbligatorio per i servizi solo IPv6?

Per quanto riguarda il documento Supporting IPv6 DNS64/NAT64 Networks fornito da Apple, essa afferma che le applicazioni dovrebbero andare bene e non c'è bisogno di eseguire l'aggiornamento se:

si sta scrivendo un'applicazione lato client utilizzando le API di rete di alto livello tali come NSURLSession e la CFNetwork quadri e si collegano per nome

con questo lo prendo come 2 c RITERI:

  1. utilizzando NSURLSession o CFNetwork
  2. collegare al nome

Quindi la domanda è:

  1. Per quanto ne so NSURLConnection si basa su CFNetwork, fa questo significa che starò bene anche se la mia app utilizza NSURLConnection? (Ho visto NSURLConnection è menzionato anche nel this image in the above document, ma ancora una volta non ne sono del tutto sicuro su questo, come NSURLConnection è una specie di vecchio? E pare non riesco a trovare documenti che citano il supporto per IPv4 e IPv6 sia.)

  2. dai criteri "chiamando per nome ", questo significa non importa se sto usando NSURLSession o NSURLConnection, se mi capita di chiamare o accedere a determinate risorse/API da un indirizzo IPv4, accadrà qualcosa di brutto? (Ho fatto qualche ricerca, e dai miei comprendenti clienti come iOS con iOS 9+ useremo sempre l'indirizzo IPv6 sintetizzato per accedere al server IPv4, di conseguenza il client non riuscirà a raggiungere la risorsa se chiamo per indirizzo IPv4?)

Grazie per qualsiasi aiuto!

+0

ciao alando, Devo convertire il mio server da ipV4 a ipV6? http://stackoverflow.com/questions/38046187/how-to-fix-please-ensure-that-your-app-supports-ipv6-networks-as-ipv6-compatibi/38046471#38046471 – iphonemaclover

+0

hi @iphonemaclover, che il problema dovrebbe riguardare la capacità della tua app di accedere alla sola risorsa IPv6 se non avessi sbagliato. Non ha nulla a che fare con il tuo server, ma se tutte le risorse a cui l'app accede sono solo IPv6 e la tua app non è in grado di accedervi, dovrai gestirle. – alanlo

+0

per favore controlla la mia domanda nel commento sopra, sono ancora confuso, che usando NSURLConnection nel metodo SOAP la mia app rifiutata da apple. È necessario trasferire la mia API nel server da ipV4 a ipV6? – iphonemaclover

risposta

6
  1. Probabilmente andrà bene. Ma puoi testarlo da solo collegandoti a una rete NAT64 creata dal tuo Mac e verifica se la tua app funziona.
  2. Entrambi i nomi e i valori letterali IPv4 funzioneranno se si utilizzano le API di livello superiore in iOS 9.2+.
+0

Grazie per la risposta. Un'altra piccola domanda è che mi sono appena reso conto che se provo ad accedere alle risorse solo IPv6 con i valori letterali IPv4, è necessario che si verifichi un errore, non è vero? Quindi la mia preoccupazione al punto 2 è quasi priva di significato, come se io stia usando i letterali IPv4, accedo alle risorse compatibili con IPv4, altrimenti dovrei chiamare per nome e lasciare che il DNS gestisca gli oggetti IP. È corretto? – alanlo

+0

@alanlo: Non sei sicuro di cosa intendi. Se hai un IPv4 letterale, per definizione è per un server compatibile con IPv4. Ovviamente un server solo IPv6 non sarebbe conosciuto da nessun tipo di letterale IPv4. – user102008

+0

Sì, hai esattamente quello che intendo, che ha risolto il mio problema mentre interpretavo il caso opposto di "call by name" erroneamente, grazie! – alanlo

3

NSURLConnection è nell'elenco consigliato, controllare Figura 10-5 all'interno di Apples dns64/nat64 articolo here.

Secondo Apple: "Il modo più semplice per testare la tua app per la compatibilità IPv6 DNS64/NAT64 - che è il tipo di rete che la maggior parte dei carrier cellulari sta implementando - consiste nel configurare una rete IPv6 DNS64/NAT64 locale con il tuo Mac. È quindi possibile connettersi a questa rete dagli altri dispositivi per scopi di test "è disponibile il collegamento completo here.

enter image description here

P.S Se si utilizza il metodo sendAsynchronousRequest, è necessario modificarlo in [NSURLSession dataTaskWithRequest: completionHandler:] poiché è stato deprecato.

+0

Penso che NSURLConnection sia accettabile API per ipv6 e sendAsynchronousRequest è membro di NSURLConnection, quindi dovrebbe funzionare. Quindi perché è necessario cambiarlo? – Saggy

+0

@Saggy sendAsynchronousRequest: queue: completionHandler: deprecato da iOS9. Vedere questo: https://developer.apple.com/documentation/foundation/nsurlconnection/1418125-sendasynchronousrequest?language=objc È necessario modificarlo per supportare ios9 e successivi. In generale, non c'è alcun problema con NSURLConnection con ipv6. –

3

Creazione di un ambiente IPv6 basato su this post e test del progetto principale ora gestito.

PS, il documento ufficiale Apple, Supporting IPv6 DNS64/NAT64 Networks ha lo stesso flusso, insegnando come creare un ambiente DNS64/NAT64, IPv6 only da testare.

Sembra corretto quando si utilizza la libreria AFNetworking e i metodi relativi a NSURLConnection. Ma una libreria di terze parti utilizzata per la connessione P2P non è riuscita.


Premere il tasto Option e fare clic sul Sharing. Sharing

Create NAT64 Network appare quando si preme Option nella figura sopra. Se non è presente, torna al passaggio precedente e ricorda di premere la chiave Option.


iOS 8, IPv6 only issue

IOS 8 non hanno NAT64 supporto, in modo che qualsiasi dispositivo iOS 8 su un solo IPv6 rete dovrebbe essere irrimediabilmente paralizzato. Basandomi su questo, sono abbastanza sicuro che finché il tuo codice utilizza le API IPv4 solo quando è effettivamente in esecuzione su iOS 8 e versioni precedenti (ovvero controlli di runtime, non controlli di build-time), dovresti stare bene.

+0

Grazie per aver segnalato * iOS 8 * e * NAT 64 * –