应用因 IPV6 问题被 App Store 拒绝

Posted

技术标签:

【中文标题】应用因 IPV6 问题被 App Store 拒绝【英文标题】:App was rejected by App Store because of IPV6 issues 【发布时间】:2017-05-05 06:02:35 【问题描述】:

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

    1 性能:应用程序完整性指南 2.1 - 性能

您的应用在运行 ios 10.3.1 并连接到 IPv6 的 iPad 上崩溃 网络时我们:

输入了提供的凭据。该应用程序加载了一秒钟,然后 坠毁。重新启动应用程序时,我们似乎仍然“登录” 但应用加载了片刻后又崩溃了。

这发生在您的应用被使用时:

在 Wi-Fi 上

我们附上了详细的崩溃日志以帮助解决此问题。

接下来的步骤

要解决此问题,请修改您的应用并在设备上进行测试 当连接到 IPv6 网络时(所有应用程序必须支持 IPv6) 确保它按预期运行。

资源

有关如何符号化和读取崩溃日志的信息,请 查看技术说明 TN2151 理解和分析应用程序崩溃 报告。

有关支持 IPv6 网络的信息,请查看 支持 IPv6 DNS64/NAT64 网络和关于网络。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我在 iOS 中遇到了这个问题。比我更改我的可达性类互联网连接方法和我的应用程序批准。如果您想在您的系统中创建 IPv6 网络,请检查

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

目标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];

斯威夫特 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, 
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) 
    SCNetworkReachabilityCreateWithAddress(nil, $0)
 
 )
 

【讨论】:

上面的 swift3 代码或下面给出的代码哪个最好:var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) 是的,它会起作用的。如果支持 IPv6 则支持 IPv4 我也遇到过同样的问题,苹果因为这个原因拒绝了我的应用程序 5 次。我还上传了一个应用视频,但苹果仍然拒绝了我的应用。我的 API 正在工作,代码是 struct sockaddr_in6 zeroAddress;或 struct sockaddr_in zeroAddress; (由于字符不足,我没有写完整的ipv4或ipv6代码。)我该怎么办?【参考方案2】:

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

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

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

以下是几个网站,可帮助您找出您正在使用的版本。

Google IPv6 test

现在被接受了

【讨论】:

【参考方案3】:

问题是我使用了一些代码来检查应用程序是否连接到互联网。这些代码仅支持 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)

【讨论】:

以上是关于应用因 IPV6 问题被 App Store 拒绝的主要内容,如果未能解决你的问题,请参考以下文章

应用被 ios App Store 拒绝

ios app在提出所有建议后因ipv6不兼容而被拒绝

libspotify 导致 Apple App Store 拒绝

应用被 App Store 拒绝

由于应用名称与 App Store 上已有的其他应用相似,iTunes 连接应用被拒绝

由于应用内购买,App Store Flutter App Rejection