我正在尝试调试一个进行大量 HTTP 调用的应用程序。我在控制台中看到了这个:
2015-09-08 17:21:01.458 MyApp[3186:3064431] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
我了解如何向我的 plist 添加异常,但是有没有办法在这些请求无法看到请求的内容时添加断点?
我正在尝试调试一个进行大量 HTTP 调用的应用程序。我在控制台中看到了这个:
2015-09-08 17:21:01.458 MyApp[3186:3064431] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
我了解如何向我的 plist 添加异常,但是有没有办法在这些请求无法看到请求的内容时添加断点?
添加这些断点时,我无法充分利用堆栈跟踪;但是,这篇博文帮助我找出了哪些域失败了:
http://timekl.com/blog/2015/08/21/shipping-an-app-with-app-transport-security/
tl;dr:将环境变量 CFNETWORK_DIAGNOSTICS 设置为 1(如何设置环境变量,如果您需要帮助:http: //nshipster.com/launch-arguments-and-environment-variables/)。这会将所有 CFNetwork 活动记录到您将在控制台中看到的文件中;在该文件中搜索“Did Fail”,您可以看到哪些请求失败以及原因。
HTTPProtocol::failWithStreamError
尝试在和/或中添加符号断点StrictSecurityPolicy::logInsecureLoadFailure
。
(不幸的是,这可能不容易获得实际请求的堆栈跟踪,因为此异常与实际请求创建代码异步发生。但无论如何它可能会对您有所帮助。)
在使用 iOS 9 时,我们必须在 info.plist 中添加以下行,否则任何 API 调用都不起作用。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>dev.YourCompanyName.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>