【问题标题】:iOS App Rejection - ensure that your app supports IPv6 networksiOS App Rejection - 确保您的应用支持 IPv6 网络
【发布时间】:2016-11-07 13:37:20
【问题描述】:

Apple 拒绝了我的应用程序 iOS 应用程序,过去两周我一直在尝试将这个应用程序放到商店中。

该应用程序需要一个带有 IP、端口、帐号、客户号和帐号密钥的模拟账户。我用这些信息为苹果创建了几个帐户,但我一直被拒绝。

最初是由于位置的 UIBackgroundModes 我需要为 ios 9 更改并添加免责声明。

我向进行审核的苹果开发人员提供了所有信息,以获取对应用程序的访问权限。他们再次拒绝了该应用,并指出:请注意,应用是在 IPv6 网络上审核的。请确保您的应用支持 IPv6 网络,因为需要兼容 IPv6。

我目前正在使用reachability 2.2 来监控设备的状态。这对于 IPv4 网络下的所有测试都非常有效。

虽然有一个新版本reachability 3.0 表示它完全支持 IPv6。我不确定可达性是否是最新的,因为他们仍在使用文档中概述的 AF_INET 而不是 AF_INET6。 Apple 还删除了 reachabilityForLocalWiFi,但我的应用程序包含它并监控 IN_LINKLOCALNETNUM。

如果可以,我如何在 iMac 上设置 IPv6 网络?该应用程序使用 IP 地址(例如 199.56.42.21)来初始化与服务器的连接。我还没有 IPv6 网络,所以我尝试使用来自 set up a local IPv6 Wi-Fi network using your Mac 的 iMac 设置 IPv6 连接。问题是我的 iMac 在代理后运行(使用以太网),外部网络在 wifi 上,在设置指南上它说 not through wifi

【问题讨论】:

  • 这不是一个编程问题,真的。这是网络配置。
  • 基本上你需要确保你已经将你项目中的所有NSULRConnection更新为NSURLSession,这几乎是快乐的第一步。

标签: ios objective-c app-store ipv6


【解决方案1】:

我使用的是可达性 3.x,它支持 IPV6。

我已经通过 IPV6 网络亲自对其进行了测试。我们的 App 也顺利通过了 App Store 的审核。

如果您使用任何其他网络库,请使用以下链接测试 IPV6 支持 http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/

【讨论】:

    【解决方案2】:

    只需使用cloudFlare 等任何 CDN 注册您的网站,您的应用将在下次获得批准,无需将整个网站转移到任何其他服务器。这是从应用商店获得批准的最简单方法。

    【讨论】:

      【解决方案3】:

      Internet 协议版本 6 (IPv6) 是 Internet 协议 (IP) 的最新版本,该通信协议为网络上的计算机提供识别和定位系统并通过 Internet 路由流量。

      互联网连接的用户、设备和应用程序的数量正以如此快速的速度增长,以至于互联网协议的原始版本(称为 IPv4)的可用地址池正在迅速耗尽。 IPv4 使用 32 位地址,可以支持 43 亿台设备直接连接到 Internet。替代协议称为 IPv6,使用 128 位地址并提供大约 340 万亿个地址。

      如今,Apple 拒绝这些应用程序,因为这些应用程序应该支持 IPv6 网络。在我们的环境中,我们也遇到了应用程序的相同情况,我们找到了解决此问题的方法之一。大多数应用程序不需要任何更改,因为 NSURLSession 和 CFNetwork API 已经支持 IPv6。如果您的应用程序使用 IPv4 特定的 API 或硬编码的 IP 地址,则需要进行一些更改。

      Apple 还建议不要长期使用 IP 地址文字,并确保您没有将 IPv4 地址文字以点表示法传递给 API,例如 getaddrinfo 和 SCNetworkReachabilityCreateWithName。相反,我们可以使用高级网络框架和与地址无关的 API 版本,例如 getaddrinfo 和 getnameinfo,并向它们传递主机名或完全限定域名 (FQDN)。如果您使用的是 AFNetworking 库,请确保将其更新到 3.x 以上的版本,因为他们似乎更新了一些东西。我们必须对 AFNetworkReachabilityManager 类中的 AFNetworking 库进行一些更改

      + (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;
      }
      

      我们需要在上面的模块中对我们的应用程序进行一些更改并添加到库中。完成此操作后,我们可以通过在 MAC 中启用 Internet 共享选项来测试应用程序是否支持 IPv6。

      测试 IPv6 DNS64/NAT64 兼容性 首先,我们需要确保 Mac 通过 Wi-Fi 连接到互联网。导航到系统偏好设置并选择共享选项,并确保在选择共享选项之前需要按住选项键。选择 Internet 共享,然后选择创建 NAT64 网络复选框。现在我们需要选择为您提供互联网连接的网络接口,例如以太网、Wi-Fi、蓝牙 PAN。

      这里我选择 Wi-Fi 来共享互联网连接并配置 Wi-Fi 网络选项。一旦配置了 Wi-Fi,然后启用互联网共享选项。

      一旦我们选择互联网共享,它会提示您开始为您的设备共享互联网访问权限。

      现在 IOS 设备已连接到共享网络,我们可以检查该应用是否在该网络上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-14
        • 2016-10-29
        • 2017-01-06
        • 2017-02-13
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        相关资源
        最近更新 更多