Нужно ли мне заменять NSURLConnection, чтобы обеспечить обязательную поддержку только для служб IPv6?

Поскольку Apple запрашивает приложение, представленное для проверки, должно поддерживать сеть только с IPv6, начиная с 1 июня 2016 года, я проверяю, нужно ли мне заменять определенные API/библиотеки в моем приложении. Однако я недостаточно разбираюсь в сетевом взаимодействии и некоторых связанных аспектах, в результате я не могу дать однозначный ответ на этот вопрос и хотел бы обратиться за помощью.

Что касается документа Поддержка IPv6 DNS64/NAT64 Networks, предоставляемого Apple, в нем говорится, что приложения должны быть в порядке и не нужно выполнять обновление, если:

вы пишете приложение на стороне клиента, используя высокоуровневые сетевые интерфейсы, такие как как NSURLSession и рамки CFNetwork, а вы подключаетесь по имени

Под этим я принимаю это как 2 критерия:

  • с использованием NSURLSession или CFNetwork
  • подключиться по имени

Итак, вопрос здесь:

  • Насколько я знаю, NSURLConnection основан на CFNetwork, означает ли это, что я тоже буду в порядке, если мое приложение использует NSURLConnection? (Я видел, что NSURLConnection упоминается в этом изображении в приведенном выше документе, но опять же я не совсем уверен в этом, поскольку NSURLConnection - это нечто вроде старого? И, похоже, я не могу найти документы, в которых упоминаются поддержка IPv4 и IPv6.)

  • По критерию "вызов по имени", означает ли это, что независимо от того, использую NSURLSession или NSURLConnection, если я случайно позвоню или получаю доступ к определенным ресурсам /API по адресу IPv4, будут происходить плохие вещи? (Я провел некоторое исследование, и, по моему мнению, клиенты, такие как iOS-устройство с iOS 9+, всегда будут использовать синтезированный IPv6-адрес для доступа к серверу IPv4, в результате чего клиент не сможет связаться с ресурсом, если я вызову по адресу IPv4?)

Спасибо за любую помощь!

Ответы

Ответ 1

  • Скорее всего, это будет хорошо. Но вы можете просто протестировать его самостоятельно, подключившись к сети NAT64, созданной вашим Mac, и посмотрите, работает ли ваше приложение.
  • Оба имени и литералы IPv4 будут работать, если вы используете API более высокого уровня в iOS 9.2 +.

Ответ 2

NSURLConnection приведен в рекомендуемом списке, проверьте Рисунок 10-5 в статье Apples dns64/nat64 здесь.

Согласно Apple: "Самый простой способ протестировать ваше приложение для совместимости с IPv6 для DNS64/NAT64, которое является типом сети, которую большинство операторов сотовой связи развертывают, - это настроить локальную сеть IPv6 DNS64/NAT64 с вашим Mac. может затем подключиться к этой сети с других устройств для целей тестирования". Полная ссылка может быть найдена здесь.

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

P.S Если вы используете метод sendAsynchronousRequest, вам необходимо изменить его на [NSURLSession dataTaskWithRequest: completHandler:], поскольку он устарел.

Ответ 3

Я создаю среду IPv6, основанную на этот пост, и протестируйте теперь основной проект.

PS, официальный документ Apple, Поддержка IPv6 DNS64/NAT64 Networks имеет тот же поток, преподающий, как построить DNS64/NAT64, IPv6 only для тестирования.

Кажется, это прекрасно при использовании библиотеки AFNetworking и связанных методов NSURLConnection. Но сторонняя библиотека, используемая для соединения P2P, не удалась.


Нажмите клавишу Option и нажмите Sharing. Общий доступ

Create NAT64 Network появится, когда вы нажмете Option на приведенном выше рисунке. Если он там отсутствует, вернитесь к предыдущему шагу и не забудьте нажать клавишу Option.


iOS 8, только для IPv6

В iOS 8 не поддерживалась поддержка NAT64, поэтому любое устройство iOS 8 в сети только для IPv6 было бы безнадежно искалечено. Исходя из этого, я уверен, что до тех пор, пока ваш код использует API-интерфейсы IPv4 только при фактическом запуске на iOS 8 и ранее (т.е. проверки времени выполнения, а не проверки времени сборки), вы должны быть в порядке.