我在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错误如果我在这里错过了什么,请告诉我。
答案 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。
现在它应该更好了NSURLSession changes in iOS9