如何让 Charles 在 SSL 连接上使用 Xcode 7?

How to get Charles working with Xcode 7 on SSL connections?

我在使用新安装的 Xcode 7 时遇到问题,即使通过 Charles 在 iOS 模拟器上安装了 SSL 证书(帮助 > SSL 代理 > 在 iOS 模拟器),并明确允许我在 Charles 中查询的服务器域,任何监听 SSL 流量的尝试都会导致连接失败。

Charles 报告以下错误:

SSLHandshake: Remote host closed connection during handshake You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.

Xcode 控制台报告:

2015-09-23 11:29:44.173 Citifyd[8352:449043] Error in registration. Error: Error Domain=NSCocoaErrorDomain Code=3010 "REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION" UserInfo={NSLocalizedDescription=REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION} 2015-09-23 11:29:44.483 Citifyd[8352:449381] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 2015-09-23 11:29:44.509 Citifyd[8352:449043] API ERRROR Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made."

在相同设置下 Xcode6 中一切正常 - 有人有任何想法吗?

我根据这个帖子解决了这个问题: https://forums.developer.apple.com/thread/4988

iOS 9(Xcode 7 模拟器 运行)对 SSL 传输有更严格的要求 - 来自上述线程中的用户 "Poets":

iOS 9 forces connections that are using HTTPS to be TLS 1.2 to avoid recent vulnerabilities. In iOS 8 even unencrypted HTTP connections were supported, so that older versions of TLS didn't make any problems either. As a workaround, you can add this code snippet to your Info.plist:

<key>NSAppTransportSecurity</key>  
  <dict>  
  <key>NSAllowsArbitraryLoads</key>  
  <true/>  
</dict> 

这使 Charles 能够在使用 iOS 9 模拟器时向您显示未加密的流量。分发应用程序后,您可能希望禁用此功能。