Нужно ли мне заменять 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 и ранее (т.е. проверки времени выполнения, а не проверки времени сборки), вы должны быть в порядке.