AFNetworking和IPV6拒绝与iOS

通过应用程序审查过程发送了我们的应用程序,并因ipv6完整性问题而被拒绝。 我们的应用程序正在使用AFNetworking 3.1.0所以没有问题。 我们的API不兼容IPV6。 审查回来了,我们无法重现的崩溃。

我想我的第一个问题是:1)我们需要一些快速+脏的周末。 我们可以创build一个构build,而不必通过AFNetworking实际支持后端的ipv6吗?

2.)有没有其他的事情,我们需要与AFNetworking做,而不是有最新的一个? 是否有任何代码更改,以确保我们支持ipv6?

尝试在AFNetworking中find代码:

struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_len = sizeof(address); address.sin_family = AF_INET; 

将代码更新为:

 #if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) struct sockaddr_in6 address; bzero(&address, sizeof(address)); address.sin6_len = sizeof(address); address.sin6_family = AF_INET6; #else struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_len = sizeof(address); address.sin_family = AF_INET; #endif 

更新所有库,如果它使用:

 address.sin_family = AF_INET; 

我的部署目标仍然是iOS7,AFNetworking 3.1与AFNetworkReachabilityManager.m中接受的答案相同

当我在那里放置断点时,即使在我的iPhone 6S上进行testing时,我也会看到IPv4部分。 我相信这是苹果拒绝不支持IPv6的原因。

来自AFNetworking的代码使用IPHONE_OS_VERSION_MIN_REQUIRED,它只检查部署目标,而不检查设备上实际的iOS版本。 您可以轻松地将其更改为

 if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) { struct sockaddr_in6 address; bzero(&address, sizeof(address)); address.sin6_len = sizeof(address); address.sin6_family = AF_INET6; return [self managerForAddress:&address]; } else { struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_len = sizeof(address); address.sin_family = AF_INET; return [self managerForAddress:&address]; } 

它将转到iOS9和更新的IPv6代码。 我发送这个版本进行审查,让你知道这是否有帮助。