IPv6 App Store Rejection
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
In recent years, the shift towards IPv6 has gained momentum as the limitations of IPv4, such as address exhaustion, have become more pronounced. One aspect of this transition that has garnered attention is the policy of major app stores, particularly Apple's App Store, regarding IPv6 support. Many developers find their apps rejected due to insufficient IPv6 compatibility, raising concerns and questions about the requirements and best practices for developing IPv6-compliant applications.
Understanding IPv6 and IPv4
IPv4: Internet Protocol version 4 is the fourth version of the Internet Protocol (IP) and it uses a 32-bit address space, allowing for approximately 4.3 billion unique addresses. With the exponential growth of connected devices, IPv4 addresses are nearly exhausted.
IPv6: Developed to address the limitations of IPv4, Internet Protocol version 6 uses a 128-bit address space, providing an almost unlimited number of addresses, approximately unique ones. IPv6 also includes improvements in areas such as routing, security, and auto-configuration.
App Store Guidelines on IPv6
Why the Requirement?
Apple's App Store guidelines emphasize support for IPv6, driven by the need to future-proof applications and ensure compatibility with the latest internet standards. As many networks transition to IPv6, it's crucial for applications to function seamlessly in these environments.
Rejection Reasons:
Apps may face rejection for several IPv6-related reasons, including: • Hard-coded IPv4 Addresses: Applications that directly use IPv4 addresses without fallback mechanisms to handle IPv6. • Network Stack Misconfigurations: Improperly configured network protocols that do not support IPv6 environments. • Reliance on Deprecated APIs: Use of legacy APIs that are incompatible with IPv6 traffic.
Ensuring IPv6 Compatibility
To avoid rejection and facilitate a smooth approval process, developers need to implement the following best practices:
1. Use Hostnames Instead of IP Addresses
Applications should use domain names rather than hard-coded IP addresses. For example, resolving a hostname through DNS allows applications to retrieve either IPv4 or IPv6 addresses, as per network configuration.
2. Adopt Modern Networking APIs
Apple encourages the use of modern networking APIs like NSURLSession and CFNetwork, which handle both IPv4 and IPv6 natively. For instance, switching from the older NSURLConnection API to NSURLSession can streamline IPv6 compatibility.
3. Test in IPv6-Only Environment
Developers should test their applications under IPv6-only conditions. Apple provides documentation on setting up an IPv6 network using a Mac's internet sharing capabilities. This step ensures that an application can fully function in a network where only IPv6 is available.
Technical Examples
Example 1: Modifying HTTP Requests
Here's a sample Swift code snippet demonstrating using NSURLSession, ensuring it supports both IP protocols:
Related reading
- Is an entity body allowed for an HTTP DELETE request?
- Is asynchronous jdbc call possible?
- Is basic HTTP auth in CouchDB safe enough for replication across EC2 regions?
- Is boostasio tcp socket shutdown blocking or not?
- Is DOM manipulation asynchronous when using the API provided by the browsers like getElementById or appendChild?
- Is it a good idea to make 1 million individual http requests to a service from a kafka consumer?
- Is it better for a realtime multiplayer game server to send game statistics outbound via a socket or wait for an inbound socket connection?
- Is it okay to do database operations and API call in a single transaction?

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.