美文网首页
ipv6被拒(更新版)

ipv6被拒(更新版)

作者: ttdiOS | 来源:发表于2017-10-10 11:16 被阅读256次

    ipv6被拒(更新版)

    这篇文章是对上一篇文章的后续更新,不懂的的请看第一章节:ipv6被拒

    上一篇文章是iOS原生socket(c语言)的网络通讯:

    c语言socket

    这篇文章用github上的CocoaAsyncSocket

    介绍请看github上流行通讯框架CocoaAsyncSocket的简单使用说明书

    由于后台以及flatbuffer的原因,通讯只能用串行,发送一个请求后必须等接收完后,才能发送下一个请求(用了c语言socket,CocoaAsyncSocketNSStream)都无果,会的大神请留言。。。

    这次是在更新版本的时候换了通讯框架用的CocoaAsyncSocket,第一个版本用的原生socket

    在用CocoaAsyncSocket也会出现ipv6被拒的情况

    一,首先说下更新版本的操作,

    1.1在x-code进行相关的操作

    1.1.1:TARGETS->General->Identity:

    Version:1.0.0

    Build:1.0.0

    每一次打包Build:的版本就要+1,比如这回1.0.0,下次打包就是1.0.1,一定要Build不同,不然Application loader会上传app store失败

    每一次打包Build:的版本就要+1 每一次打包Build:的版本就要+1

    1.1.2:TARGETS->Build Settings->搜索Code Signing,下全部改为:iOS Distribution

    Code Signing

    1.1.2:PROJECT->Build Settings->搜索Code Signing下也是做相对的操作

    PROJECT->Build Settings->搜索Code Signing

    1.1.4:TARGETS->Edit Scheme->Run->Info->Build configuration->Release

    Edit Scheme Run->Info->Build configuration->Release

    1.1.5:TARGETS->General->Signing下,一定要重新勾选Automatically manage signing

    并选中你的开发Team

    1.1.6:Clean一下

    无错误就开始打包

    1.1.7:TARGETS->Generic iOS Device一定要选中锤子(或者选中你的真机)然后在Product->Archive(点击就可以打包了)Archive的意思就是存档打包的意思。

    1.1.8:一定要选中Export,导出到桌面,然后用Application loader上传到app store

    Export

    用Application Loader上传到app store

    Application Loader

    点击选中你的桌面的ipa包上传

    二:接下来说下在官网的操作:

    2.1.1:更新版本的时候选平台或版本(红色箭头),进行新的构建版本,选中后会把版本1的信息直接复制过来,只需要添加自己的新内容就是,官网下方的build也要改为你刚才打包的build1.0.0

    这是和第一次上架所不同的地方

    选平台或版本(红色箭头)

    关于上架的详细的证书配置:参见:App上架流程(2017)

    三:CocoaAsyncSocket因为ipv6被拒解决方案

    https://github.com/robbiehanson/CocoaAsyncSocket/issues/405

    修改这里的代码:1.- (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]);

    //add codes blow

    if(address6)

    {

    [self setIPv6Enabled:YES];

    }

    ……

    }

    2.- (void)setIPv6Enabled:(BOOL)flag

    {

    // Note:YES means kIPv6Disabled is OFF

    dispatch_block_t block = ^{

    if (flag)

    config |= kPreferIPv6;   //replace by this

    else

    config |= kIPv6Disabled;

    };

    ......

    }

    3.GCDAsyncSocket.m

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

    //add codes blow

    ...

    if (address6) {

    [self setIPv4PreferredOverIPv6:NO];

    }

    BOOL preferIPv6 = (config & kPreferIPv6) ? YES : NO;

    ...

    (NSMutableArray *)lookupHost:(NSString *)host port:(uint16_t)port error:(NSError **)errPtr; find else if (res->ai_family == AF_INET6) branch, then replace by blow:

    struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)res->ai_addr;

    in_port_t *portPtr = &sockaddr->sin6_port;

    if ((portPtr != NULL) && (*portPtr == 0)) {

    *portPtr = htons(port);

    }

    NSData *address6 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen];

    [addresses addObject:address6];

    上方的这里都是在原码基础里改的。

    不会修改的小白可以参见:demo:https://github.com/mrzhao12/IPv6GCDAsyncSocket

    相关文章

      网友评论

          本文标题:ipv6被拒(更新版)

          本文链接:https://www.haomeiwen.com/subject/cltvyxtx.html