AFNetworking和IPV6拒绝使用iOS

时间:2016-10-20 02:55:58

标签: ios afnetworking ipv6

通过应用审核流程发送了我们的应用,并因ipv6完整性问题而遭到拒绝。我们的应用程序正在使用AFNetworking 3.1.0,所以没有问题。我们的API不兼容IPV6。该评论正在以我们无法复制的崩溃回来。

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

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

2 个答案:

答案 0 :(得分:3)

尝试在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;

答案 1 :(得分:0)

我的部署目标仍然是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代码。 我发送此版本以供审核,如果有帮助,请告知您。