2016-08-22 09:11:47 lk623177086 阅读数 23935
  • CCNA视频----从零开始学CCNA实验视频课程(加强版)

    本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也会重点演示。所以本课程也包含很多CCNP的重点内容,因为在工作中实在没法去区分CCNA还是CCNP。

    26846 人正在学习 去看看 晁海江
自前几天上架App Store时遇到这个问题.

2.2 Details

We discovered one or more bugs in your app when reviewed on iPhone running iOS 9.3.2 on Wi-Fi.

Specifically, we were unable to login the app at IPv6 network.

We've attached screenshot(s) for your reference. 


根据被拒原因的意思, 是发现app存在Bug,并且在IPv6环境下不能登录.

几经改了上, 上了被拒,然后再改再上,  终于是艰难的成功上架了!

自2016年6月份之后, apple需要所有上架的app适配Ipv6网的环境 !  一直没有更新项目的我, 一直等到近9月份才知道这个消息 !

首先,大家可以先搭建一个ipv6网的环境测试一下自己的项目, 也就是用mac做一个热点, 用手机连上去, 百度上一大堆方法,  不过需要非

wifi的网络环境,那么你就需要一个USB网线转换器, 因为mac没法插网线.

最后的结果是这样的:



然后运行了一个app,果然存在无法登陆的问题.


然后说一下我在修改过程中的解决方案.

1:跟后台开发人员商量了一下, 然后把项目中的地址 改成了 域名. 这个是需要后台改的!

2: 把项目中用到的第三方改了一下,  reachability  新浪微博 连连支付 友盟统计分析 微信 QQ 支付宝 百度地图等 这些第三方都需要更新

我项目中把AFNetworking改了一下,这个是必须改到3.0以上版本的,  期间ShareSDK更新了一次, 然后这个也改到最新版本了. 测试了一下,

没问题,然后又上了一次,  结果等了几天 又被拒了,发现还是Ipv6的问题 .

3: 但是测试没问题啊 , 我就给apple回复了邮件, 还截了图, 无效. 

最后百度了好几天方案,也想了好几天,终于是找到了问题的解决点.

虽然项目中用的是AFN第三方来请求的,  但是也有地方用到了NSURLconnection, 这个是最关键的.

因为这个网络请求是很老的, 现在已经不支持Ipv6了, 所以需要换成NSURLsession来请求.

然后我把项目中所用到的NSURLconnection请求改成了NSURLsession请求, 再次上线,成功上架! 


最后得出以下结论, 涉及支持ipv6的其实是包括三个方面的:

1, 项目里面涉及和网络有关的SDK是否支持ipv6.

2, 项目的服务器是否支持ipv6.

3,项目里涉及和网络有关的网络请求是否支持ipv6.



2017-06-05 17:58:08 Felicity294250051 阅读数 2297
  • CCNA视频----从零开始学CCNA实验视频课程(加强版)

    本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也会重点演示。所以本课程也包含很多CCNP的重点内容,因为在工作中实在没法去区分CCNA还是CCNP。

    26846 人正在学习 去看看 晁海江

现如今由于 IPv4 最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6 的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。所以说 apple 也强制要求我们的 App 需要支持 IPv6 互联网协议。

看到朋友发给我的一处被拒的信息报告:

被拒信息: Guideline 2.1 - Performance - App Completeness


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

Specifically, your app displays an activity indicator indefinitely for a few seconds when we attempt to login with the demo account but we were unable to advance past the login page.

Please see attached screenshots for details.

Next Steps

To resolve this issue, please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify any issues, then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. 

Resources

For information about supporting IPv6 Networks, please review Supporting IPv6 DNS64/NAT64 Networks and About Networking.

这是苹果反馈给我们的拒绝信息,具体表述为 要解决此问题,请在连接到IPv6网络(所有应用必须支持IPv6)的设备上运行您的应用程序以识别任何问题,然后修改并重新提交应用程序以供审核。


然后 apple 建议我们查看文档进行解决,于是我查看了官方文档 Supporting IPv6 DNS64/NAT64 Networks

请读者注意下图中标注的文字:


"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. "

可以译为:

"如果您正在使用高级网络API(如NSURLSession和CFNetwork框架)编写客户端应用程序,并且按名称进行连接,则不需要为应用程序更改任何内容以使用IPv6地址。"

也就是说,如果我们采用较为新的网络请求框架即可避免由于 IPv6 被拒。

再看文档中下图:


这些蓝色框内的 API 默认都是支持 IPv6 的。



所以,我们可以采用 NSURLSession 和 CFNetwork 进行网络请求。

如果采用 NSURLSession,那么当前比较成熟的网络请求框架就是 AFNetworking,最新版本的 AFNetworking 已经使用了 NSURLSession。

查看源码可知,AFN 确实部署了 IPv6 协议:



如果采用 CFNetwork,CFNetwork 的 API 默认是兼容 IPv4 与 IPv6 的。


如此便得以解决 IPv6 被拒的问题,如果不放心,可以自己去 Google 一下 IPv6 的环境部署搭建。在该环境下测试你的代码是否可以进行网络请求。


另外需要注意的是,一些项目中用的第三方 SDK,也可能存在不支持 IPv6 协议的问题。我曾经遇到过的就是 百度地图的 SDK,如果发生了类似的情况,大家去官网下载最新的 SDK 包,即可解决。




2018-06-15 16:48:18 lxyss 阅读数 296
  • CCNA视频----从零开始学CCNA实验视频课程(加强版)

    本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也会重点演示。所以本课程也包含很多CCNP的重点内容,因为在工作中实在没法去区分CCNA还是CCNP。

    26846 人正在学习 去看看 晁海江

iOS打包上架审核被拒, 反馈在IPv6网络下出现部分bug, 需要在ipv6网络下测试问题, mac笔记本网上查找都需要连网线才可以配置IPv6网络, 后来进入网络设置页面发现, 在WiFi网络下也可以私用. 

问题反馈:


使用方法

1. iPhone 使用USB连接;

2. 进入系统设置页面,按住 'option'按钮, 点击共享, 进入下面页面;


3.共享来源为WiF网络下, 选择NAT64网络, 共享方式选择iPhone USB(默认应该会全部选上), 勾选互联网共享, 选择启动;

4 断开手机所有网络, 现在手机会使用电脑共享的 IPv6.only 网络环境, 请求数据就好.


2018-04-15 13:25:31 pinapp666 阅读数 71
  • CCNA视频----从零开始学CCNA实验视频课程(加强版)

    本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也会重点演示。所以本课程也包含很多CCNP的重点内容,因为在工作中实在没法去区分CCNA还是CCNP。

    26846 人正在学习 去看看 晁海江

之前应用维护一下,被拒了,说是什么得支持IPV6,好吧。。。果然是苹果打个哈欠,iOS行业内就得起一次风暴呀。自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6,以及应用中哪些模块目前不支持IPV6。

一、IPV6-Only支持是啥?

首先IPV6,是对IPV4地址空间的扩充。目前当我们用iOS设备连接上Wifi、4G、3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络,并且仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Server合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端。如图所示:

1483938-b0ec6307df5176fe.png

NAT64-DNS64-ResolutionOfIPv4_2x.png

在Mac OS 10.11+的双网卡的Mac机器(以太网口+无线网卡),我们可以通过模拟构建这么一个local IPv6 DNS64/NAT64 的网络环境去测试应用是否支持IPV6-Only网络,大概原理如下:

1483938-90400afee99e61f9.png

local_ipv6_dns64_nat64_network_2x.png

参考资料:

https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1

二、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+支持通过getaddrInfo方法将IPV4地址合成IPV6地址(The ability to synthesize IPv6 addresses was added to getaddrinfo in iOS 9.2 and OS X 10.11.2)。其提供的Reachability库在iOS8系统下,当从IPV4切换到IPV6网络,或者从IPV6网络切换到IPV4,是无法监控到网络状态的变化。也有一些开发者针对这些Bug询问Apple的审核部门,给予的答复是只需要在苹果最新的系统上保证IPV6的兼容性即可

最后第三点:只要应用的主流程支持IPV6,通过苹果审核即可。对于不支持IPV6的模块,考虑到我们现实IPV6网络的部署还需要一段时间,短时间内不会影响我们用户的使用。但随着4G网络IPV6的部署,这部分模块还是需要逐渐安排人力进行支持。

追加第四点:如果应用一直直接使用IPV4地址通过NSURLConenction或者NSURLSession进行网络请求(一般需要服务器允许,且客户端需要在header中伪装host);经测试,IPV6网络环境下,直接使用IPV4地址在iOS9及以上的系统仍然能够正常访问;在iOS8.4及以下不能正常访问;这一点苹果的解释和建议是这样的:

Note: In iOS 9 and OS X 10.11 and later, NSURLSession and CFNetwork automatically synthesize IPv6 addresses from IPv4 literals locally on devices operating on DNS64/NAT64 networks. However, you should still work to rid your code of IP address literals.

三、应用如何支持IPV6-Only?

对于如何支持IPV6-Only,官方给出了如下几点标准:(这里就不对其进行解释了,大家看上面的参考链接即可)

1.UseHigh-LevelNetworking Frameworks;2. Don’tUseIP Address Literals;3.CheckSourceCodeforIPv6 DNS64/NAT64 Incompatibilities;4.UseSystemAPIstoSynthesize IPv6 Addresses;

3.1 NSURLConnection是否支持IPV6?

官方的这句话让我们疑惑顿生:

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

只说了NSURLSession和CFNetwork的API不需要改变,但是并没有提及到NSURLConnection。 从上文的参考资料中,我们看到NSURLSession、NSURLConnection同属于Cocoa的url loading system,可以猜测出NSURLConnection在ios9上是支持IPV6的。

应用里面的API网络请求,大家一般都会选择AFNetworking进行请求发送,由于历史原因,应用的代码基本上都深度引用了AFHTTPRequestOperation类,所以目前API网络请求均需要通过NSURLConnection发送出去,所以必须确认NSURLConnection是否支持IPV6. 经过测试,NSURLConnection在最新的iOS9系统上是支持IPV6的。

3.2 Cocoa的URL Loading System从iOS哪个版本开始支持IPV6?

目前我们的应用最低版本还需要支持iOS7,虽然苹果只要求最新版本支持IPV6-Only,但是出于对用户负责的态度,我们仍然需要搞清楚在低版本上URL Loading System的API是否支持IPV6.

(to fix me, make some experiments)待续~~~

3.3 Reachability是否需要修改支持IPV6?

我们可以查到应用中大量使用了Reachability进行网络状态判断,但是在里面却使用了IPV4的专用API。

在Pods:Reachability中AF_INETFiles:Reachability.mstruct sockaddr_inFiles:Reachability.h ,Reachability.m

那Reachability应该如何支持IPV6呢?

  • (1)目前Github的开源库Reachability的最新版本是3.2,苹果也出了一个Support IPV6 的Reachability的官方样例,我们比较了一下源码,跟Github上的Reachability没有什么差异。

  • (2)我们通常都是通过一个0.0.0.0 (ZeroAddress)去开启网络状态监控,经过我们测试,在iOS9以上的系统上IPV4和IPV6网络环境均能够正常使用;但是在iOS8上IPV4和IPV6相互切换的时候无法监控到网络状态的变化,可能是因为苹果在iOS8上还并没有对IPV6进行相关支持相关。(但是这仍然满足苹果要求在最新系统版本上支持IPV6的网络)。

  • (3)当大家都在要求Reachability添加对于IPV6的支持,其实苹果在iOS9以上对Zero Address进行了特别处理,官方发言是这样的:

reachabilityForInternetConnection: This monitors the address 0.0.0.0,

which reachability treats as a special token that causes it to actually

monitor the general routing status of the device, both IPv4 and IPv6.

+ (instancetype)reachabilityForInternetConnection {structsockaddr_in zeroAddress;    bzero(&zeroAddress,sizeof(zeroAddress));    zeroAddress.sin_len=sizeof(zeroAddress);    zeroAddress.sin_family= AF_INET;return[selfreachabilityWithAddress: (conststructsockaddr *) &zeroAddress];}

综上所述,Reachability不需要做任何修改,在iOS9上就可以支持IPV6和IPV4,但是在iOS9以下会存在bug,但是苹果审核并不关心。

四、底层的socket API如何同时支持IPV4和IPV6?

由于在应用中使用了网络诊断的组件,大量使用了底层的 socket API,所以对于IPV6支持,这块是个重头戏。如果你的应用中使用了长连接,其必然会使用底层socket API,这一块也是需要支持IPV6的。 对于Socket如何同时支持IPV4和IPV6,可以参考谷歌的开源库CocoaAsyncSocket.

下面我针对我们的开源网络诊断组件, 说一下是如何同时支持IPV4和IPV6的。

开源地址:https://github.com/Lede-Inc/LDNetDiagnoService_IOS.git

这个网络诊断组件的主要功能如下:

  • 本地网络环境的监测(本机IP+本地网关+本地DNS+域名解析);

  • 通过TCP Connect监测到域名的连通性;

  • 通过Ping 监测到目标主机的连通耗时;

  • 通过traceRoute监测设备到目标主机中间每一个路由器节点的ICMP耗时;

4.1 IP地址从二进制到符号的转化

之前我们都是通过inet_ntoa()进行二进制到符号,这个API只能转化IPV4地址。而inet_ntop()能够兼容转化IPV4和IPV6地址。 写了一个公用的in6_addr的转化方法如下:

1
//for IPV6+(NSString*)formatIPV6Address:(structin6_addr)ipv6Addr{NSString*address =nil;chardstStr[INET6_ADDRSTRLEN];charsrcStr[INET6_ADDRSTRLEN];    memcpy(srcStr, &ipv6Addr,sizeof(structin6_addr));if(inet_ntop(AF_INET6, srcStr, dstStr, INET6_ADDRSTRLEN) !=NULL){        address = [NSStringstringWithUTF8String:dstStr];    }returnaddress;}//for IPV4+(NSString*)formatIPV4Address:(structin_addr)ipv4Addr{NSString*address =nil;chardstStr[INET_ADDRSTRLEN];charsrcStr[INET_ADDRSTRLEN];    memcpy(srcStr, &ipv4Addr,sizeof(structin_addr));if(inet_ntop(AF_INET, srcStr, dstStr, INET_ADDRSTRLEN) !=NULL){        address = [NSStringstringWithUTF8String:dstStr];    }returnaddress;}

4.2 本机IP获取支持IPV6

相当于我们在终端中输入ifconfig命令获取字符串,然后对ifconfig结果字符串进行解析,获取其中en0(Wifi)、pdp_ip0(移动网络)的ip地址。

注意:

  • (1)在模拟器和真机上都会出现以FE80开头的IPV6单播地址影响我们判断,所以在这里进行特殊的处理(当第一次遇到不是单播地址的IP地址即为本机IP地址)。

  • (2)在IPV6环境下,真机测试的时候,第一个出现的是一个IPV4地址,所以在IPV4条件下第一次遇到单播地址不退出。

1
+ (NSString *)deviceIPAdress{while(temp_addr !=NULL) {            NSLog(@"ifa_name===%@",[NSString stringWithUTF8String:temp_addr->ifa_name]);// Check if interface is en0 which is the wifi connection on the iPhoneif([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"] || [[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"pdp_ip0"])            {//如果是IPV4地址,直接转化if(temp_addr->ifa_addr->sa_family == AF_INET){// Get NSString from C Stringaddress = [selfformatIPV4Address:((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr];                }//如果是IPV6地址elseif(temp_addr->ifa_addr->sa_family == AF_INET6){                    address = [selfformatIPV6Address:((struct sockaddr_in6 *)temp_addr->ifa_addr)->sin6_addr];if(address && ![address isEqualToString:@""] && ![address.uppercaseString hasPrefix:@"FE80"])break;                }            }            temp_addr = temp_addr->ifa_next;        }    }}

4.3 设备网关地址获取获取支持IPV6

其实是在IPV4获取网关地址的源码的基础上进行了修改,初开把AF_INET->AF_INET6, sockaddr -> sockaddr_in6之外,还需要注意如下修改,就是拷贝的地址字节数。去掉了ROUNDUP的处理。 (解析出来的地址老是少了4个字节,结果是偏移量搞错了,纠结了半天),具体参考源码库。

1
/* net.route.0.inet.flags.gateway */intmib[] = {CTL_NET, PF_ROUTE,0, AF_INET6, NET_RT_FLAGS, RTF_GATEWAY};if(sysctl(mib,sizeof(mib) /sizeof(int), buf, &l,0,0) <0) {        address = @"192.168.0.1";    }    ....//for IPV4for(i =0; i < RTAX_MAX; i++) {if(rt->rtm_addrs & (1<< i)) {                    sa_tab[i] = sa;                    sa = (structsockaddr *)((char*)sa + ROUNDUP(sa->sa_len));                }else{                    sa_tab[i] =NULL;                }            }//for IPV6for(i =0; i < RTAX_MAX; i++) {if(rt->rtm_addrs & (1<< i)) {                    sa_tab[i] = sa;                    sa = (structsockaddr_in6 *)((char*)sa + sa->sin6_len);                }else{                    sa_tab[i] =NULL;                }            }

4.4 设备DNS地址获取支持IPV6

IPV4时只需要通过res_ninit进行初始化就可以获取,但是在IPV6环境下需要通过res_getservers()接口才能获取。

1
+(NSArray*)outPutDNSServers{    res_state res = malloc(sizeof(struct__res_state));intresult = res_ninit(res);NSMutableArray*servers = [[NSMutableArrayalloc] init];if(result ==0) {unionres_9_sockaddr_union *addr_union = malloc(res->nscount *sizeof(unionres_9_sockaddr_union));        res_getservers(res, addr_union, res->nscount);for(inti =0; i < res->nscount; i++) {if(addr_union[i].sin.sin_family== AF_INET) {charip[INET_ADDRSTRLEN];                inet_ntop(AF_INET, &(addr_union[i].sin.sin_addr), ip, INET_ADDRSTRLEN);NSString*dnsIP = [NSStringstringWithUTF8String:ip];                [servers addObject:dnsIP];NSLog(@"IPv4 DNS IP: %@", dnsIP);            }elseif(addr_union[i].sin6.sin6_family== AF_INET6) {charip[INET6_ADDRSTRLEN];                inet_ntop(AF_INET6, &(addr_union[i].sin6.sin6_addr), ip, INET6_ADDRSTRLEN);NSString*dnsIP = [NSStringstringWithUTF8String:ip];                [servers addObject:dnsIP];NSLog(@"IPv6 DNS IP: %@", dnsIP);            }else{NSLog(@"Undefined family.");            }        }    }    res_nclose(res);    free(res);return[NSArrayarrayWithArray:servers];}

4.4 域名DNS地址获取支持IPV6

在IPV4网络下我们通过gethostname获取,而在IPV6环境下,通过新的gethostbyname2函数获取。

1
//ipv4phot = gethostbyname(hostN);//ipv6 phot = gethostbyname2(hostN, AF_INET6);

4.5 ping方案支持IPV6

Apple的官方提供了最新的支持IPV6的ping方案,参考地址如下:

https://developer.apple.com/library/mac/samplecode/SimplePing/Introduction/Intro.html

只是需要注意的是:

  • (1)返回的packet去掉了IPHeader部分,IPV6的header部分也不返回TTL(Time to Live)字段;

  • (2)IPV6的ICMP报文不进行checkSum的处理;

4.6 traceRoute方案支持IPV6

其实是通过创建socket套接字模拟ICMP报文的发送,以计算耗时;技术大神上架一个价格10K-80K

两个关键的地方需要注意:只要你上架到iOS的牛技术员随时都可以加 扣 扣  :4166-14474  备注:iOS技术

  • (1)IPV6中去掉IP_TTL字段,改用跳数IPV6_UNICAST_HOPS来表示;

  • (2)sendto方法可以兼容支持IPV4和IPV6,但是需要最后一个参数,制定目标IP地址的大小;因为前一个参数只是指明了IP地址的开始地址。千万不要用统一的sizeof(struct sockaddr), 因为sockaddr_in 和 sockaddr都是16个字节,两者可以通用,但是sockaddr_in6的数据结构是28个字节,如果不显式指定,sendto方法就会一直返回-1,erroNo报22 Invalid argument的错误。

关键代码如下:(完整代码参考开源组件)

1
//构造通用的IP地址结构stuck sockaddrNSString*ipAddr0 = [serverDNSsobjectAtIndex:0];//设置server主机的套接口地址NSData*addrData =nil;BOOLisIPV6 =NO;if([ipAddr0 rangeOfString:@":"].location==NSNotFound) {        isIPV6 =NO;structsockaddr_in nativeAddr4;        memset(&nativeAddr4,0,sizeof(nativeAddr4));        nativeAddr4.sin_len=sizeof(nativeAddr4);        nativeAddr4.sin_family= AF_INET;        nativeAddr4.sin_port= htons(udpPort);        inet_pton(AF_INET, ipAddr0.UTF8String, &nativeAddr4.sin_addr.s_addr);        addrData = [NSDatadataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)];    }else{        isIPV6 =YES;structsockaddr_in6 nativeAddr6;        memset(&nativeAddr6,0,sizeof(nativeAddr6));        nativeAddr6.sin6_len=sizeof(nativeAddr6);        nativeAddr6.sin6_family= AF_INET6;        nativeAddr6.sin6_port= htons(udpPort);        inet_pton(AF_INET6, ipAddr0.UTF8String, &nativeAddr6.sin6_addr);        addrData = [NSDatadataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)];    }structsockaddr *destination;    destination = (structsockaddr *)[addrData bytes];//创建socketif((recv_sock = socket(destination->sa_family, SOCK_DGRAM, isIPV6?IPPROTO_ICMPV6:IPPROTO_ICMP)) sa_family, SOCK_DGRAM,0)) <0)//设置sender 套接字的ttlif((isIPV6? setsockopt(send_sock,IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl,sizeof(ttl)):setsockopt(send_sock, IPPROTO_IP, IP_TTL, &ttl,sizeof(ttl))) <0)//发送成功返回值等于发送消息的长度ssize_t sentLen = sendto(send_sock, cmsg,sizeof(cmsg),0, (structsockaddr *)destination, isIPV6?sizeof(structsockaddr_in6):sizeof(structsockaddr_in));

如果说你已经按照上边步骤操作完成并且在本地用IPV6网络测试成功,但是app还是没有通过审核的话,那你就只能和苹果交涉了,可以写邮件说我此app已经支持iPV6网络,让他们重新测试,也可以直接回复他们。

Hope To Help You !

文章出自网络转发iOS的技术员大神可以加我相互学习交流!!!

2018-04-02 14:43:53 zhaojiao123456 阅读数 91
  • CCNA视频----从零开始学CCNA实验视频课程(加强版)

    本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也会重点演示。所以本课程也包含很多CCNP的重点内容,因为在工作中实在没法去区分CCNA还是CCNP。

    26846 人正在学习 去看看 晁海江

第一次遇到呢。

2. 1 PERFORMANCE: APP COMPLETENESS
Performance - 2.1
We discovered one or more bugs in your app when reviewed on iPad running iOS 10.2.1 on Wi-Fi connected to an IPv6 network.
- Sign up buttons receives an error when tapped. 
Please see attached screenshots for details.
Next Steps
Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify any issues, then revise and resubmit your app for review.


着急啊就在网上搜索一下,原来因为2.1被拒也不少。一时间也不太明白为什么数据加载缓慢,就悄悄在最新下载的AFNetworking.修改部分东西就OK了。重新上架APP。

https://blog.csdn.net/wangqinglei0307/article/details/60140744



没有更多推荐了,返回首页