需要iPv6兼容性 - 苹果拒绝iOS应用程序

时间:2016-06-08 04:27:05

标签: ios itunesconnect ipv6

enter image description here

6月1日之后,我将我的离子应用程序提交给itunes connect,我收到了来自苹果的消息。

在IPv6网络上审核应用。 请确保您的应用支持IPv6网络,因为 IPv6兼容性 是必需的。

有关支持IPv6网络的信息,请参阅支持iPv6 DNS64 / NAT64网络。

有关网络概述,请参阅关于网络。

我已经使用AFNetworking进行API调用。

请帮助找出相同的解决方案。

感谢。

4 个答案:

答案 0 :(得分:20)

如果您使用的是特定于IPv4的API或硬编码的IP地址,则需要更新代码,尽管所有NSURLSession和CFNetwork API(包括NSURLConnection)都已支持IPV6

正如Apple所说:

  

在WWDC 2015上,我们宣布向仅IPv6网络服务过渡   在iOS 9.从2016年6月1日开始,所有应用程序都提交到App Store   必须支持仅IPv6网络。大多数应用程序不需要任何   更改,因为NSURLSession已经支持IPv6   CFNetwork API。

     

如果您的应用使用特定于IPv4的API或硬编码的IP地址,那么您就是   需要做一些改变。

虽然。 Apple还建议不要长期使用IP地址文字(不必要)

  
    

不要使用IP地址文字

  
     

确保您没有以点表示法传递IPv4地址文字   API,例如getaddrinfo和SCNetworkReachabilityCreateWithName。   相反,使用高级网络框架和地址不可知   API的版本,例如getaddrinfo和getnameinfo,并传递它们   主机名或完全限定的域名(FQDN)。见getaddrinfo(3)   Mac OS X开发人员工具手册页和getnameinfo(3)Mac OS X.   开发人员工具手册页。

     

注意:在iOS 9和OS X 10.11及更高版本中,NSURLSession和CFNetwork   在本地自动合成来自IPv4文字的IPv6地址   在DNS64 / NAT64网络上运行的设备。但是,你仍然应该   努力摆脱你的IP地址文字代码

如果您使用的是AFNetworking Library,请确保将其更新为3.x以上的版本,因为它们似乎已更新了一些内容。 - > AFNetworking Added support for IPv6 to Reachability.

详细信息,请点击此链接

Supporting IPv6-only Networks

另外,要测试

您可以按照此详细教程进行操作:

tutorial-how-to-test-your-app-for-ipv6-compatibility

答案 1 :(得分:13)

由于IPv6网络而导致Apple应用拒绝的解决方案

我对IPv6的互联网可访问性检查效果不佳。它总是显示没有网络。当我使用此代码时,苹果在24小时内批准了我的应用程序。致谢

更改 AFNetworking 类库中的代码中的以下行 AFNetworkReachabilityManager

将AF_INET更改为AF_INET6;

+ (instancetype)sharedManager {
    static AFNetworkReachabilityManager *_sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        struct sockaddr_in address;
        bzero(&address, sizeof(address));
        address.sin_len = sizeof(address);
        address.sin_family = AF_INET6;  //Change AF_INET TO AF_INET6
        _sharedManager = [self managerForAddress:&address];
    });

    return _sharedManager;
}

修改

$ grep -nr 'AF_INET*' .
./Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m:122:        address.sin_family = AF_INET;

replace

AF_INET; to AF_INET6;

答案 2 :(得分:7)

实际上我正在使用AFNetworking Library调用API。

我刚刚将Github中的 AFNetworkReachabilityManager 类替换为现有的类。苹果不再有问题了。

我的应用程序现在正常运作。

答案 3 :(得分:0)

从API URL中删除点表示法,因为IPv6网络不允许在URL中使用点表示法。我从API URL中删除了它的工作。