当我们执行以下操作时,您的应用程序在运行 iOS 11.1 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃:
Posted
技术标签:
【中文标题】当我们执行以下操作时,您的应用程序在运行 iOS 11.1 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃:【英文标题】:Your app crashed on iPad and iPhone running iOS 11.1 connected to an IPv6 network when we: 【发布时间】:2017-11-12 07:49:42 【问题描述】:当我测试时,我的应用程序在 iPad 和 Iphone 上运行良好。我正在使用 AFNetworking 2.0 进行 API 调用,而苹果应用程序审查由于 IPv6 网络而再次拒绝我的应用程序,我正在使用像 @ 这样的硬编码 IP 地址987654321@ 我对此感到沮丧,请任何人帮助我现在该怎么做。
【问题讨论】:
确保您安全地处理接收到的数据。我的应用程序以同样的原因被拒绝,但我发现真正的问题是在某些情况下接收到的数据可能为零,这导致应用程序崩溃。我通过修复该错误通过了应用审查。 但是当我在设备或模拟器上进行测试时,这工作正常,但苹果评论说它在 ipv6 网络上崩溃 是的,所以我想说的是它可能是别的东西。例如,该应用程序在您的网络下运行良好,但在其他地方可能会失败,例如连接太慢并导致超时。在这种情况下,你会得到一些错误数据或空数据,然后如果你在代码中强制解包数据,应用就会崩溃。 你能告诉我一件事,我正在使用硬编码的 IP 地址 api ihttp://192.230.66.71/XXXXXXXX/XX/,这对吗? 这可能对你有帮助:***.com/questions/37693256/… 【参考方案1】:您不应该根据Apple's rule使用硬编码IP地址。
不要使用 IP 地址文字 确保您没有将 IPv4 地址文字以点表示法传递给 API,例如 getaddrinfo 和 SCNetworkReachabilityCreateWithName。相反,使用高级网络框架和与地址无关的 API 版本,例如 getaddrinfo 和 getnameinfo,并向它们传递主机名或完全限定域名 (FQDN)。请参阅 getaddrinfo(3) Mac OS X 开发者工具手册页和 getnameinfo(3) Mac OS X 开发者工具手册页。
注意:在 ios 9 和 OS X 10.11 及更高版本中,NSURLSession 和 CFNetwork 会在运行 DNS64/NAT64 网络的设备上从本地的 IPv4 文字中自动合成 IPv6 地址。但是,您仍然应该努力摆脱 IP 地址文字的代码。
在我看来,你应该注意两点:
1. 不建议使用硬编码 IP 地址,但根据上面的注释和我所做的搜索,一些开发人员在他们的应用中使用 IPv4 地址文字通过了审查。 所以首先尽量不要在你的应用中使用 IPv4 地址文字,然后确保你注意到我在下面提到的第二件事。
2.您的应用可能会因其他网络相关问题而崩溃。就像我之前评论的那样。 我会把它贴在这里让你更清楚。
确保您安全地处理收到的数据。我的应用程序以同样的原因被拒绝,但我发现真正的问题是在某些情况下接收到的数据可能是服务器错误,这导致应用程序崩溃。我通过修复该错误通过了应用审查。
例如,该应用在您的网络下运行良好,但在其他地方可能会失败,例如连接速度太慢并导致超时。在这种情况下,您将获得一些服务器错误数据或空数据,然后如果您在代码中强制解包数据,应用程序将崩溃。就我而言,Apple 拒绝了我的应用程序,因为 IPv6 问题,这不是真正的问题。
【讨论】:
没有找到解决方案,我的应用程序仍然被拒绝,请帮助我。 抱歉,这几天太忙了。现在审核通过了吗?还有一件事您应该注意到,AFNetworking 2.0 中的reachability
类不支持 IPv6。以上是关于当我们执行以下操作时,您的应用程序在运行 iOS 11.1 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃:的主要内容,如果未能解决你的问题,请参考以下文章