1
votes

Apple App Store rejected my app with this message:

We discovered one or more bugs in your app when reviewed on iPad running iOS 11.4.1 on Wi-Fi connected to an IPv6 network.

enter image description here

Because of this I (too late) discovered that since June 2016 Apple requires that every app submitted to App Store should support IPv6-only networking, as written here https://developer.apple.com/support/ipv6/:

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.

The point is that my app doesn't have hardcoded IP addresses and for all the web calls I simply instantiate an HttpClient with default implementation; I already submitted other app based on the same one for other clients, but it's the first time that they rejected it for this reason. Moreover I don't have a way to do a test with IPv6 because my ISP doesn't support it, and also APN of my two mobile sims (internet.wind and mobile.vodafone.it) doesn't work in IPv6.

Is it possible that Apple does this test only once in a while and with other 5/10 submissions I was simply lucky?

1
I've had an app get failed for this reason when the real problem was something else - I'd suggest that you re-test the release version of your app before re-submittingJason
Apple has a doc on how to setup your Mac for Internet sharing that only exposes IPv6 to the Wifi adapter (IPv6 NAT64) thus using the NIC to connect to the "internet" (Note: this is not a true end-2-end IPv6 test as it is using NAT64 for translation to your IPv4-based Internet connection). You can then connect your iOS device to that Wifi IPv6-only SSID for testing, just search the Apple docs for it. Of course you can create a "in-house" IPv6-only network for testing and that is what I typically do for both iOS and Android network testing.SushiHangover
@Jason thank you, you are right and it was my case too.Mauro Piccotti
@SushiHangover, I've never tried but I'll do asapMauro Piccotti
The message states that they test on an IPv6-only network, but the actual problem in your code may be unrelated to IPv6.Michael Hampton

1 Answers

1
votes

After I discovered that the problem was due to the server, that during night (my night, afternoon in USA) was very slow, but reading documentation I've found this, that could be useful to other people: https://docs.microsoft.com/en-us/xamarin/cross-platform/macios/http-stack

April, 2018 – Due to increased security requirements, including PCI compliance, major cloud providers and web servers are expected to stop supporting TLS versions older than 1.2. Xamarin projects created in previous versions of Visual Studio default to use older versions of TLS.

In order to ensure your apps continue to work with these servers and services, you should update your Xamarin projects with the NSUrlSession setting shown below, then re-build and re-deploy your apps to your users.

So yes, for HttpClient implementation managed is the default option, and it's almost sure that if you have an old application on the iOS project settings you'll find that one. But Xamarin now suggests to use the NSUrlSession, so to avoid problems in the future is probably good to change it.

But it's almost sure that if you don't have any hardcoded IPv6 address you don't have to change anything in your code: https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html

If you’re writing a client-side app using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses. If you aren’t connecting by name, you probably should be.