0

我在 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()  

在此处输入图像描述

它不断给我 NSURLDomain 错误如果我在这里遗漏了什么,请告诉我。

4

2 回答 2

1

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

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

您应该逐个服务器添加适当的异常,NSAllowsArbitraryLoads 只是完全禁用 AppTransportSecurity;这是不鼓励的,最终可能会导致您的应用被拒绝。

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

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

The ATS accepted by default protocols are the following: 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 文件中。

于 2015-09-25T15:45:55.287 回答
0

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

在此处输入图像描述

它现在应该可以正常工作了NSURLSession 在 iOS9 中的变化

于 2015-06-18T15:27:30.080 回答