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:
So the question here is:
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.)
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!
NSURLConnection is in the recommended list, check Figure 10-5 inside Apples dns64/nat64 article here.
According to Apple: "The easiest way to test your app for IPv6 DNS64/NAT64 compatibility—which is the type of network most cellular carriers are deploying—is to set up a local IPv6 DNS64/NAT64 network with your Mac. You can then connect to this network from your other devices for testing purposes" full link can be found here.
P.S If you're using the sendAsynchronousRequest method you'll need to change it to [NSURLSession dataTaskWithRequest:completionHandler:] since it got deprecated.
I create a IPv6 environment based on this post, and test the main project managed now.
PS, the apple official document, Supporting IPv6 DNS64/NAT64 Networks has the same flow, teaching how to build a DNS64/NAT64
, IPv6 only
environment to test.
It seems fine when using AFNetworking
library, and NSURLConnection
related methods. But a 3rd party library used for P2P
connection failed.
Press the Option
key and click the Sharing
.
Create NAT64 Network
will appear when you press Option
on the above picture. If it's not present there, back to above step, and remember to press the Option
key.
iOS 8, IPv6 only issue
iOS 8 didn't have NAT64 support, so any iOS 8 device on an IPv6-only network would be hopelessly crippled. Based on that, I'm pretty sure that as long as your code uses the IPv4 APIs only when actually running on iOS 8 and earlier (i.e. run-time checks, not build-time checks), you should be fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With