30 votes

Nécessaire compatibilité iPv6 - application iOS rejetée par Apple

entrer la description de l'image ici

après le 1er juin, j'ai soumis mon application ionic à iTunes Connect et j'ai reçu le message d'Apple.

Les applications sont examinées sur un réseau IPv6. Veuillez vous assurer que votre application prend en charge les réseaux IPv6, car la compatibilité IPv6 est requise.

Pour obtenir des informations sur la prise en charge des réseaux IPv6, consultez le document Support des réseaux DNS64/NAT64 IPv6.

Pour un aperçu du réseau, veuillez consulter À propos du réseau.

J'ai utilisé AFNetworking pour les appels API.

Veuillez m'aider à trouver une solution pour cela.

Merci.

20voto

gunjot singh Points 1884

Si vous utilisez des APIs spécifiques à IPv4 ou des adresses IP codées en dur, vous devrez mettre à jour votre code, bien que toutes les APIs NSURLSession et CFNetwork (y compris NSURLConnection) prennent déjà en charge IPV6

Comme mentionné par Apple :

Lors de la WWDC 2015, nous avons annoncé la transition vers des services réseau IPv6 uniquement dans iOS 9. À partir du 1er juin 2016, toutes les applications soumises à l'App Store doivent prendre en charge le réseau IPv6 uniquement. La plupart des applications ne nécessiteront aucun changement car IPv6 est déjà pris en charge par les APIs NSURLSession et CFNetwork.

Si votre application utilise des APIs spécifiques à IPv4 ou des adresses IP codées en dur, vous devrez apporter des modifications.

Cependant, Apple recommande également de ne pas utiliser les adresses IP littérales à long terme (Non nécessaire)

Ne pas utiliser d'adresses IP littérales

Assurez-vous de ne pas transmettre d'adresses IPv4 littérales en notation pointée aux APIs telles que getaddrinfo et SCNetworkReachabilityCreateWithName. Utilisez plutôt des frameworks réseau de haut niveau et des versions d'APIs agnostiques vis-à-vis de l'adresse, telles que getaddrinfo et getnameinfo, et transmettez-leur des noms d'hôtes ou des noms de domaine complets (FQDN). Voir getaddrinfo(3) Manuel des outils de développement Mac OS X et getnameinfo(3) Manuel des outils de développement Mac OS X.

Remarque : Dans iOS 9 et OS X 10.11 et ultérieur, NSURLSession et CFNetwork synthétisent automatiquement des adresses IPv6 à partir d'adresses IPv4 littérales localement sur les appareils fonctionnant sur des réseaux DNS64/NAT64. Cependant, vous devriez toujours travailler à éliminer les adresses IP littérales de votre code

Si vous utilisez la bibliothèque AFNetworking, assurez-vous de la mettre à jour vers la version supérieure à 3.x, car ils semblent avoir mis à jour quelques éléments. --> AFNetworking a ajouté la prise en charge de IPv6 à Reachability.

Pour plus d'informations détaillées, veuillez suivre ce lien

Prise en charge des réseaux IPv6 uniquement

AUSSI, POUR TESTER

Vous pouvez suivre ce tutoriel détaillé :

tutorial-how-to-test-your-app-for-ipv6-compatibility

0 votes

Merci pour votre réponse. Je n'utilise pas l'adresse IP codée en dur dans mon application pour appeler l'API. J'ai utilisé xxxxxx.com/API/login.php, donc maintenant, que dois-je changer....?

0 votes

Quelle classe API ou bibliothèque utilisez-vous pour appeler l'URL ? NSURLConnection ou autre ?

1 votes

Je pense que vous devriez passer à la dernière version d'AFNetworking 3.1.0. Ils ont mis à jour quelques éléments. Ajouté la prise en charge de l'IPv6 à Reachability. --> github.com/AFNetworking/AFNetworking/pull/3174

12voto

Maninderjit Singh Points 879

Solution pour le rejet de l'application Apple en raison du réseau IPv6

Ma vérification de l'accessibilité à Internet pour IPv6 ne fonctionne pas bien. Elle affiche toujours l'absence de réseau. Lorsque j'ai utilisé ce code, Apple a approuvé mon application en moins de 24 heures. MERCI

Modifiez la ligne suivante dans le code de la bibliothèque AFNetworking dans la classe AFNetworkReachabilityManager

CHANGE AF_INET TO AF_INET6;

+ (instancetype)sharedManager {
    static AFNetworkReachabilityManager *_sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        struct sockaddr_in address;
        bzero(&address, sizeof(address));
        address.sin_len = sizeof(address);
        address.sin_family = AF_INET6;  //Changer AF_INET en AF_INET6
        _sharedManager = [self managerForAddress:&address];
    });

    return _sharedManager;
}

EDIT:

$ grep -nr 'AF_INET*' .
./Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m:122:        address.sin_family = AF_INET;

remplacer

AF_INET; par AF_INET6;

1 votes

Vous ne devriez pas du tout utiliser de vérifications de disponibilité. stackoverflow.com/questions/12490578/…

0 votes

J'ai un problème lorsque je vérifie l'accès à Internet avant d'atteindre l'API. Il affiche toujours le message d'indisponibilité d'Internet.

1 votes

La solution recommandée par Apple à cela est d'arrêter de vérifier l'accès à Internet et de gérer les échecs de manière élégante.

7voto

En fait, j'appelle une API en utilisant la bibliothèque AFNetworking.

J'ai remplacé les classes AFNetworkReachabilityManager de Github par mes classes existantes. Et Apple n'a plus de problème.

Et mon application fonctionne maintenant.

0voto

Parth Points 37

Supprimez la notation point de l'URL de l'API car le réseau IPv6 n'autorise pas la notation point dans l'URL. Je l'ai enlevée de l'URL de l'API et cela fonctionne pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X