需要 iPv6 兼容性 - iOS 应用被苹果拒绝

required iPv6 compatibility - iOS app rejected by apple

6 月 1 日后,我将我的 ionic 应用程序提交到 itunes connect,我收到了苹果的消息。

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

有关支持 IPv6 网络的信息,请参阅支持 iPv6 DNS64/NAT64 网络。

有关网络概述,请参阅关于网络。

我已经使用 AFNetworking 进行 API 通话。

请帮忙找出相同的解决方案。

谢谢。

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

Apple 提到的:

At WWDC 2015 we announced the transition to IPv6-only network services in iOS 9. Starting June 1, 2016 all apps submitted to the App Store must support IPv6-only networking. Most apps will not require any changes because IPv6 is already supported by NSURLSession and CFNetwork APIs.

If your app uses IPv4-specific APIs or hard-coded IP addresses, you will need to make some changes.

虽然。 Apple 还建议不要长期使用 IP 地址字面量(没有必要)

Don’t Use IP Address Literals

确保您没有将点表示法中的 IPv4 地址文字传递给 getaddrinfo 和 SCNetworkReachabilityCreateWithName 等 API。 相反,使用高级网络框架和地址不可知 API 的版本,例如 getaddrinfo 和 getnameinfo,并传递它们 主机名或完全限定的域名 (FQDN)。请参阅获取地址信息 (3) Mac OS X 开发者工具手册页和 getnameinfo(3) Mac OS X 开发人员工具手册页。

注意:在iOS9和OSX 10.11及以后的版本中,NSURLSession和CFNetwork 在本地自动从 IPv4 文字合成 IPv6 地址 在 DNS64/NAT64 网络上运行的设备。但是,您仍然应该 努力摆脱您的 IP 地址文字代码

如果您正在使用 AFNetworking 库,请确保将其更新到 3.x 以上的版本,因为他们似乎已经更新了一些东西。 -- > AFNetworking Added support for IPv6 to Reachability.

详细信息请关注link

Supporting IPv6-only Networks

另外,要测试

您可以按照这个详细教程:

tutorial-how-to-test-your-app-for-ipv6-compatibility

实际上我正在调用 API 使用 AFNetworking 库。

我刚刚用我现有的 类 替换了 Github 中的 A​​FNetworkReachabilityManager 类。苹果就没有问题了。

我的应用现在可以运行了。

苹果应用因IPv6网络被拒绝的解决方法

我的 IPv6 互联网可达性检查不工作 well.It 总是显示缺少 network.when 我使用此代码,苹果在 24 小时内批准了我的应用程序。谢谢

更改 AFNetworking 库 Class AFNetworkReachabilityManager

中的以下代码行

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

从 API URL 中删除点符号,因为 IPv6 网络不允许 URL 中的点符号。我从 API URL 中删除了它对我的工作。