Требуется совместимость с iPv6 - приложение iOS отклонено Apple

введите описание изображения здесь

после 1 июня я отправлю свое ионное приложение в itunes connect, и я получил сообщение от apple.

Приложения просматриваются в сети IPv6. Убедитесь, что ваше приложение поддерживает сети IPv6, поскольку требуется совместимость с IPv6 .

Информацию о поддержке сетей IPv6 см. в разделе Поддержка сетей IPv6 DNS64/NAT64.

Для обзора сети см. раздел "О сети".

Я использовал вызов AFNetworking для API.

Пожалуйста, помогите найти решение для того же самого.

Спасибо.

Ответ 1

На самом деле я звоню в API, используя AFNetworking Library.

Я только что заменил классы AFNetworkReachabilityManager из Github моими существующими классами. И у яблока больше нет проблем.

Теперь мое приложение работает.

Ответ 2

Если вы используете API-интерфейсы, специфичные для IPv4, или жестко закодированные IP-адреса, вам нужно будет обновить свой код. Хотя все API NSURLSession и CFNetwork (включая NSURLConnection) уже поддерживают IPV6

Как упоминалось Apple:

На WWDC 2015 мы объявили о переходе на сетевые сервисы только для IPv6 в iOS 9. С 1 июня 2016 года все приложения, представленные в App Store должен поддерживать только IPv6-сеть. В большинстве приложений не требуется никаких изменений, поскольку IPv6 уже поддерживается NSURLSession и API CFNetwork.

Если ваше приложение использует API-интерфейсы, специфичные для IPv4, или жестко закодированные IP-адреса, вы необходимо будет внести некоторые изменения.

Хотя. Apple также рекомендует не использовать литералы IP-адресов для долгосрочного (не обязательно)

Не используйте литералы IP-адреса

Удостоверьтесь, что вы не передаете литералы IPv4-адреса в точечной нотации API, такие как getaddrinfo и SCNetworkReachabilityCreateWithName. Вместо этого используйте высокоуровневые сетевые структуры и адрес-агностик версии API, такие как getaddrinfo и getnameinfo, и передавать их имена хостов или полностью зарегистрированные доменные имена (FQDN). См. Getaddrinfo (3) Mac OS X Руководство по инструментам разработчика и getnameinfo (3) Mac OS X Страница инструментов разработчика.

Примечание. В iOS 9 и OS X 10.11 и более поздних версиях NSURLSession и CFNetwork автоматически синтезируют IPv6-адреса из IPv4-литералов локально на устройств, работающих в сетях DNS64/NAT64. Однако вы все равно должны работать, чтобы избавить ваш код от IP-адресов

Если вы используете библиотеку AFNetworking, обязательно обновите ее до версии выше 3.x, поскольку они, похоже, немного обновили некоторые вещи.AFNetworking Добавлена ​​поддержка IPv6 к достижимости.

Для подробной информации, пожалуйста, следуйте по этой ссылке

Поддержка сетей только для IPv6

ТАКЖЕ, ДЛЯ ТЕСТИРОВАНИЯ

Вы можете следовать этому подробному руководству:

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

Ответ 3

Решение для отклонения приложений Apple из-за сети IPv6

Проверка доступности Интернета для IPv6 не работает. Всегда показывает отсутствие сети. Когда я использую этот код, Apple одобрила мое приложение в течение 24 часов. БЛАГОДАРЯ

Измените следующую строку в коде AFNetworking в классе AFNetworkReachabilityManager

ИЗМЕНИТЬ 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;  //Change AF_INET TO AF_INET6
        _sharedManager = [self managerForAddress:&address];
    });

    return _sharedManager;
}

EDIT:

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

replace

AF_INET; to AF_INET6;