1、苹果要求
从2016年6月1日提交到App Store的所有应用程序必须支持IPv6-only网络。
官方公告:Supporting IPv6-only Networks - Support - Apple Developer
大多数应用程序不需要任何变化的IPv6已经被NSURLSession和CFNetwork的API的支持。但是,如果你的应用程序使用的IPv4专用的API或硬编码的IP地址,您将需要做出改变。请务必提交应用到App Store审核,用于测试IPv6的兼容性。
有关支持IPv6网络的详细信息,查看 支持 IPv6 DNS64 / NAT64网络。
2、测试你的应用程序在纯IPv6环境中
你应该一个纯IPv6网络上测试您的应用程序。如果你没有一个,你可以按照说明建立了一个测试网络的IPv6 DNS64 / NAT64兼容性测试定期。
重要提示:如果你是一个WWAN功能的设备测试,确保运行测试之前关闭WWAN。这将确保你的设备使用的纯IPv6的无线网络连接。
注意:您可以关闭WWAN使用设置中启用>蜂窝>蜂窝数据(英文本地化北美使用设置>手机>移动数据之外)。
3、IPv4的引用
这是没有必要从应用中删除,以仅支持IPv4结构的所有引用。这是可以接受的这种提法,并使用仅支持IPv4的构造,只要他们正确运行在纯IPv6环境中。
重要提示:我们建议您采用地址家族无关的API,而不是维持IPv4和IPv6单独的代码路径。
4、服务器更新
如果你有更广泛的互联网上运行的服务器,它是没有必要立即更新您的服务器。你的服务器将通过DNS64 / NAT64仅IPv6设备进行访问。
注:最后,您应该更新您的服务器,以支持IPv6作为理所当然的事。
如果您有嵌入您的iOS应用中的服务器(例如,Web服务器,允许用户传输文件从您的应用程序),你应该确保它运作良好,在纯IPv6环境。
5、从IPv4地址合成
作为描述使用系统API来合成IPv6地址,开始与iOS 9.2和OS X v10.11.2,你可以使用的getaddrinfo从IPv4地址合成IPv6地址。你的应用程序将运行iOS的发布的最新版本的设备上进行测试。
警告:合成IPv6地址你自己是很难的。具体而言,它是不是安全通过组合公知的前缀的IPv4地址,以形成的IPv6地址(64:ff9b :: / 96
)。这可能会在一些NAT64网络上运行,但它不是解决问题的通用解决方案。
6、基于IPv4网络的配件
我们强烈建议您修改附件工作的纯IPv6网络上或者通过具有附件支持IPv6或具有附件支持IPv4链路本地地址。任一选项将允许当两个设备被置于纯IPv6网络上的应用程序与您的附件进行通信。
如果您的附件既不支持这些选项,而这是不可能让你修改附件这样做,你的附件是支持IPv6的要求根本不相容的。
注:以上仅适用于您的应用程序的通信与本地网络上的配件。您的应用程序的其他方面,预计在纯IPv6环境中工作。
7、App测试
用 macOS 模拟出的 IPv6 网络,最终通过路由器,还是链接到 IPv4的网络(国际IPv4地址已经分配完,但国内 IPv6 发展中,还没有全覆盖。)
注意事项:测试设备,不要有手机卡或虚拟卡等,避免通过 4G/5G流量 请求,导致无效的 IPv6 测试。
8、服务器(端)测试
服务端的 IPv6 测试,主要是知道请求的域名,然后通过第三方网络来测试,是不是兼容 ipv6,比如:
9、App的代码检查
注:这个方式,只能保证9.0以后的版本可以连,有游戏这样做暂时没收到反馈说不行。(包括安卓)
官方文档:Supporting IPv6 DNS64/NAT64 Networks
处理IP地址相关代码:
1 | int checkIP(char * ip) |
调用:
1 | char buf[128] = {0}; |
注:
不用改socket,原来什么样 就是什么样,就是把 ip 转换一下,然后 是ipv6的话 就用 AF_INET6 方式连接,域名部分不用管,用域名的话,解析的时候 是直接返回ipv6的地址
10、总结
关于 IPv6,可以参考下面的文档。内容比较多,这里就不一一讲解了。
参考
- Supporting IPv6-only Networks - Support - Apple Developer
- Supporting IPv6 DNS64/NAT64 Networks - 01
- Supporting IPv6 DNS64/NAT64 Networks - 02
- 如有侵权,联系必删!
- 如有不正确的地方,欢迎指导!
- 如有疑问,欢迎在评论区一起讨论!
注:本文首发于 iHTCboy’s blog,如若转载,请注来源。