我收到错误:NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802),我怀疑这是因为查询来自Parse的图像。这是我查询的方法:
func fetchImageForEmployee(employee: PFEmployee, completion: (error: String?, image: UIImage?) -> Void) {
if (employee.profilePicture == nil) {
completion(error: "No image file", image: nil)
} else {
employee.profilePicture!.getDataInBackgroundWithBlock({ (data, error) -> Void in
if let error = error {
let errorString = error.userInfo["error"] as? String
completion(error: errorString, image: nil)
} else if (data != nil) {
let image = UIImage(data: data!)
completion(error: nil, image: image)
} else {
completion(error: nil, image: nil)
}
})
}
}
我还打印了错误,这是调试器中出现的内容:不允许在取消分配时尝试加载视图控制器的视图,并且可能导致未定义的行为(UISearchController:0x13ee44dc0)
我不知道出了什么问题,所以所有的答案都很受欢迎。
答案 0 :(得分:10)
右键单击Info.plist文件&gt;打开作为&gt;源代码,并在最新</dict>
之前添加以下内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
在iOS9中,ATS在网络呼叫期间实施最佳实践,包括使用HTTPS。请在Apple Documentation。
中详细了解相关信息答案 1 :(得分:5)
我建议不要允许任何事情。
您需要在构建目标的Info.Plist中定义要应用这些规则的URL。
您可以在Apple的文档页面上找到正确的声明: https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/
所以基本上你的Info.plist看起来应该是这样的并包含域名。
注意:为了获得更好的透明度,我还将NSAllowsArbitraryLoads
的默认值重新声明为false
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>yourdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
最好的问候。
如果你只是不关心所有这些麻烦(我不推荐这个)并且只想调试你的UI,你可以选择暂时使用非默认的App TransportSecurity和只允许任何事情:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我不确定,Apple是否会在AppStore Review中传递此内容; - )
顺便说一句:通过查看已建立的连接来跟踪应用程序的所有连接。您现在可以嗅探由第三方工具生成的应用流量,或者您使用记录所有网络流量,在此处引用:How can I figure out which URL is being blocked by App Transport Security?
很容易跟踪此日志中发生的所有错误(不太难以查找错误代码)。通过这种方式,由于负载限制(当然,优秀的软件工程师心里明白;),我很容易看到正在建立的连接并且可能失败了。)) 要访问日志,您可以使用例如iFunBox或其他东西,如果它在您的移动设备上。
简短提示:要检查服务器运行的TLS版本,我正在使用nmap:
nmap --script ssl-enum-ciphers -p 443 your-domain-without-https.com