【问题标题】:Swift IPv6 supportSwift IPv6 支持
【发布时间】:2018-06-01 14:48:45
【问题描述】:

我正在尝试在 Apple 中提交我的 iOS 应用程序。但是由于 IPv6 的问题,他们拒绝了我的应用程序:他们试图从 IPv6 网络连接到我们的服务器,但没有成功。
我们更改了服务器端:现在我们的服务器已准备好使用 IPv6(我在 ipv6test.com 上对其进行了测试,一切都很好)。
在我的应用程序中,我使用 URLSession.shared.dataTask 创建请求。 Apple 在这样的代码行中遇到了问题:

var urlRequest: URLRequest = URLRequest(url: myServerUrl);
urlRequest.httpMethod = "POST";
..... //preparing POST data, setting timeout, etc.
urlRequest.httpShouldHandleCookies - true;
let task = URLSession.shared.dataTask(with: urlRequest, completionHandler: {(data: Data?, response: URLResponse?, error: Error?) in
do {
    guard let resp = response as? HTTPURLResponse else { throw NetworkError.connectionError;} //here they got a problem
....
}
catch {...}

我不明白,为什么他们无法连接到我们的服务器。从我们的网络 (IPv4) 来看,一切都很好。
最奇怪的事情是:我昨天在 10:05 发送了这个应用程序。在 10:30 我们看到了来自 Apple 网络的一个请求,并且它是成功的(200 状态)。看起来很奇怪,因为他们写道,他们甚至无法在这个应用程序中授权......
请问有人可以帮忙解决这种情况吗?不明白,哪里出了问题,怎么办。

【问题讨论】:

  • 你有带sim卡的实体设备吗?
  • 不幸的是,没有。我有没有 SIM 卡的物理设备。我在模拟器中测试了我的应用程序。但在提交之前,我将我的应用程序安装在 2 个带 SIM 卡的真实设备上,一切正常。
  • 这个问题可能与 IPv6 无关,而 Apple(出于某种原因)只是无法在您的应用中授权。为什么你认为问题与你代码中的这个特定部分有关?
  • 因为我添加了“断点” - 在 catch 块中,我显示了程序中出现问题的步骤。我为此请求设置了超时(60 秒)。苹果表示,该应用程序在 1 分钟内尝试连接,然后显示此错误。所以,超时了。

标签: ios swift networking ipv6


【解决方案1】:

您应该通过使用 Mac 设置 DNS64/NAT64 网络来测试此类问题。 link

这就是他们的 QA 正在做的事情。

【讨论】:

  • 我不明白问题出在哪里:我没有使用任何第三方库进行网络连接,我只使用了 URLSession,正如他们推荐的那样。我们的服务器已准备好处理来自 IPv6 网络的请求。问题出在哪里?
  • 不知道问题出在哪里,但最好的第一步是能够自己重现问题,因此我建议您根据 Apple 的建议设置 Mac。即使它不能让你重现问题,那么至少你可以告诉苹果你尝试了什么,并要求他们再试一次。我假设您使用的是正确的 URL 而不是 IP 地址文字?
  • 是的,在我的应用程序中,我使用的是字符串 URL(如 https://myaddress.com)。我的一个类中有静态常量。它看起来像这样:static let serverUrl = "https://myaddress.com";。在其他类中,我连接部分,比如/login
猜你喜欢
  • 2021-10-03
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多