Supporting IPv6-only Networks - Queries

I have below queries regarding supporting IPv6-Only Networks:


1. As per Apple announcement, "At WWDC 2015 we announced the transition to IPv6-only network services in iOS 9. Starting June 1, 2016 all apps submitted to the App Store must support IPv6-only networking. Most apps will not require any changes because IPv6 is already supported by NSURLSession and CFNetwork APIs.". Is this applicable to apps targeting to only iOS9 or lower versions (Existing application deployment target is 6.0).

2. If that is required for lower versions, existing application uses NSURLConnection in many places, do I need to replace NSURLConnection with NSURLSession.


Thanks in advance.

I am also searching for a detailed guideline since I have to use hard coded ipv4 address for http request by NSURLSession. Which can be synthesized to a IPV6 address with IOS 9.2 but fails with lower versions.


Anyone can give an exact statement?


Thanks.

1. As per Apple announcement … Is this applicable to apps targeting to only iOS9 or lower versions (Existing application deployment target is 6.0).

Yes.

2. If that is required for lower versions, existing application uses NSURLConnection in many places, do I need to replace NSURLConnection with NSURLSession.

NSURLConnection supports IPv6 just fine.

If I were in your shoes I would make a plan to replace your NSURLConnection code with NSURLSession code once you drop support for iOS 6.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Anyone can give an exact statement?

This guideline will be enforced by App Review, who are the only folks qualified to comment on edge cases like this.

I am also searching for a detailed guideline since I have to use hard coded ipv4 address for http request by NSURLSession. Which can be synthesized to a IPV6 address with IOS 9.2 but fails with lower versions.

Indeed.

Why are you hard-coding IP addresses?

Are you using HTTP or HTTPS?

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

We suffer serious DNS hijacking and we have our own HTTP DNS service helps to improve domain name resolving.

Actually it is not hard-coding but using IPV4 address directly instead of hostname.


So dear eskimo can you please pass this issue to the dear App Review team to make an exact statement about the edge cases.


As I know There is no way for people to use IPV4 address with Apple Network Framework with OS versions lower than iOS 9.2 under IPV6-only network.


This is an urgent issue for us since we have HTTP DNS widely deployed.


Thanks in advance.

That's now how the review process works. If you need an exception to the policy, you're going to have to negotiate that exception with App Review when you submit your application for review.

Is this your own understanding?


So you mean all the APPs should support IPV6-only network even with OS versions lower than iOS 9?

… we have our own HTTP DNS service …

To help keep things straight I’m going to reserve the term DNS for standard DNS (per RFC 1034/1035). Let’s call the above your custom name resolution service.

There’s two parts to this:

  • App Review

  • technical

I can’t really speak to the App Review side of things. I’m happy to help on the technical side. Keep in mind that fixing the technical problem yields two key benefits:

  • the App Review problem goes away

  • your app will work better for your users

I can see four ways to fix the technical problem:

  • raise your deployment target to 9.2

  • support IPv6 on your servers and in your custom name resolution service

  • use normal DNS on an IPv6-only network

  • detect and specifically handle NAT64

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Thanks for your advice about the technical side.


But we are really care about the App Review side since we have to reschedule our work flow, in a significant way.


So is there any way for us to contact the App Review team for a detailed policy statement, or it is still to be determined?

But we are really care about the App Review side …

I don’t work for App Review and can’t make policy statements on their behalf.

So is there any way for us to contact the App Review team for a detailed policy statement, or it is still to be determined?

The form for contact App Review is here.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

So you mean all the APPs should support IPV6-only network even with OS versions lower than iOS 9?

I ran this question past the relevant folks at our end and got a formal answer to it. It’s included in the Supporting IPv6-only Networks pinned post.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Hello eskimo

APP how to detect whether the network environment in the IPV6-only?

Is there any way?


Thank you

APP how to detect whether the network environment in the IPV6-only?

You can get the list of local addresses using

getifaddrs
. However, you almost never want to do that because it’s hard to handle all of the edge cases. For example, if you put your device on an IPv6-only Wi-Fi, the Wi-Fi interface will eventually get an IPv4 address, it’s just a link-local IPv4 address (169.254/16).

It is much easier to write code that is address-format agnostic. If you need help with that, please post specifics.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

A related question, I found my iPhone got the IP like 169.254.254.143 and the DNS is 2001:2:0:aab1::1 after connected to Wi-Fi shown in [ Networking Overview ]. Is it correct ?

That seems reasonable:

  • 169.254.254.143 is an IPv4 link-local address (per RFC 3927). Apple devices will generate one of these if you connect them to a network that has no IPv4 infrastructure, which is the case for this test network.

  • 2001:2:0:aab1::1 is the IPv6 address of the Mac doing NAT64.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"
Supporting IPv6-only Networks - Queries
 
 
Q