As of June 1, 2016, all apps submitted to the App Store must support IPv6-only networks. A majority of apps will not require any changes as IPv6 is already supported by NSURLSession and CFNetwork APIs. However, if your app utilizes IPv4-specific APIs or hardcoded IP addresses, you'll need to make changes. Make sure to test for IPv6 compatibility before submitting your app to the App Store for review.
For more information on supporting IPv6 networks, review Supporting IPv6 DNS64/NAT64 Networks.
Testing your app in an IPv6-only environment
You should test your app on an IPv6-only network. If you don’t have one, you can set up a test network by following the instructions in Test for IPv6 DNS64/NAT64 Compatibility Regularly.
IMPORTANT: If you’re testing with a WWAN-capable device, make sure to turn off WWAN before running your test. This will ensure your device is using the IPv6-only Wi-Fi.
Note: You can turn off WWAN using Settings > Cellular > Cellular Data (for English localizations outside of North America use Settings > Mobile > Mobile Data).
You don’t need to remove all references to IPv4-only constructs from your app as long as they behave correctly in an IPv6-only environment.
IMPORTANT: We encourage you to adopt address-family agnostic APIs rather than to maintain separate code paths for IPv4 and IPv6.
You don’t need to update your server immediately if it runs on the wider internet. Your server will be accessible to IPv6-only devices via DNS64/NAT64.
Note: You should eventually update your server to support IPv6 as a matter of course.
If you have a server embedded within your iOS app (for example, a web server that allows users to transfer files to and from your app), make sure it works well in an IPv6-only environment.
Synthesizing from an IPv4 address
As described in Use System APIs to Synthesize IPv6 Addresses, starting with iOS 9.2 and OS X v10.11.2, you can use getaddrinfo to synthesize an IPv6 address from an IPv4 address. Your app will be tested on a device running the latest released version of iOS.
WARNING: Synthesizing IPv6 addresses yourself is difficult. Specifically, it's not safe to form an IPv6 address by combining an IPv4 address with the Well-Known Prefix (64:ff9b::/96). This may work in some NAT64 networks, but it's not a general solution to the problem.
IPv4 network-based accessories
We strongly recommend that you modify your accessory to work on an IPv6-only network either by having the accessory support IPv6 or by having the accessory support IPv4 link-local addressing. Either option will allow your app to communicate with your accessory when both devices are placed on an IPv6-only network.
If your accessory supports neither of these options, and you can't revise the accessory to do so, your accessory is fundamentally incompatible with the requirement to support IPv6.
Note: The above only applies to your app’s communication with your accessory on a local network. Other aspects of your app are expected to work in an IPv6-only environment.