2016-10-20 1 views
2

Envoyé notre application via le processus de révision de l'application et a été rejetée en raison du problème de complétude ipv6. Notre application utilise AFNetworking 3.1.0 donc pas de problème là-bas. Notre API n'est pas compatible IPV6. La revue revient avec un crash que nous ne pouvons pas reproduire.AFNetworking et IPV6 rejettent avec iOS

Je suppose que ma première question est: 1.) Nous avons besoin de quelque chose de rapide + sale pour le week-end. Peut-on simplement créer une build sans avoir à supporter ipv6 dans le backend via AFNetworking? 2.) Y a-t-il d'autres choses que nous devons faire avec AFNetworking autre que d'avoir le plus mis à jour? Y at-il des changements de code pour s'assurer que nous soutenons ipv6?

+0

L'application exécutée sur le périphérique iOS doit être exécutée sur un réseau IPv6 uniquement, et non sur le serveur. Apple a un ensemble d'instructions pour la construction d'un réseau de test IPv6 uniquement. –

+0

Assurez-vous que vous utilisez un nom d'hôte et non une adresse IPv4 pour votre serveur dans votre application – Paulw11

+1

AF 3.0.0 Ajout de la prise en charge d'IPv6 pour l'accessibilité .. Vous devez donc déboguer l'application localement avec la connectivité IPV6 pour plus d'informations : //support.apple.com/fr-fr/HT202237 –

Répondre

3

Essayez de trouver le code AFNetworking:

struct sockaddr_in address; 
    bzero(&address, sizeof(address)); 
    address.sin_len = sizeof(address); 
    address.sin_family = AF_INET; 

Mise à jour le code pour:

#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) 
    struct sockaddr_in6 address; 
    bzero(&address, sizeof(address)); 
    address.sin6_len = sizeof(address); 
    address.sin6_family = AF_INET6; 
#else 
    struct sockaddr_in address; 
    bzero(&address, sizeof(address)); 
    address.sin_len = sizeof(address); 
    address.sin_family = AF_INET; 
#endif 

mise à jour tous les libs si l'aide:

address.sin_family = AF_INET; 
+0

Hey, merci pour la réponse. Je l'ai déjà dans le code quand je l'ai envoyé pour examen et revenait toujours rejeté. J'utilise 3.1.0 de AFNetworking donc je pensais qu'il ne devrait y avoir aucun problème. –

+0

Vous pouvez demander à l'équipe d'examen pour les journaux de l'accident, nous pouvons trouver le vrai problème avec elle. –

+0

@John D, est-ce que cela résout votre problème? regardez le commentaire semble qu'il n'a pas résolu votre problème, mais pourquoi vous choisissez de répondre? – samoye

0

Mon objectif de déploiement est encore iOS7 et AFNetworking 3.1 ont le même code que la réponse acceptée dans AFNetworkReachabilityManager.m

Quand je mets le point d'arrêt là alors je vois qu'il va à la partie IPv4 même quand je teste sur mon iPhone 6S. Je crois que c'est la raison pour laquelle Apple refuse de ne pas supporter IPv6.

Le code de AFNetworking utilise IPHONE_OS_VERSION_MIN_REQUIRED qui vérifie uniquement la cible de déploiement mais pas la version réelle d'iOS sur votre appareil. Vous pouvez facilement changer pour

if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) { 
    struct sockaddr_in6 address; 
    bzero(&address, sizeof(address)); 
    address.sin6_len = sizeof(address); 
    address.sin6_family = AF_INET6; 

    return [self managerForAddress:&address]; 
    } 
    else { 
    struct sockaddr_in address; 
    bzero(&address, sizeof(address)); 
    address.sin_len = sizeof(address); 
    address.sin_family = AF_INET; 

    return [self managerForAddress:&address]; 
    } 

et il introduit un code IPv6 sur iOS9 et plus récent. J'envoie cette version pour examen et je vous dis si cela vous a aidé.

+0

OK, alors qu'est-ce qui s'est passé? –

+1

Désolé oublié de mentionner qu'il a déjà passé en revue plusieurs fois donc cette solution de contournement fonctionne très bien. – Skeletom