应用因 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 拒绝的主要内容,如果未能解决你的问题,请参考以下文章
libspotify 导致 Apple App Store 拒绝