NSURLSession代码在Xcode7中不起作用,但相同的代码适用于xcode6

时间:2015-06-17 22:09:38

标签: nsurlsession xcode7 ios9

我在Xcode7和Swift2中使用NSURLSession时遇到了一些问题。由于某种原因,我不断收到NSURLErrordomain错误,但代码相同 正在使用swift 1.2开发Xcode6。

let baseURL = NSURL(string: "https://itunes.apple.com/search?term=one%20republic")  
let downloadTask = session.downloadTaskWithURL(baseURL!, completionHandler: { (location, response, error) -> Void in  
  if(error == nil){  
     let objectData = NSData(contentsOfURL: location!)  
     let tmpData :NSString = NSString(data: objectData!, encoding: NSUTF8StringEncoding)!  
     print("success")  
  } else {  
     print("Failed")  
  }            
})  
downloadTask!.resume()  

enter image description here

它一直给我NSURLDomain错误如果我在这里错过了什么,请告诉我。

2 个答案:

答案 0 :(得分:1)

传输应用程序安全性在此描述:

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/

您应该在服务器的基础上添加适当的异常,NSAllowsArbitraryLoads只是完全禁用AppTransportSecurity; 不鼓励这样做,最终可能会拒绝您的应用。

只有当您无法在所有网址上使用正确的https时,才应使用NSExceptions,例如当服务器控制另一方时,对于现有应用程序,或者存在阻止服务器提供https连接的技术原因。

当服务器无法支持最现代的https协议时,您应该使用前向保密异常。

默认协议接受的ATS如下: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

如果您的服务器支持使用这些协议的https,并且证书配置正确且TLS版本为1.2,则不需要将任何App Transport Security配置添加到info.plist文件中。

答案 1 :(得分:0)

由于新的应用程序传输安全性,我找到了解决方案。您需要将NSAppTransportSecurity密钥作为字典添加到Info.plist,并将NSAllowsArbitraryLoads属性设置为true。

enter image description here

现在它应该更好了NSURLSession changes in iOS9