IPv6 Address Synthesis on Older Systems

One question that’s been raised a bunch of times here on DevForums relates to IPv6 address synthesis. I’ve just updated the Supporting IPv6-only Networks pinned post to offer formal guidance on this topic (see FAQ #4). However, I want to follow up with some personal opinions.

My main point is that, while the above-mentioned guidance means that you don’t have to worry about this issue during App Review, you still have to worry about customers running your app on a device running an older version of iOS that’s attached IPv6-only network. You have a bunch of options to handle that case:

  • use a DNS name — This is the best option, in that connecting to a DNS name solves this problem and helps in a bunch of other cases as well (for example, it’ll improve compatibility with VPN On Demand).

  • raise your deployment target to 9.2 — This is the simplest correct option, allowing you to avoid this issue without writing any code.

  • support IPv6 on your servers — If your change your servers to support IPv6, you’ll be able to connect to them using an IPv6 address or an IPv4 address depending on your environment.

  • detect and specifically handle NAT64 — It’s technically possible to implement your own address synthesis using the algorithm described in RFC 7050. However, we recommend against you doing this because

    • implementing this correctly involves a lot of ugly low-level networking code

    • that code will have a very limited lifespan; a year or two from now you’ll be able to safely assume iOS 9.2, at which point all of that effort will have been wasted

  • you can apply the ostrich algorithm — Personally I wouldn’t do this but, ultimately, you are responsible for your relationship with your customers.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Replies

thank you