【问题标题】:Break on kCFStreamErrorDomainSSL打破 kCFStreamErrorDomainSSL
【发布时间】:2015-12-04 19:24:23
【问题描述】:

我正在尝试调试进行大量 HTTP 调用的应用程序。我在控制台中看到了这个:

2015-09-08 17:21:01.458 MyApp[3186:3064431] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

我了解如何向我的 plist 添加异常,但是有没有办法在这些请求无法查看请求的内容时添加断点?

【问题讨论】:

    标签: nsurlsession ios9 app-transport-security


    【解决方案1】:

    在使用 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>
    

    【讨论】:

    【解决方案2】:

    添加这些断点时,我无法充分利用堆栈跟踪;但是,这篇博文帮助我找出了哪些域失败了:

    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”,您可以查看哪些请求失败以及失败的原因。

    【讨论】:

    • 打印出 $x1 不适合您吗?试图弄清楚它是否是确定性的......
    • 这很有帮助!
    【解决方案3】:

    尝试在HTTPProtocol::failWithStreamError 和/或StrictSecurityPolicy::logInsecureLoadFailure 中添加符号断点。

    (不幸的是,这可能不容易获取实际请求的堆栈跟踪,因为此异常与实际请求创建代码异步发生。但无论如何它可能会对您有所帮助。)

    【讨论】:

    • 当它在StrictSecurityPolicy::logInsecureLoadFailure 上中断时,您似乎可以从注册$x1 中获取URL。
    • 万一你不知道请求来自哪里,你总是可以在所有有趣的 URL 相关方法(NSURLConnection 的初始化程序和同步加载)上添加打印并继续断点方法、NSURLSession*Task 类的初始化器,以及用于从 URL 检索数据的 NSString 和 NSData 方法),打印连接对象或任务和 URL,等到遇到故障断点,然后在结果调试输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2016-01-29
    • 2012-10-24
    • 2022-01-02
    • 2013-09-30
    • 2013-11-24
    相关资源
    最近更新 更多