【问题标题】:IPv6 - Apple rejects iOS app because of not Supporting IPv6 DNS64 / NAT64 NetworksIPv6 - Apple 拒绝 iOS 应用程序,因为不支持 IPv6 DNS64 / NAT64 网络
【发布时间】:2017-01-06 10:55:47
【问题描述】:

哪里出错了?

Apple 拒绝应用并发送消息:

性能 - 2.1

在 iPad 上审核时,我们在您的应用中发现了一个或多个错误,并且 在连接到 IPv6 网络的 Wi-Fi 上运行 iOS 9.3.5 的 iPhone。

具体来说,在进行投票和Supporting IPv6 DNS64 / NAT64 Networks时会显示错误

“如果您正在使用高级网络 API(例如 NSURLSession 和 CFNetwork 框架)编写客户端应用程序,并且您通过名称连接,则应该无需更改 任何让您的应用使用 IPv6 地址的东西。”

Apple Developer Forums 的下一个说:

N 3 — 我需要更新我的服务器吗?这取决于你在哪里 服务器正在运行:如果您的服务器在更广泛的 Internet 上运行, 答案是否定的。仅限 IPv6 的设备可以访问您的服务器 通过 DNS64/NAT64。您应该更新您的服务器以支持 IPv6 作为 当然,但这是你可以在自己的时间做的事情。如果 您在 iOS 应用程序中嵌入了服务器(例如,Web 允许用户将文件传输到您的应用程序或从您的应用程序传输文件的服务器),您 应该确保它在纯 IPv6 环境中运行良好。

我的主人说:

我们没有发现任何问题,因为您的服务器使用 IPv6 的服务器是 IPv4 将通过 DNAT / SNAT 提供

我的网站(服务器): http://badroads.info

我在 App 中的代码(此代码一周前在另一个应用程序中获得批准):

func sendToServer(dataFromDictionary: Dictionary<NSString, AnyObject>) {
    let url: NSURL = NSURL(string: "http://badroads.info/t-or-c/****.php")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
    let session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"
    do {
        request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(dataFromDictionary, options: [])
    } catch let parseError as NSError {
        request.HTTPBody = nil
        dispatch_async(dispatch_get_main_queue()) {
            EZLoadingActivity.hide()
            
            self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
        }
    }
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        if error != nil {
            dispatch_async(dispatch_get_main_queue()) {
                EZLoadingActivity.hide()
                self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
            }
            return
        }
        let json: NSDictionary?
        do {
            json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
        } catch let parseError as NSError {
            dispatch_async(dispatch_get_main_queue()) {
                EZLoadingActivity.hide()
                self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
            }
            return
        }
        if let parseJSON = json {
            if let status = parseJSON["status"] as? String {
                if status == "200" {
                    dispatch_async(dispatch_get_main_queue()) {
                        EZLoadingActivity.hide()
                        self.defaultsDataLogin.setObject(true, forKey: "isDone")
                        self.alertMessageAdM("Successfully!", messageM: "See  results!")
                    }
                } else if status == "400" {
                    dispatch_async(dispatch_get_main_queue()) {
                        EZLoadingActivity.hide()
                        self.alertMessageSuccessErrorAdM("Error", messageM: "You have already data!")
                    }
                } else {
                    dispatch_async(dispatch_get_main_queue()) {
                        EZLoadingActivity.hide()
                        self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
                    }
                }
            } else {
                dispatch_async(dispatch_get_main_queue()) {
                    EZLoadingActivity.hide()
                    self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
                }
            }
            
        }  else {
            dispatch_async(dispatch_get_main_queue()) {
                EZLoadingActivity.hide()
                self.alertMessageSuccessError("Error", messageM: "Oops, something went wrong! Try again, please!")
            }
        }
    })
    task.resume()
}

但我在https://ip6.nlhttp://ipv6-test.com/validate.php 上查看了我的网站 我得到以下结果:

谢谢!

【问题讨论】:

  • 硬编码的 URL 是否可以通过 IPv6 访问?
  • @Alnitak Apple say me For information about support IPv6 Networks IPv6 DNS64/NAT64 Networks and About Networking 在本教程中说如果您正在使用高级网络 API(如 NSURLSession)编写客户端应用程序...并且您通过名称连接,您无需更改任何内容即可让您的应用使用 IPv6 地址。`
  • @Alnitak 请查看我的问题的更新。谢谢!
  • 如果您已经测试并且结果看起来不错。请向 Apple 开具技术支持事件 (TSI) 票证,他们将为您提供代码级支持。这是打开 TSI developer.apple.com/support/technical 的链接
  • @Roman 与苹果一起打开 TSI 票

标签: ios swift app-store app-store-connect ipv6


【解决方案1】:

不一定是 IPv6 网络支持问题。 该应用程序崩溃并连接到 IPv6 网络。它可以是两种不同的东西。 向审核团队询问崩溃日志,对这些日志进行符号化并找出真正的问题。

【讨论】:

    【解决方案2】:

    这与您的服务器无关。

    您的应用程序中必须有少数 API 不受 IPV6 支持(例如可达性)。请使用最新的和支持 IPV6 的更新。

    我认为 NAT64 没有太大帮助。

    【讨论】:

    • 这段代码具体有什么问题,请告诉我?更没有其他的服务器代码。我不使用任何第三方 API。我使用 NSURLSession。我知道这段代码会导致错误,我可以从 Apple 的屏幕截图中看到
    • 不是第三方,而是任何消耗互联网(WiFi)的Apple API?除了 NSURLSession?
    • 使用 Crashlytics (3.7.3),Digits 2.4.0 使用 Fabric (1.6.8) 安装 Firebase 3.5.1 安装 FirebaseAnalytics 3.3.1 使用 FirebaseInstanceID (1.0.8) 安装 Google-Mobile-Ads -SDK 7.10.0 使用 GoogleInterchangeUtilities (1.2.1) 使用 GoogleSymbolUtilities (1.1.1) 使用 GoogleUtilities (1.3.1) 但 Apple 向我发送了有关此代码的屏幕
    猜你喜欢
    • 2017-01-13
    • 2016-11-24
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2017-02-13
    • 2016-10-14
    • 2023-04-11
    相关资源
    最近更新 更多