如何在Xcode 6(iOS 8)模拟器上使用Charles Proxy?

看起来iOS模拟器的目录已经改变了。 它曾经在~/Library/Application\ Support/iPhone\ Simulator/ ,现在在~/Library/Developer/CoreSimulator/Devices/

更新: 查尔斯3.9.3 +有一个内置的function来configuration您的iOS模拟器(即安装Charles SSL证书)。 这可以在Charles应用程序的帮助菜单中find。 Help > SSL Proxying > Install Charles Root Certificate in iOS Simulators

以下适用于Charles 3.9.2:

从Charles Proxy网站下载configurationshell脚本 。 然后,用以下代码replace脚本,并在Mac上运行它:

 #/bin/bash install() { if [ -f "$SQLITEDBPATH" ]; then cp -n "$SQLITEDBPATH" "$SQLITEDBPATH.charlesbackup" sqlite3 "$SQLITEDBPATH" <<EOF INSERT INTO "tsettings" VALUES(X'189B6E28D1635F3A8325E1E002180DBA2C02C241',X'3123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A',X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C21444F435459504520706C697374205055424C494320222D2F2F4170706C652F2F44544420504C49535420312E302F2F454E222022687474703A2F2F7777772E6170706C652E636F6D2F445444732F50726F70657274794C6973742D312E302E647464223E0A3C706C6973742076657273696F6E3D22312E30223E0A3C61727261792F3E0A3C2F706C6973743E0A',X''); EOF fi } for SQLITEDBPATH in ~/Library/Developer/CoreSimulator/Devices/*/data/Library/Keychains/TrustStore.sqlite3; do echo $SQLITEDBPATH install done echo "The Charles SSL CA Certificate has been installed for the iPhone Simulator" 

有些事情要注意:

  • 您必须在启动模拟器之前打开Charles。 如果closuresCharles,则在重新启动模拟器之前,networking请求将失败
  • 每次在模拟器上“重置内容和设置…”时都需要执行此操作
  • 对于Xcode 5:如果您想在Xcode 5及更早版本上设置Charles Proxy,则不需要修改原始脚本。 只需从Charles网站下载并按原样运行即可

我只是在Xcode 7 / iOS9模拟器上testing了Charles。 如果遇到问题,我只想添加几个指标:

  • 确保在Charles'Proxy |下选中“ 启用Mac OS代理 ”和“ 使用HTTP代理 ” 代理设置; 并可select检查“ 在启动时启用Mac OS X代理 ”,如果每次启动Charles时都不想执行此步骤。
  • 如果您的系统偏好设置中设置了自动代理configuration (和/或自动代理发现 ) networking,您需要取消选中,以免Charles的Web代理(HTTP)和安全Web代理(HTTPS)不能生效。
  • 如果您的公司需要独立于Charles的代理服务器,则需要手动复制Charles内部的设置,以防被Charles覆盖,从而无法访问Internet。 在启动Charles之前记下代理URL和端口号。 在Charles'Proxy |下转录这些Web ProxySecure Web Proxy设置 外部代理设置。
  • 启用S​​SL代理 ”并通过Charles'Proxy |将您的端点添加到列表中 SSL代理设置。
  • “通过Charles的帮助| 在iOS模拟器中安装Charles Root证书 ” SSL代理服务器菜单。
  • 是的,确保Charles在启动模拟器之前先安装并启动。
  • 最后现在,在开发过程中禁用ATS,直到我们听到更多来自Apple的消息。

据查尔斯文件

iOS模拟器应该使用系统代理设置。 如果没有,请尝试退出并重新启动iOS模拟器。 从Xcode 6开始,在运行iOS模拟器之前,Charles运行并设置为Mac OS X系统代理似乎很重要。

在这里阅读

所以只要退出你的模拟器,打开查尔斯,然后再次运行应用程序。 之后,你可以跟踪你的networking电话。

注意:如果您退出Charles,您的networking呼叫将失败。 所以你需要退出模拟器并再次运行或再次打开Charles。

另一种方法是浏览设备上的证书http://charlesproxy.com/charles.crt

这将显示您的屏幕:

安装证书提示屏幕

更新为iOS 9:您必须禁用应用程序传输安全使用查尔斯!

http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

我没有看到该页面上的configurationshell脚本。 我做了以下,它为我工作:

http://raptureinvenice.com/getting-the-charles-debugging-proxy-to-work-with-ios-and-genymotion/

看一下这个:

从Charles v3.9.3开始,在“帮助”菜单中有一个项目“在iOS模拟器中安装Charles CA SSL证书”,它将在您的iOS模拟器中自动安装Charles的SSL CA证书。

或者,您可以更改您的代码,以便NSURLConnection接受任何SSL证书。 请参阅堆栈溢出的问题和答案: 如何使用NSURLConnection与SSL连接不可信的证书?

您可以通过以下链接查看: http : //www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

在Xcode 7 / iOS 9模拟器的CharlesProxy(3.11)当前版本中,“在iOS模拟器中安装Charles Root证书”不起作用。

而是使用“在移动设备或远程浏览器上安装Charles Root证书…”选项。 这会给你一个证书的url。

如果你在模拟器的Safari中打开这个URL,你将可以select安装证书。

您仍然需要禁用应用程序传输安全性。 我不明白为什么这是必要的,当你有证书安装; 我猜CharlesProxy没有使用足够大的密钥/签名。

查尔斯开始为我修好后,重新启动模拟器。

对于那些在Xcode 9testing版的模拟器上苦苦挣扎的人:

我不知道安装脚本是否正常工作,但是您可以像在物理设备上一样安装charles的证书 – 通过Safari。

最后一步是需要的(当然,通过脚本或Safari安装证书后):进入Simluator的设置 – >一般 – >关于 – >证书信任设置 – > Charles Proxy Custom Root … – >启用💥