AFNetworking 和 IPV6 拒绝 iOS
AFNetworking and IPV6 reject with iOS
通过应用审核流程发出我们的应用,但由于 ipv6 完整性问题而被拒绝。我们的应用程序使用的是 AFNetworking 3.1.0,所以没有问题。我们的 API 不兼容 IPV6。审查回来时发生了我们也无法重现的崩溃。
我想我的第一个问题是:
1.) 周末我们需要一些快速+肮脏的东西。我们可以只创建一个构建而不必通过 AFNetworking 在后端实际支持 ipv6 吗?
2.) 除了拥有最新版本之外,我们还需要使用 AFNetworking 做其他事情吗?是否有任何代码更改以确保我们支持 ipv6?
尝试在 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;
我的部署目标仍然是 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 代码。
我将发送此版本以供审核,如果有帮助,请告诉您。
通过应用审核流程发出我们的应用,但由于 ipv6 完整性问题而被拒绝。我们的应用程序使用的是 AFNetworking 3.1.0,所以没有问题。我们的 API 不兼容 IPV6。审查回来时发生了我们也无法重现的崩溃。
我想我的第一个问题是: 1.) 周末我们需要一些快速+肮脏的东西。我们可以只创建一个构建而不必通过 AFNetworking 在后端实际支持 ipv6 吗?
2.) 除了拥有最新版本之外,我们还需要使用 AFNetworking 做其他事情吗?是否有任何代码更改以确保我们支持 ipv6?
尝试在 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;
我的部署目标仍然是 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 代码。 我将发送此版本以供审核,如果有帮助,请告诉您。