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

Posted

技术标签:

【中文标题】如何在 Xcode 6 (iOS 8) 模拟器上使用 Charles Proxy?【英文标题】:How to use Charles Proxy on the Xcode 6 (iOS 8) Simulator? 【发布时间】:2014-10-15 21:06:03 【问题描述】:

ios 模拟器的目录好像变了。以前在~/Library/Application\ Support/iPhone\ Simulator/,现在在~/Library/Developer/CoreSimulator/Devices/

【问题讨论】:

【参考方案1】:

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

以下内容适用于 Charles 3.9.2:

从Charles Proxy website 下载configuration shell script。然后,将脚本替换为以下内容,并在您的 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'3082045E30820346A003020102020101300D06092A864886F70D01010505003081913123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A3020180F31383939313233313132303030305A170D3338303932343033313930355A3081913123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A30820122300D06092A864886F70D01010105000382010F003082010A02820101008349587455EFB272E397A31D3B52D9B13115C93F320766D2D451117F45C40285506027079ED439CABB94D44F1AE136EB1E79BF77ABE43345AD1D436809CF9E035C439272F3CA917DCADD7FBD0E3929F1A345F0B89096130BBD116F8D3AB5655789B7B0831325BD22903F198DA6BDDA30C08DFD17CE9AB51C48555264307BCF789A2B6C48DF4ECAF3EA2C092EE737AD8F397900AC03303BFE2AE43549030A7866CB6FE9B04B9F6EC498B4E7369E99B45491BF093858A77C72F8ADC818E018D413265E39446BE514F78EB57A23AA88F630776F861A9163E04AD38EE8A5C9219D0FC23F6B9A6324455DEA6F4A6A251ECA1FA3D6288CB89FD12A2062A3A015A56F250203010001A381BC3081B9300F0603551D130101FF040530030101FF307706096086480186F842010D046A136853534C2050726F7879696E6720697320656E61626C656420696E20436861726C65732050726F78792E20506C6561736520766973697420687474703A2F2F636861726C657370726F78792E636F6D2F73736C20666F72206D6F726520696E666F726D6174696F6E2E300E0603551D0F0101FF040403020204301D0603551D0E04160414BB27F4CB2EB6DBB058101BBD803F38D208D76129300D06092A864886F70D010105050003820101000041F935F30B209E56360F7E3D9C30314A213323C47EDCEA1467600A50FFE4E8E39DFCA8C8D34463C34745FF04C870F1DF28BB772DB0CF1BCA677B70842C742BC6D5FB00559AD643C6BF2C95BD0B855A961D7D6A3EADA9C642E9A789474C4AD838C6F732D8D859548D30829DF7A32D098FE3F00147DAF08C0B37DD597184C1E27A61EA42050C73994E809013CB21E37BF84BF923BCEFEA6164FD28AB9058CCC48F1F486FC1C47EBD8A9C933F542401B11F36A003E47B141A41C7B326D18D023E11EDB445699AA44800254EA33F174FD5EB1CCCE6A09365751FF905988C06315B5575067BF65EC24CAD1A6A601846D1D2F51F1F420A2762990B044000619D1C84');
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。如果你关闭 Charles,网络请求会失败,直到你重启模拟器 您每次在模拟器上“重置内容和设置...”时都需要这样做 对于 Xcode 5:如果您希望在 Xcode 5 及更早版本上设置 Charles Proxy,则无需修改原始脚本。只需从 Charles 网站下载并按原样运行即可

【讨论】:

重启模拟器后工作。 您的回答似乎解决了 SSL 请求问题。但主要问题可能是 Charles 没有处理来自 iOS 模拟器 8.0/Xcode6 的任何请求你知道如何解决吗? 我认为脚本已移至此处:charlesproxy.com/documentation/faqs/…(并阅读源代码,它似乎已按照您建议的方式进行了更新) 我关注了这个,但在终端中看到错误 - UNIQUE 约束失败:tsettings.sha1 仅供参考-我更新了这个答案以包括下载 Charles 3.9.3 的说明,通过其帮助菜单进行证书安装,而不需要脚本。【参考方案2】:

我没有在该页面上看到配置 shell 脚本。我做了以下事情,它对我有用:

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

【讨论】:

这个答案比@jonsibley 的要好。 Charles 网站上的配置脚本不见了。 我认为它刚刚被移到这里:charlesproxy.com/documentation/faqs/…【参考方案3】:

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

它将向您展示屏幕:

【讨论】:

我试过这个方法,但在运行本地服务器时也无法加载安全站点。谁能说明如何处理这个问题? 尝试使用 Safari 浏览,看看证书是否有问题。为此,请单击您网站的锁定符号。 Safari certificate dialog window。我怀疑您使用的是自签名证书,并且您需要在计算机上安装客户端证书。这可以通过 Safari 并通过选择 Trust -> 'always allow' 来实现。 我必须这样做才能消除 SSL 握手错误。【参考方案4】:

根据查尔斯文档

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

Read Here

所以只需退出您的模拟器,打开 charles,然后再次运行该应用程序。之后,您可以跟踪您的网络呼叫。

注意:如果您退出 Charles,您的网络呼叫将失败。因此,您将需要退出模拟器并再次运行它或再次打开 Charles。

【讨论】:

我发现如果您设置了“自动配置”代理 URL,Charles Proxy 将无法工作。似乎自动配置 URL 会覆盖任何手动代理设置。删除自动配置 URL,并指定手动设置(在我的情况下使用凭据)允许 Charles 重新配置设置并且它工作.. 甚至无需重新启动 iOS 模拟器 (7.1)。【参考方案5】:

在查尔斯开始为我修复它之后,只需(重新)启动模拟器。

【讨论】:

【参考方案6】:

看看这个:

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

或者,您可以更改您的代码,以便 NSURLConnection 接受任何 SSL 证书。请看问题和答案 堆栈溢出: How to use NSURLConnection to connect with SSL for an untrusted cert?

您可以在此链接上查看: http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

【讨论】:

【参考方案7】:

iOS 9 更新:您必须禁用 App Transport Security 才能使用 Charles!

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

【讨论】:

Charles 从 3.11.4 版本开始支持 App Transport Security (ATS)。【参考方案8】:

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

改为使用“在移动设备或远程浏览器上安装 Charles 根证书...”选项。这将为您提供证书的 url。

如果您在模拟器中的 Safari 中打开此 url,您将可以选择安装证书。

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

【讨论】:

如果不出意外,证书是自签名的,并且肯定不会满足 Apple 的 ATS 要求。第一步是让查尔斯的证书由受认可的证书颁发机构签署,但除了物流之外,这会花钱。域也必须是面向公众的。等等。如果可行的话,这并不容易。 @Hampden123 据我所知,Apple 的 App Transport Security 机制将允许使用自签名证书只要它已作为可信证书正确安装到 iOS 设备中 - 因此,为什么我认为 charlesproxy 出于不同的原因需要禁用 ATS。不过,我目前似乎无法访问 Apple ATS 文档来检查这一点。 如果您(或任何人)在不禁用 ATS 的情况下成功地向 iOS 9 设备提供自签名证书,请告诉我您是如何做到的。 TIA!【参考方案9】:

我刚刚在 Xcode 7 / iOS9 模拟器上测试了 Charles。如果您遇到问题,我想补充几点:

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

【讨论】:

“最后,暂时在开发过程中禁用 ATS,直到我们听到来自 Apple 的更多消息。” - 当场,从上面的其他答案中丢失。 谢谢!他们应该把这个放到查尔斯的网站上! Charles 从 3.11.4 版本开始支持 App Transport Security (ATS)。 +1 表示取消选中自动代理配置。我在公司网络环境中有一个 .pac 文件,因此模拟器的流量可能不会出现在 Charles 中。 “确保在 Charles' Proxy | Proxy Settings 下选中了“Enable Mac OS proxy”和“Use HTTP Proxy”这对我有帮助。谢谢!【参考方案10】:

对于那些在 Xcode 9 beta 的模拟器上遇到不可信连接的人:

我不知道安装脚本是否有效,但您可以通过 Safari 以与物理设备上相同的方式安装 charles 的证书。

需要的最后一步(当然是在通过脚本或通过 Safari 安装证书之后):转到 Simluator 的设置 -> 常规 -> 关于 -> 证书信任设置 -> Charles Proxy Custom Root... -> 启用?

【讨论】:

【参考方案11】:

对我来说,这是有效的。

我做了和我们在设备上做的一样的事情。

    打开 safari 并浏览 chls.pro/ssl 接受并安装证书 转到设置/关于/信任证书并信任 charles 证书。

我必须在 3 个模拟器实例上执行此操作,因为 XCUI 自动化测试可以旋转 3 个。

【讨论】:

【参考方案12】:

进入 safari(模拟器)并访问 URL 后它对我有用:

chls.pro/ssl 

在我必须在 iOS 模拟器中安装 charles 根证书之前(Charles: help/SSLproxying)

问候

【讨论】:

【参考方案13】:

iOS 模拟器的步骤。

安装查尔斯 - download Charles 菜单 -> 代理 -> 启用 Mac 代理 Charles 菜单 -> 工具 -> 代理 -> 代理设置 -> MacOS -> 检查所有检查 盒子 在 iOS 模拟器中安装 Charles 证书 Charles 菜单 -> 帮助 -> SSL 代理 -> 在 iOS 中安装 Charles 证书 模拟器 在 iOS 模拟器中启用 Charles 证书 iOS 模拟器设置 -> 常规 -> 关于 -> 证书信任设置 -> 开关 开启 如果没有出现流量,在模拟器之前运行 Charles

适用于 iPhone/iPad 的步骤。

打开桌面 Charles 应用 (Mac/Windows)

转到 Charles 菜单 -> 帮助 -> SSL 代理 -> 在移动设备或远程浏览器上安装 Charles 证书 -> 选择 -> 出现以下步骤的弹出窗口 `

将您的设备配置为使用 Charles 作为其 HTTP 代理 192.168.0.100:8888,然后浏览器到 chls.pro/ssl 下载并安装证书。

转到 iPhone 设置 -> Wifi -> 点击选中的 wifi -> Http 代理 -> 配置代理 -> 选择 手动 -> 将服务器设为 192.168.0.100,端口设为 8888 -> 保存

转到 iPhone 浏览器 -> 加载 chls.pro/ssl -> 它将显示在弹出窗口下方 `

网站正在尝试下载配置文件。你想允许这个吗? 忽略按钮和允许按钮

点击允许按钮 -> 它将下载配置文件

转到 iPhone 设置 -> 常规 -> 配置文件 -> 下载的配置文件 -> 选择 Charles Proxy 配置文件 -> 安装 转到 iPhone 设置 -> 常规 -> 关于 -> 证书信任设置 -> 启用 - Charles Proxy CA 证书 现在我们可以在桌面 Charles 应用中跟踪 iPhone 应用调用

【讨论】:

iOS 模拟器设置 -> 常规 -> 关于 -> 证书信任设置 -> 打开我需要的东西 谢谢!

以上是关于如何在 Xcode 6 (iOS 8) 模拟器上使用 Charles Proxy?的主要内容,如果未能解决你的问题,请参考以下文章

ios 8.4 模拟器在 xcode 6.4 中的尺寸非常大?

Xcode 6.4“无法下载和安装 iOS 8.3 模拟器”

安装 Xcode 6 iOS Simulator 8 后皮肤消失

可以在 IOS 8 (Xcode 6) 模拟器中测试应用内购买吗?

带有 iOS 8(Xcode 6)的 iOS 模拟器未显示在 Safari 开发菜单中

模拟器 iOS 8 Xcode 6.1 中缺少键盘