Search code examples
iosios9nsurlconnectionipv6

Do I need to replace NSURLConnection in order to achieve mandatory support for IPv6-only services?


As Apple is requesting app submitted for review must support IPv6-only network starting from 1st June 2016, I am checking if I need to replace certain API / libraries in my app. However I don't know much enough about networking and some related aspects, as a result I am unable to have a definite answer on this and would like to seek for help.

Regarding the document Supporting IPv6 DNS64/NAT64 Networks provided by Apple, it states that apps should be fine and no need to perform update if:

you’re writing a client-side app using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name

By this I take it as 2 criteria:

  1. using NSURLSession or CFNetwork
  2. connect by name

So the question here is:

  1. As far as I know NSURLConnection is based on CFNetwork, does this mean I will be fine too if my app is using NSURLConnection? (I saw NSURLConnection is also mentioned in this image in the above document, but again I am not quite sure about this as NSURLConnection is kind of old? And seems I cannot find documents mentioning IPv4 and IPv6 support either.)

  2. By the criteria "calling by name", does this mean no matter I am using NSURLSession or NSURLConnection, if I happen to call or access certain resources / APIs by an IPv4 address, bad things will happen? (I've done some research, and from my understanding clients like iOS device with iOS 9+ will always use synthesized IPv6 address to access IPv4 server, as a result the client will fail to reach the resource if I call by IPv4 address?)

Thanks for any help!


Solution

    1. It will probably be fine. But you can just test it yourself by connecting to a NAT64 network created by your Mac and see if your app works.
    2. Both names and IPv4 literals will work if you use the higher-level APIs in iOS 9.2+.