iOS中关于苹果审核IPv6的问题

在上苹果宣布iOS9将支持纯IPv6的网络服务 。2016年初开始所有提交到App Store的应用必须支持IPv6 。有好多人都是因为IPv6的问题上架被拒了,让人心惊胆战 。
总的来说有三个方面需要进行检查和修改:
1、项目里面涉及和网络有关的网络请求是否支持ipv6 。(如,,这些三方最好更新到最新的)
2、项目里面涉及和网络有关的sdk是否支持ipv6 。(如环信的聊天SDK等)
3、项目的服务器是否支持ipv6 。(这个很容易忽略,这个让后台去整就可以了)
有以下几条建议:
1.不建议使用底层的网络API
2.不要用IP地址
3.检查不兼容IPv6的代码
可以使用Mac本地搭建IPv6的测试环境,测试应用是否支持IPv6访问
附上链接:本地如何搭建IPv6环境测试你的APP
一、IPV6-Only支持是啥?
首先IPV6,是对IPV4地址空间的扩充 。目前当我们用iOS设备连接上Wifi、4G、3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,并且仍然可以通过此网络去获取IPV4地址提供的内容 。客户端向服务器端请求域名解析,首先通过DNS64 查询IPv6的地址,如果查询不到,再向DNS 查询IPv4地址,通过DNS64 合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端 。如图所示:
NAT64-DNS64-.png
在Mac OS 10.11+的双网卡的Mac机器(以太网口+无线网卡),我们可以通过模拟构建这么一个local IPv6 DNS64/NAT64 的网络环境去测试应用是否支持IPV6-Only网络,大概原理如下:
.png
二、Apple如何审核支持IPV6-Only?
首先第一点:这里说的支持IPV6-Only网络,其实就是说让应用在 IPv6 DNS64/NAT64 网络环境下仍然能够正常运行 。但是考虑到我们目前的实际网络环境仍然是IPV4网络,所以应用需要能够同时保证IPV4和IPV6环境下的可用性 。从这点来说,苹果不会去扫描IPV4的专有API来拒绝审核通过,因为IPV4的API和IPV6的API调用都会同时存在于代码中(不过为了减小审核被拒风险,建议将IPV4专有API通过IPV6的兼容API来替换) 。
其次第二点:Apple官方声明iOS9开始向IPV6支持过渡,在iOS9.2+支持通过方法将IPV4地址合成IPV6地址(ThetoIPv6was added toin iOS 9.2 and OS X 10.11.2) 。其提供的库在iOS8系统下,当从IPV4切换到IPV6网络,或者从IPV6网络切换到IPV4,是无法监控到网络状态的变化 。也有一些开发者针对这些Bug询问Apple的审核部门,给予的答复是只需要在苹果最新的系统上保证IPV6的兼容性即可 。
最后第三点:只要应用的主流程支持IPV6,通过苹果审核即可 。对于不支持IPV6的模块,考虑到我们现实IPV6网络的部署还需要一段时间,短时间内不会影响我们用户的使用 。但随着4G网络IPV6的部署,这部分模块还是需要逐渐安排人力进行支持 。
追加第四点:如果应用一直直接使用IPV4地址通过或者进行网络请求(一般需要服务器允许,且客户端需要在中伪装host);经测试,IPV6网络环境下,直接使用IPV4地址在iOS9及以上的系统仍然能够正常访问;在iOS8.4及以下不能正常访问;这一点苹果的解释和建议是这样的:
Note: In iOS 9 and OS X 10.11 and later,andIPv6from IPv4onon DNS64/NAT64 . , youstill work to rid your code of IP.
三、应用如何支持IPV6-Only?
对于如何支持IPV6-Only,官方给出了如下几点标准:(这里就不对其进行解释了,大家看上面的参考链接即可)
1. Use High-Level Networking Frameworks;2. Don’t Use IP Address Literals;3. Check Source Code for IPv6 DNS64/NAT64 Incompatibilities;4. Use System APIs to Synthesize IPv6 Addresses;