Supporting IPv6-only Networks

Starting June 1, 2016, all apps submitted to the App Store must support IPv6-only networking. 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 hard-coded IP addresses, you will need to make changes. Be 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).

IPv4 references

It is not necessary to remove all references to IPv4-only constructs from your app. It is acceptable to have such references and use IPv4-only constructs so 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.

Server updates

If you have a server running on the wider Internet, it is not necessary to update your server immediately. 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), you should 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 is 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 is 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 it’s not possible for you to 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.