苹果公司要求在6月1号之后上架Appstore的应用必须通过ipv6兼容测试。

最近到了八月份,开始发现新上架的app没有通过,查看了下原因,说没有适配IPV6。

首先在本地搭建一个IPV6的测试环境,使用mac搭建详情请看 http://blog.csdn.net/yuwuchaio/article/details/51459705

如果项目用使用了XMPP 你会发现在IPV6环境下根本登陆不上了,究极原因,是因为XMPP使用了第三方的socket库:CocoaAsyncSocket,里面包含了GCDAsyncSocket.h和GCDAsyncSocket.m文件。阅读源码可以发现,GCDAsyncSocket中已经对ipv4和ipv6同时做了支持,但是为何在ipv6情况下会connect失败呢。

查看代码执行过程可以发现,在方法

-  (BOOL)connectWithAddress4:(NSData *)address4 address6:(NSData *)address6 error:(NSError **)errPtr;

中BOOL useIPv6变量被置为NO,从而导致代码不执行ipv6的创建操作,而是执行ipv4的创建,从而导致连接始终失败。

找到了问题的原因,下面就可以对其进行处理解决。对上文提到的方法进行修改。代码如下:

- (BOOL)connectWithAddress4:(NSData *)address4 address6:(NSData *)address6 error:(NSError **)errPtr
{
LogTrace(); NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); LogVerbose(@"IPv4: %@:%hu", [[self class] hostFromAddress:address4], [[self class] portFromAddress:address4]);
LogVerbose(@"IPv6: %@:%hu", [[self class] hostFromAddress:address6], [[self class] portFromAddress:address6]); // 增加的代码
if(address6) {
[self setIPv6Enabled:YES];
} ... }

另外在setIPv6Enabled:方法中也做如下的修改

- (void)setIPv6Enabled:(BOOL)flag
{
// Note: YES means kIPv6Disabled is OFF dispatch_block_t block = ^{ if (flag) {
// config &= ~kIPv6Disabled;
config |= kPreferIPv6; //修改后代码
}
else
config |= kIPv6Disabled;
}; if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey))
block();
else
dispatch_async(socketQueue, block);
}

以上,两个地方的修改,已经可以顺利通过IPV6的环境测试了。

最新文章

  1. Python (一) 简介、安装
  2. mac下配置xampp多端口
  3. NodeJS入门(五)—— process对象
  4. Clang Format
  5. Azure Service Febric 笔记:Web API应用
  6. 输入三个数a,b,c,要示按由小到大的顺序输出
  7. OC block的简单使用
  8. PostgreSQL Monitor pg_activity
  9. equals 与 == 的区别和用法(C# & Java)【转】
  10. include<stdio.h> 和include<iostream.h>的区别
  11. HDU 5294 Tricks Device (最短路,最大流)
  12. Windows 设置时间同步
  13. Floodfill算法——求独立子图个数
  14. The project target (Android 6.0) was not properly loaded或者The rendering target (Android 6.0) is still loading.
  15. iis8.0配置 使用备忘 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
  16. 伸缩的菜单,用toggle()重写
  17. git在项目中的实际运用
  18. 通过SID查找历史执行的SQL语句
  19. 网龙“MAD技术论坛”在榕举办 200余位技术人才共话“改变教育”
  20. 洛谷 4364 [九省联考2018]IIIDX——“预留”的思路

热门文章

  1. Cocos2d-x获取随机数
  2. The Shortest Path in Nya Graph
  3. 初来咋到先试试windows live writer
  4. HW5.5
  5. SRM144 - SRM 148(少144-DIV1-LV3,147-DIV2-LV3)
  6. SqlServer定时跑一段SQL语句
  7. NSThread常见方法
  8. Junit中常用的注解说明
  9. 适合高级Java程序员看的12本书
  10. jQuery Mobile方向感应事件