应用因 IPV6 问题被 App Store 拒绝

App was rejected by App Store because of IPV6 issues

由于 IPV6 问题,我的应用被应用商店拒绝。这是 App Store 的信息

  1. 1 Performance: App Completeness Guideline 2.1 - Performance

Your app crashed on iPad running iOS 10.3.1 connected to an IPv6 network when we:

entered the provided credentials. The app loaded for a second and then crashed. When relaunching the app it appears we’re stilled “logged in” but the app loads for a moment and crashes again.

This occurred when your app was used:

  • On Wi-Fi

We have attached detailed crash logs to help troubleshoot this issue.

Next Steps

To resolve this issue, please revise your app and test it on a device while connected to an IPv6 network (all apps must support IPv6) to ensure that it runs as expected.

Resources

For information on how to symbolicate and read a crash log, please review Tech Note TN2151 Understanding and Analyzing Application Crash Reports.

For information about supporting IPv6 Networks, please review Supporting IPv6 DNS64/NAT64 Networks and About Networking.

我该如何解决这个问题?

是的。我也曾多次遇到过这个问题。 Apple 现在仅支持与 IPv6 兼容的应用程序。

首先我按照他们的描述测试了我的应用程序。我在 IPv6 上进行了测试,但没有收到他们所说的任何错误。所以连接上IPv6后先完成调试。如果你觉得它工作正常,那么就这样做。

我通过不同的网站找到了我网络的IPVersion。我在手机上截屏了我连接的网络,并将这些屏幕截图发送给苹果进行审核(说这是连接到 IPv6 的证明)。

下面是几个网站,可帮助您确定您使用的是哪个版本。

Google IPv6 test

现已接受

我在 iOS 遇到过这个问题。比我更改我的 reachblility class 互联网连接方法和我的应用程序批准。如果您想在您的系统中建立 Ipv6 网络,请检查

https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html

Objective c

+ (instancetype)reachabilityForInternetConnection
{
  struct sockaddr_in6 zeroAddress;
  bzero(&zeroAddress, sizeof(zeroAddress));
  zeroAddress.sin6_len = sizeof(zeroAddress);
  zeroAddress.sin6_family = AF_INET6;
  return [self reachabilityWithAddress: (const struct sockaddr *)  &zeroAddress];
}

Swift 3

 func ipv6Reachability() -> SCNetworkReachability? 
{
var zeroAddress = sockaddr_in6()
 zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in>.size)
   zeroAddress.sin6_family = sa_family_t(AF_INET6)

   return withUnsafePointer(to: &zeroAddress, {
[=12=].withMemoryRebound(to: sockaddr.self, capacity: 1) {
    SCNetworkReachabilityCreateWithAddress(nil, [=12=])
 }
 })
 }

问题是我使用了一些代码来检查应用程序是否连接到互联网。这些代码仅支持 IPV4,不支持 IPV6。所以我只是更新这些代码以支持 IPV6。这是代码:

旧代码:

var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)

新代码:

var zeroAddress = sockaddr_in6()
zeroAddress.sin6_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin6_family = sa_family_t(AF_INET6)