准备万全的应用还是无法通过App Store审核?别着急,可能是IPv6的锅
最近很多开发者反映,自己的iOS应用明明已经考虑的事无巨细了,却还是无法通过App Store的审核,是不是苹果的审核规则变的更严格了?
这是因为有些开发者可能没有注意到,5月4日的时候苹果在其开发者官网上有发过这样一条通知
这条通知中提到,2016年6月1日开始,所有提交到App Store上的应用必须支持IPv6-only的网络。
苹果还在最新的 App Store Review Guidelines中增加了这样的表述
同时苹果也声明,大部分应用不需要进行任何更改,因为NSURLSession和CFNetwork API已经支持IPv6了,所以使用NSURLSession和CFNetwork API进行开发的开发者们大可不必担心这个问题。
但是,如果你的应用使用了IPv4专属API或硬编码IP地址,那么就需要开发者对自己的应用做出一些更改了。
这样看来,那些应用没有过审的开发者们可能就恍然大悟了,不是自己不给力,而是苹果太淘气。
那么问题来了,到底怎样才能让自己的应用支持IPv6-only网络呢?
在苹果官方的文档中,给出了以下几个解决方案确保IPv6 DNS64/NAT64的兼容性:
使用高级网络框架
不要直接使用IP地址
使用容量更大,足以存储IPv6地址的地址结构,比如sockaddr_storage
检查并删除不兼容IPv6 DNS64/NAT64的代码,比如:
无需预检(Preflight),直接连接网络
使用系统API生成IPv6地址
那么如何用Mac在本地搭建一个IPv6的测试环境呢?这里是操作步骤:
1.确保你的Mac以非Wi-Fi的方式连接到互联网
2.通过Dock、LaunchPad或Apple菜单打开系统偏好设置
3.按住键盘上的Option键并点击共享,且不要松开Option键
4.在共享服务列表中选择互联网共享
5.松开Option键
6.选择创建NAT64网络
7.选择一个网络接口,提供您的互联网连接
Tip:如果你的Mac是用有线拨号上网的话,请选择PPOE选项作为共享源。如果你的Mac是用有线上网(不用拨号的)的话,请选择Thunderbolt以太网有线网选项作为共享源。
8.将Wi-Fi选项打勾
9.点击Wi-Fi选项,配置网络名称和安全选项
10.选择互联网共享,启动本地网络
当共享处于活动状态后,在Wi-Fi显示处,会有一个朝上的箭头,这表示互联网共享已经启用,现在就有一个IPv6 NAT64网络可以让开发者并可以从其他设备访问并测试应用了。
Tip:为了确保测试只发生在本地IPv6网络上,请确保你的测试设备没有其他活动的网络接口。例如,如果你正在使用iOS设备进行测试,请确保蜂窝服务被禁用,所以你只能通过Wi-Fi测试。
环信IM已经支持IPv6,如果遇到提交审核因为网络问题没通过的检查下sdk版本号,V3.1.3/V2.2.5 以后支持IPv6,最新sdk下载地址http://www.easemob.com/download/im
这是因为有些开发者可能没有注意到,5月4日的时候苹果在其开发者官网上有发过这样一条通知
这条通知中提到,2016年6月1日开始,所有提交到App Store上的应用必须支持IPv6-only的网络。
苹果还在最新的 App Store Review Guidelines中增加了这样的表述
同时苹果也声明,大部分应用不需要进行任何更改,因为NSURLSession和CFNetwork API已经支持IPv6了,所以使用NSURLSession和CFNetwork API进行开发的开发者们大可不必担心这个问题。
但是,如果你的应用使用了IPv4专属API或硬编码IP地址,那么就需要开发者对自己的应用做出一些更改了。
这样看来,那些应用没有过审的开发者们可能就恍然大悟了,不是自己不给力,而是苹果太淘气。
那么问题来了,到底怎样才能让自己的应用支持IPv6-only网络呢?
在苹果官方的文档中,给出了以下几个解决方案确保IPv6 DNS64/NAT64的兼容性:
使用高级网络框架
不要直接使用IP地址
使用容量更大,足以存储IPv6地址的地址结构,比如sockaddr_storage
检查并删除不兼容IPv6 DNS64/NAT64的代码,比如:
inet_addr()将IPv4类型的代码转换为IPv6的形式
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
无需预检(Preflight),直接连接网络
使用系统API生成IPv6地址
那么如何用Mac在本地搭建一个IPv6的测试环境呢?这里是操作步骤:
1.确保你的Mac以非Wi-Fi的方式连接到互联网
2.通过Dock、LaunchPad或Apple菜单打开系统偏好设置
3.按住键盘上的Option键并点击共享,且不要松开Option键
4.在共享服务列表中选择互联网共享
5.松开Option键
6.选择创建NAT64网络
7.选择一个网络接口,提供您的互联网连接
Tip:如果你的Mac是用有线拨号上网的话,请选择PPOE选项作为共享源。如果你的Mac是用有线上网(不用拨号的)的话,请选择Thunderbolt以太网有线网选项作为共享源。
8.将Wi-Fi选项打勾
9.点击Wi-Fi选项,配置网络名称和安全选项
10.选择互联网共享,启动本地网络
当共享处于活动状态后,在Wi-Fi显示处,会有一个朝上的箭头,这表示互联网共享已经启用,现在就有一个IPv6 NAT64网络可以让开发者并可以从其他设备访问并测试应用了。
Tip:为了确保测试只发生在本地IPv6网络上,请确保你的测试设备没有其他活动的网络接口。例如,如果你正在使用iOS设备进行测试,请确保蜂窝服务被禁用,所以你只能通过Wi-Fi测试。
环信IM已经支持IPv6,如果遇到提交审核因为网络问题没通过的检查下sdk版本号,V3.1.3/V2.2.5 以后支持IPv6,最新sdk下载地址http://www.easemob.com/download/im