IPv6-苹果拒绝iOS应用程序,因为它不支持IPv6 DNS64/NAT64网络

IPv6-苹果拒绝iOS应用程序,因为它不支持IPv6 DNS64/NAT64网络,ios,swift,app-store,app-store-connect,ipv6,Ios,Swift,App Store,App Store Connect,Ipv6,错误在哪里 苹果拒绝应用程序并发送消息: 性能-2.1 我们在iPad和iPad上查看时发现你的应用程序中有一个或多个bug 在连接到IPv6网络的Wi-Fi上运行iOS 9.3.5的iPhone 具体而言,在进行投票时会显示错误,并且 “如果您正在使用高级网络API(如NSURLSession和CFNetwork frameworks)编写客户端应用程序,并且您按名称进行连接,则您的应用程序无需更改任何内容即可使用IPv6地址。” 接下来说: N3-我需要更新我的服务器吗?这取决于你的工作地点

错误在哪里

苹果拒绝应用程序并发送消息:

性能-2.1

我们在iPad和iPad上查看时发现你的应用程序中有一个或多个bug 在连接到IPv6网络的Wi-Fi上运行iOS 9.3.5的iPhone

具体而言,在进行投票时会显示错误,并且

“如果您正在使用高级网络API(如NSURLSession和CFNetwork frameworks)编写客户端应用程序,并且您按名称进行连接,则您的应用程序无需更改任何内容即可使用IPv6地址。”

接下来说:

N3-我需要更新我的服务器吗?这取决于你的工作地点 服务器正在运行:如果您的服务器在更广泛的Internet上运行, 答案是否定的。只有IPv6设备才能访问您的服务器 通过DNS64/NAT64。您应该更新服务器以支持IPv6作为 当然,但这是你可以在自己的时间里做的事情。如果 您的iOS应用程序中嵌入了一台服务器(例如,web应用程序) 允许用户在您的应用程序之间传输文件的服务器) 应确保它在仅限IPv6的环境中正常工作

我的主人说:

我们看不到任何问题,因为与您的服务器连接IPv6的服务器是 IPv4将通过DNAT/SNAT提供

我的站点(服务器):

我的应用程序中的代码(一周前,另一个应用程序批准了此代码)

func sendToServer(dataFromDictionary:Dictionary){
让url:NSURL=NSURL(字符串:http://badroads.info/t-or-c/****.php“!
let请求:NSMutableURLRequest=NSMutableURLRequest(URL:URL)
let session=NSURLSession.sharedSession()
request.HTTPMethod=“POST”
做{
request.HTTPBody=尝试NSJSONSerialization.dataWithJSONObject(dataFromDictionary,选项:[])
}将let parseError捕获为NSError{
request.HTTPBody=nil
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
}
request.addValue(“应用程序/json”,forHTTPHeaderField:“内容类型”)
request.addValue(“application/json”,forHTTPHeaderField:“Accept”)
让task=session.dataTaskWithRequest(请求,completionHandler:{data,response,error->Void in
如果错误!=nil{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
返回
}
让json:NSDictionary?
做{
json=尝试NSJSONSerialization.JSONObjectWithData(data!,选项:.MutableLeaves)作为NSDictionary
}将let parseError捕获为NSError{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
返回
}
如果让parseJSON=json{
如果让status=parseJSON[“status”]作为?字符串{
如果状态==“200”{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.defaultsDataLogin.setObject(true,forKey:“isDone”)
alertMessageAdM(“成功!”,messageM:“查看结果!”)
}
}如果状态=“400”,则为else{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
alertMessageSuccessErrorAdM(“错误”,messageM:“您已经有数据!”)
}
}否则{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
}
}否则{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
}
}否则{
dispatch\u async(dispatch\u get\u main\u queue()){
EZLoadingActivity.hide()
self.alertMessageSuccessError(“错误”,messageM:“哦,出了问题!请再试一次!”)
}
}
})
task.resume()
}
但我在和上查看了我的网站 我得到了以下结果:


谢谢

这与您的服务器无关

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


我认为NAT64没有多大帮助。

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

硬编码URL是否可以通过IPv6访问?@Alnitak Apple say me了解有关支持网络和网络的信息。本教程中说,如果您正在使用高级网络API(如NSURLSession)编写客户端应用程序。。。如果你通过名字连接,你不需要改变任何东西,你的应用程序就可以使用IPv6地址。`@Alnitak请查看我问题的更新。谢谢如果你已经测试过,结果看起来不错。请打开一张苹果公司的技术支持事件(TSI)记录单,他们将为您提供代码级支持。这里是链接打开TSI@Roman打开TSI票与appleWha
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()
}