AFNetworking 和 IPV6 拒绝 iOS

Posted

技术标签:

【中文标题】AFNetworking 和 IPV6 拒绝 iOS【英文标题】:AFNetworking and IPV6 reject with iOS 【发布时间】:2016-10-20 02:55:58 【问题描述】:

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

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

2.) 除了拥有最新的更新之外,我们还需要对 AFNetworking 做些什么吗?是否有任何代码更改以确保我们支持 ipv6?

【问题讨论】:

ios 设备上运行的应用程序需要在纯 IPv6 网络上运行,而不是在服务器上运行。 Apple 有一套关于如何构建纯 IPv6 测试网络的说明。 确保您在应用内为服务器使用主机名而不是 IPv4 地址 AF 3.0.0 增加了对 IPv6 到可达性的支持。因此,您需要使用 IPV6 连接在本地调试应用程序以获取更多信息,请参阅此链接support.apple.com/en-in/HT202237 【参考方案1】:

尝试在AFNetworking中查找代码:

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;

【讨论】:

您好,谢谢您的回答。当我将其发送给审查时,我已经在代码中包含了它,但仍然被拒绝。我使用的是 AFNetworking 的 3.1.0,所以我认为应该没有任何问题。 您可以向审核团队索取崩溃日志,我们可以找出它的真正问题。 @John D,这能解决您的问题吗?看评论好像没有解决你的问题,但是为什么选择它来回答呢?【参考方案2】:

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

当我将断点放在那里时,即使我在 iPhone 6S 上进行测试,我也会看到它进入 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 代码。 我正在发送此构建以供审核,如果有帮助,请告知您。

【讨论】:

好的,发生了什么? 抱歉忘了说它已经通过了很多次审核,所以这个解决方法可以正常工作。

以上是关于AFNetworking 和 IPV6 拒绝 iOS的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 附带的 AFNetworking 1.3 不支持 IPv6

应用程序在运行 iOS 9.3.5 并连接到 IPv6 的 iPad 和 iPhone 上崩溃

与 ipv6 连接相关的 iOS 应用被苹果拒绝

如何测试 iOS 应用程序是不是支持 IPv6?苹果拒绝应用程序,因为它不兼容 IPv6

切换到IPV6时HttpClient抛出异常 - 从iOS Store拒绝

应用程序拒绝 NSUrlConnection IPv6 网络问题 iOS