In 2016 Apple announced that, starting June 1, 2016, all apps submitted to the App Store must support IPv6-only networking (see this developer news article). If you have specific follow-up questions about this policy, please feel free to post them to DevForums using the Network tag. Alternatively, if you want private, one-to-one help, you can open a DTS tech support incident.
At the end of this post you’ll find answers to some of the frequently asked questions about this announcement.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
#1 — What’s the best way to check that my app works in an IPv6-only environment?
You should test your app on an IPv6-only network. If you don’t have one handy, you can set up a test network by following the instructions in the Test for IPv6 DNS64/NAT64 Compatibility Regularly section of the Networking Overview.
IMPORTANT If you’re testing with a WWAN-capable device, make sure to turn off WWAN before running your test. That ensures that your device is actually using the IPv6-only Wi-Fi.
Note You can turn off WWAN using Settings > Cellular > Cellular Data (for English localisations outside of North America this is Settings > Mobile Data > Mobile Data).
#2 — Do I need to remove all references to IPv4-only constructs (things like gethostbyname
) from my app?
No. It’s fine for your app to reference, and even use, IPv4-only constructs as long as it behaves correctly in an IPv6-only environment.
IMPORTANT In our experience it is easier to adopt address-family agnostic APIs than to maintain separate code paths for IPv4 and IPv6, so we encourage you to do that.
#3 — Will I need to update my server?
That depends on where your server is running:
-
If you have a server running on the wider Internet, the answer is no. Your server will be accessible to IPv6-only devices via DNS64/NAT64.
You should update your server to support IPv6 as a matter of course, but that’s something you can do in your own time.
-
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.
#4 — My app relies on the system’s ability to synthesise an IPv6 address from an IPv4 address. What should I do on older systems?
As described in Use System APIs to Synthesize IPv6 Addresses, starting with iOS 9.2 and OS X 10.11.2 you can use getaddrinfo
to synthesise an IPv6 address from an IPv4 address. Your app will be tested on a device running the latest released version of iOS, so you can assume that this support is present.
WARNING Synthesising IPv6 addresses yourself is not easy. 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. If you need to synthesise IPv6 addresses, use getaddrinfo
on modern systems or see this post [1] for more background to this issue.
[1] Sadly, I was unable to find the new destination for this link, at least in the time that I had available to work on it today. If you have any ideas as to what it should be, please get in touch.
#5 — My app communicates with a local network-based accessory which requires IPv4 infrastructure. How can I meet this requirement?
We strongly recommend that you modify your accessory to work on an IPv6-only network. There are two approaches you can take:
-
Have the accessory support IPv6
-
Have the accessory support IPv4 link-local addressing (RFC 3927)
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. Please let App Review know about this when you submit your app. This is not grounds for rejection.
The above only applies to your app’s communication with your accessory on the local network. Other aspects of your app are expected to work in an IPv6-only environment. Specifically, if your app has a way to talk to an accessory across the wider Internet, it must be willing to do that over IPv6. This will work via DNS64/NAT64 in the same way as your communication with any other IPv4-only server.
#6 — App Review rejected my app, apparently for IPv6 compatibility problems. How can I investigate this?
The IPv6 and App Review post discusses some of the more common reasons for why your app might encounter networking problems during review.
Revision History
-
2024-02-06 Fixed some broken links. Fixed the formatting. Made other minor editorial changes.
-
2019-01-29 Refreshed various links. Made other minor editoral changes.
-
2016-06-23 Added FAQ #6.
-
2016-06-22 Added a discussion of the Well-Known Prefix to FAQ #4.
-
2016-05-31 Added FAQ #5.
-
2016-05-18 Added this change history. Added FAQ #4. Updated FAQ #1 to clarify the term WWAN and explicitly describe how to disable WWAN.
-
2016-05-17 Adding FAQs #1, #2 and #3.
-
2016-05-05 First posted.