一、关于IPV6审核问题
最近上架爆出很多IPV6的问题,也不知道苹果怎么了。具体出现这个问题的原因众说纷纭,但是因为苹果不具体给出原因所以无法确定。
具体原因主要有以下几种:
- 移动端iPhone端未支持IPV6
- 服务器端未支持IPV6或者服务器所在的DNS服务器未支持IPV6地址的查询响应
- 移动端iPhone端支持IPV6测试没问题,但是苹果测试的时候都是用PAD来测试的,所以我们也需要用PAD来测试下看是否也OK
解决办法有以下几种:
- 确定iPhone端和iPad端都支持IPV6,然后服务器支持IPV6或者服务器所在的DNS服务器支持IPV6地址的查询响应,那么可以录制视频申诉
- 购买海外或者香港服务器,审核的时候用海外或者香港服务器,过审核之后再切回国内服务器
二、搭建iOS端IPV6测试环境
具体的我们iOS端支不支持IPV6我们需要通过搭建测试环境来看,具体搭建步骤如下。
1、IPV6简介
- 与IPV6一起相对的是IPV4,这是IP地址的两种表示方式.
- IPV4是32位,采用点分十进制,分四段,每段8位,每一段将8位二进制化成十进制就有了点分十进制,示例如右:192.168.1.101。但是早在20年前就基本上快不够分了,具体的有ABCDE等几类地址,这个可以百度详查。32位可供用的地址的确不能满足日益庞大的网络用户去分,为了延缓这个问题,出了NAT(网络地址转换)技术,这个技术的核心思想是将地址分为公网地址和私网地址,然后私网地址在网络出口的时候转换成公网地址去访问公网资源。但是这毕竟只是延缓,不能解决根本问题。
- IPV6地址,这个是128位的,采用:分割的方式,分8段,每一段16位,将每一段的16位二进制化成4位16进制,示例如右:2001:0000: 1F1F :0000:0000:0100: 11A0:ADDF。
2、搭建测试环境
- 所需工具:MAC电脑一台,测试设备(iPhone)一台,网络转换口(下面附截图)一个
这个苹果官网价格很贵,可以到天猫淘宝买一个几十块钱
- 将MAC电脑连接网络转换口,一端接MAC电脑,一端接以太网口(RJ45口,具体百度),请确保这个以太网口另外一端是能连接外网的.然后确定MAC能通过这个以太网口去上网,而不是通过WiFi上网
- 确保MAC通过有线上网后,我们就要开始搭建测试环境了,打开系统偏好设置,左上角苹果图标->系统偏好设置,如下:
- 找到共享,然后在系统偏好这个界面按住Option键+单击以上图示中的共享,出现如下画面:
- 勾选创建NAT64网络:
- 勾选共享来源:
-
如果是USB转RJ45的,那么选择类似以下的接口来共享
:
- 如果是Thunderbolt转RJ45的,那么选以下类似的接口来共享:
- 再勾选下图中的Wi-Fi:
- 点击下图中的创建NAT64网络右边的”Wi-Fi选项...“:
- 设置好Wi-Fi后,单击如下选项:
- 勾选互联网共享后,就会出现如下对话框:
-
点击启动后过十几秒就会发射一个kodiewifi出来,如果出现以下的情况证明网络已经建好:
- 然后我们用测试设备连接这个WiFi来测试,此处选用iPhone来测试,连接WiFi后像如下情况就正常了:
对比下普通的WiFi,明显能看到点分十进制和冒号的区别:
- 然后打开浏览器先测试下网络是否正常,如果正常,然后再行测试下你的工程项目是否能够正常运行,如果能够正常运行说明IPV6没有问题,然后最好将你的项目运行在iPad上再次测试一下。
备注
- 在使用 IPv6 的热点时候,保证手机只在 Wi-Fi 下上网,以免手机在连接不到网络时候,会默认跳转到使用蜂窝移动网络(即2G、3G、4G流量)上网,而且苹果手机如果这个WiFi上不了网很容易自动切换到之前的WiFi去上,所以这个一定要注意哦~~~
- 注意如果说你连上IPV6热点后,发现手机上不了网,请检查下如下配置是否开启:
以上默认是开启的,但是如果是升级Yosemit系统后不能设置IP地址上网请看以下解决方案:
打开终端按如下命令操作
1.列出你的网卡
networksetup -listallnetworkservices
2.关闭ipv6
networksetup -setv6off "网卡名字"
注:
关于”网卡名字“,有线网一般默认名字是Ethernet,无线网默认名字是Wi-Fi,在第1步的命令里可以看到。在2步中网卡名字有没有引号好像都可以。
具体看Mac收集的技巧及bug
还有其他设置网络的设置:
networksetup -listnetworkserviceorder
networksetup -listallnetworkservices
networksetup -listallhardwareports
networksetup -detectnewhardware
networksetup -getmacaddress <hardwareport or device name>
networksetup -getcomputername
networksetup -setcomputername <name>
networksetup -getinfo <networkservice>
networksetup -setmanual <networkservice> <ip> <subnet> <router>
networksetup -setdhcp <networkservice> [clientid]
networksetup -setbootp <networkservice>
networksetup -setmanualwithdhcprouter <networkservice> <ip>
networksetup -getadditionalroutes <networkservice>
networksetup -setadditionalroutes <networkservice> [ <dest> <mask> <gateway> ]*
networksetup -setv4off <networkservice>
networksetup -setv6off <networkservice>
networksetup -setv6automatic <networkservice>
networksetup -setv6LinkLocal <networkservice>
networksetup -setv6manual <networkservice> <networkservice> <address> <prefixlength> <router>
networksetup -getv6additionalroutes <networkservice>
networksetup -setv6additionalroutes <networkservice> [ <dest> <prefixlength> <gateway> ]*
networksetup -getdnsservers <networkservice>
networksetup -setdnsservers <networkservice> <dns1> [dns2] [...]
networksetup -getsearchdomains <networkservice>
networksetup -setsearchdomains <networkservice> <domain1> [domain2] [...]
networksetup -create6to4service <newnetworkservicename>
networksetup -set6to4automatic <networkservice>
networksetup -set6to4manual <networkservice> <relayaddress>
networksetup -getftpproxy <networkservice>
networksetup -setftpproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setftpproxystate <networkservice> <on off>
networksetup -getwebproxy <networkservice>
networksetup -setwebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setwebproxystate <networkservice> <on off>
networksetup -getsecurewebproxy <networkservice>
networksetup -setsecurewebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setsecurewebproxystate <networkservice> <on off>
networksetup -getstreamingproxy <networkservice>
networksetup -setstreamingproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setstreamingproxystate <networkservice> <on off>
networksetup -getgopherproxy <networkservice>
networksetup -setgopherproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setgopherproxystate <networkservice> <on off>
networksetup -getsocksfirewallproxy <networkservice>
networksetup -setsocksfirewallproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
networksetup -setsocksfirewallproxystate <networkservice> <on off>
networksetup -getproxybypassdomains <networkservice>
networksetup -setproxybypassdomains <networkservice> <domain1> [domain2] [...]
networksetup -getproxyautodiscovery <networkservice>
networksetup -setproxyautodiscovery <networkservice> <on off>
networksetup -getpassiveftp <networkservice>
networksetup -setpassiveftp <networkservice> <on off>
networksetup -getairportnetwork <device name>
networksetup -setairportnetwork <device name> <network> [password]
networksetup -getairportpower <device name>
networksetup -setairportpower <device name> <on off>
networksetup -listpreferredwirelessnetworks <device name>
networksetup -addpreferredwirelessnetworkatindex <device name> <network> <index> <security type> [password]
networksetup -removepreferredwirelessnetwork <device name> <network>
networksetup -removeallpreferredwirelessnetworks <device name>
networksetup -getnetworkserviceenabled <networkservice>
networksetup -setnetworkserviceenabled <networkservice> <on off>
networksetup -createnetworkservice <newnetworkservicename> <hardwareport>
networksetup -renamenetworkservice <networkservice> <newnetworkservicename>
networksetup -duplicatenetworkservice <networkservice> <newnetworkservicename>
networksetup -removenetworkservice <networkservice>
networksetup -ordernetworkservices <service1> <service2> <service3> <...>
networksetup -getMTU <hardwareport or device name>
networksetup -setMTU <hardwareport or device name> <value>
networksetup -listvalidMTUrange <hardwareport or device name>
networksetup -getmedia <hardwareport or device name>
networksetup -setmedia <hardwareport or device name> <subtype> [option1] [option2] [...]
networksetup -listvalidmedia <hardwareport or device name>
networksetup -createVLAN <VLAN name> <parent device name> <tag>
networksetup -deleteVLAN <VLAN name> <parent device name> <tag>
networksetup -listVLANs
networksetup -listdevicesthatsupportVLAN
networksetup -isBondSupported <hardwareport>
networksetup -createBond <bondname> <hardwareport1> <hardwareport2> <...>
networksetup -deleteBond <bonddevicename>
networksetup -addDeviceToBond <hardwareport> <bonddevicename>
networksetup -removeDeviceFromBond <hardwareport> <bonddevicename>
networksetup -listBonds
networksetup -showBondStatus <bonddevicename>
networksetup -listpppoeservices
networksetup -showpppoestatus <service name ie., MyPPPoEService>
networksetup -createpppoeservice <device name ie., en0> <service name> <account name> <password> [pppoe service name]
networksetup -deletepppoeservice <service name>
networksetup -setpppoeaccountname <service name> <account name>
networksetup -setpppoepassword <service name> <password>
networksetup -connectpppoeservice <service name>
networksetup -disconnectpppoeservice <service name>
networksetup -getcurrentlocation
networksetup -listlocations
networksetup -createlocation <location name> [populate]
networksetup -deletelocation <location name>
networksetup -switchtolocation <location name>
networksetup -listalluserprofiles
networksetup -listloginprofiles <service name>
networksetup -enablesystemprofile <service name> <on off>
networksetup -enableloginprofile <service name> <profile name> <on off>
networksetup -enableuserprofile <profile name> <on off>
networksetup -import8021xProfiles <service name> <file path>
networksetup -export8021xProfiles <service name> <file path> <yes no>
networksetup -export8021xUserProfiles <file path> <yes no>
networksetup -export8021xLoginProfiles <service name> <file path> <yes no>
networksetup -export8021xSystemProfile <service name> <file path> <yes no>
networksetup -settlsidentityonsystemprofile <service name> <file path> <passphrase>
>networksetup -settlsidentityonuserprofile <profile name> <file path> <passphrase>networksetup -deletesystemprofile <service name>
networksetup -deleteloginprofile <service name> <profile name>
networksetup -deleteuserprofile <profile name>
networksetup -version
networksetup -help
networksetup -printcommands
下图中的设置分别是:
关闭:networksetup -setv6off <networkservice>
手动:networksetup -setv6automatic <networkservice>
本地:networksetup -setv6LinkLocal <networkservice>
三、服务器端测试
苹果明确表示服务器不需要支持 IPv6,但是有一点苹果没有指出来需要说明一下:虽然你的服务器不用支持 IPv6,但是我苹果这边会用IPV6的地址来测试访问你的服务器域名,如果我们服务器所挂的DNS服务器不支持IPV6地址前来查询那么也就无法响应网络请求了。如果你的服务器是IPV4地址,那么DNS服务器上可以添加一条域名与IPV6地址的解析条目,然后解析出来的IPV6地址指向一台中转路由器(IPV6<=>IPV4),这样通过中转路由器出来的就是IPV4地址了,这样就可以大大方方响应你的网络请求了。
测试是否支持IPV6查询,终端输入以下命令:
dig +nocmd +nostats www.baidu.com AAAA
解析后的结果如下,那说明是支持的:
具体的可参见:
App store 应用审核由于 IPv6 网络问题被拒的一点分析
【指南】本地如何搭建IPv6环境测试你的APP
搭建IPv6本地环境测试App
以上!!!