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

在这里输入图像描述

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

应用程序在IPv6networking上进行审查。 请确保您的应用程序支持IPv6networking ,因为需要 IPv6兼容性

有关支持IPv6networking的信息,请参阅支持iPv6 DNS64 / NAT64networking。

有关networking概述,请参阅关于networking。

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

请帮助找出相同的解决scheme。

谢谢。

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

正如苹果所提到的:

在WWDC 2015上,我们宣布在iOS 9中过渡到纯IPv6networking服务。从2016年6月1日起,提交给App Store的所有应用程序必须支持纯IPv6networking。 大多数应用程序不需要任何更改,因为NSURLSession和CFNetwork API已经支持IPv6。

如果您的应用程序使用特定于IPv4的API或硬编码的IP地址,则需要进行一些更改。

虽然。 苹果也build议不要使用IP地址文字,长期(不是必需的)

不要使用IP地址文字

确保您不是以点表示forms将IPv4地址文字传递给getaddrinfo和SCNetworkReachabilityCreateWithName等API。 而是使用高级networking框架和API的地址无关版本(例如getaddrinfo和getnameinfo),并传递它们的主机名或完全限定的域名(FQDN)。 请参阅getaddrinfo(3)Mac OS X开发人员工具手册页和getnameinfo(3)Mac OS X开发人员工具手册页。

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

如果您正在使用AFNetworking Library,请确保将其更新到3.x以上的版本,因为它们似乎已经更新了less量的东西。 – > AFNetworking增加了对IPv6可达性的支持。

有关详细信息,请点击此链接

支持纯IPv6networking

另外,要testing

你可以按照这个详细的教程:

教程如何对testing您的应用程序内换了IPv6的兼容性

由于IPv6networking而导致的苹果应用拒绝解决scheme

我对IPv6的互联网可达性检查工作不好。它总是显示networking不存在。当我使用此代码时,苹果在24小时内批准了我的应用程序。 谢谢

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

将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; 

其实我正在使用AFNetworking库调用API。

我只是用我现有的类从GithubreplaceAFNetworkReachabilityManager类。 而苹果不再有问题了。

而我的应用程序现在工作。