# iOS 模拟器

> 在 macOS 上使用 Proxyman 抓包 iOS 模拟器的 HTTP/HTTPS 流量：涵盖证书自动设置、手动安装和无流量排查。

使用 Proxyman 在 Mac 上抓取并查看 iOS 模拟器中的 HTTP/HTTPS 请求。请先使用自动证书安装；如果安装失败，再使用下面的手动步骤。

开始之前，请先安装 Xcode，并至少打开一次要调试的模拟器。在重现应用中的请求时，请保持 Proxyman 运行。如需进行 HTTPS 解密，请先安装并信任证书，然后为该域名启用 [SSL Proxying](https://proxyman.com/docs/zh-cn/basic-features/ssl-proxying)。

在 Proxyman 中打开模拟器设置指南：

* **Certificate** **菜单** -> **Install Certificate on iOS -> Simulators**

## 视频 {#video}

[Video: 从 iOS 模拟器抓取 HTTPS 流量](https://proxyman.com/videos/ios-simulator) (32 seconds)

[使用 Xcode 26 在 iOS 26 模拟器上抓取原生 iOS 应用的 HTTPS 流量](https://www.youtube.com/watch?v=THzb2e9hoGo)

## 1. iOS 模拟器设置指南 {#1-ios-simulator-setup-guide}

![Proxyman iOS 模拟器设置，包含三个步骤：证书已安装并受信任、准备模拟器和重启](https://proxyman.com/docs/assets/proxyman-ios-simulators-setup.jpg)

_iOS 模拟器设置_

> **备注:** 它适用于 iOS、iPadOS、tvOS、watchOS 和 visionOS。

设置指南包含三个步骤：

1. 在 Mac 上安装 **Root Proxyman Certificate**：可参考 [macOS 指南](https://proxyman.com/docs/zh-cn/debug-devices/macos)。
2. 在所有你至少打开过一次的可用模拟器上安装 Proxyman 证书（点击 **Prepare Simulators**）。
3. **重启模拟器**：Proxyman 会重启所有模拟器，使其加载新证书。

> **备注:** 从 Proxyman 2.19.0 起，Proxyman 使用 [simctl](https://nshipster.com/simctl/) 命令行工具执行这些任务。 
>
> **simctl** 随 Xcode 一同提供。相比旧的方式（自定义 Python 脚本），它更现代、更可靠。

> **备注:** 此步骤仅会在你至少打开过一次的模拟器上安装证书。
>
> 例如，如果你想在 iPhone X 模拟器上调试，请先**打开** iPhone X 模拟器，然后在第 2 步中**安装**证书。 

### Xcode Preview（SwiftUI） {#xcode-preview-swiftui}

如果你使用 SwiftUI 的 Xcode Previews，可以将证书安装到 Xcode Preview 模拟器中：

1. 打开带有 SwiftUI 预览画布的 Xcode。
2. 打开 Proxyman -> Certificate 菜单 -> Install Certificate on iOS -> Simulators
3. 在第 2 步中，点击 Prepare Simulators 按钮旁边的 ↓ 按钮 -> Install to Xcode Preview (SwiftUI)

你可以在 [GitHub issue #1568](https://github.com/ProxymanApp/Proxyman/issues/1568#issue-1610877870) 中了解更多信息。

### 手动安装 {#manually-install}

在 Proxyman v4.16.0 或更高版本中，如果自动安装方案无法正常工作，你可以手动将证书安装到 iOS 模拟器中。

1. Certificate 菜单 -> Install Certificate on iOS -> Simulators
2. 在第 2 步中，点击 Prepare Simulators 按钮旁边的 ↓ 按钮 -> Install Manually…

![Proxyman iOS 模拟器设置，展开 Prepare Simulators 菜单并选中 Install Manually](https://proxyman.com/docs/assets/Screenshot%202024-11-01%20at%2020.14.39.jpg)

_手动安装证书_

3. 将证书拖放到 iOS 模拟器上

![Proxyman 弹窗，包含可拖动的 Proxyman 证书图标以及在模拟器中信任该证书的步骤](https://proxyman.com/docs/assets/Screenshot%202024-01-07%20at%2014.43.13.png)

_将证书拖到模拟器上，然后信任它_

4. 打开 iOS 模拟器 -> Settings app -> General -> About -> Certificate Trust Settings -> 找到 Proxyman CA 证书，并将其开关打开
5. 完成

## 2. 故障排除 {#2-troubleshooting}

如果请求列表为空，请先参照[无流量排查清单](https://proxyman.com/docs/zh-cn/troubleshooting/i-couldnt-see-any-traffics-on-proxyman)检查录制状态、过滤器和代理设置。如果请求能够显示但 HTTPS 失败，请检查证书安装情况和 SSL Proxying。下面的章节介绍安装错误和缓存请求的问题。

### 1. 无法安装证书 {#1-unable-to-install-the-certificate}

如果点击第 2 步中的按钮时出现错误，请打开 Xcode -> Settings -> Locations 标签页，并在 Command Line Tools 中选择你的 Xcode。

### 2. HTTPS 响应中出现 SSL 错误 {#2-get-ssl-error-from-https-response}

* 打开 Settings app -> General -> About -> Certificate Trust Settings，确认 Proxyman 证书已安装并受信任。

如果证书未安装：

* 打开 iOS 模拟器设置（Certificate 菜单 -> Install Certificate on iOS -> Simulators），然后点击第 2 步中的按钮。
* 或者尝试下方[通过导出证书手动安装](#manually-install-the-certificate-by-exporting-the-certificate)中的步骤。

### 3. 部分 HTTP/HTTPS 请求未显示在 Proxyman 中 {#3-some-httphttps-requests-are-missing-from-proxyman}

Alamofire 或 URLSession 可能会为你的请求使用缓存的响应。因此，实际请求不会到达服务器，Proxyman 也就无法抓取和显示它。

解决方法： 

* 在 URLSession 或 Alamofire 中禁用缓存机制。
* 使用 [No Caching 工具](https://proxyman.com/docs/zh-cn/advanced-features/no-caching)（⌥⌘N）

## 通过导出证书手动安装 {#manually-install-the-certificate-by-exporting-the-certificate}

如果无法安装证书，你可以**手动**安装：

1. 打开 Proxyman -> Certificate 菜单 -> Export -> Root Certificate as DER -> 保存到桌面文件夹
2. 打开模拟器，然后将证书**拖放**到模拟器屏幕上
3. 在（模拟器上的）Settings app -> General -> VPN & Device Management（旧版 iOS 中为 Device Management）-> 选择该证书 -> 安装
4. Settings app -> General -> About -> Certificate Trust Settings，确认 Proxyman 证书已安装并受信任。
5. 完成 ✅

## 教程 {#tutorial}

参阅详细步骤，了解如何使用 Proxyman [调试 iOS 模拟器上的应用](https://proxyman.com/posts/2019-07-06-Debugging-on-iOS-Simulator-with-Proxyman)。

## 了解更多 {#learn-more}

* [如何使用 Proxyman 检查 iOS 15 模拟器的网络流量](https://proxyman.com/posts/2022-06-04-How-to-inspect-network-traffic-from-iOS-simulator-with-Proxyman)
* [抓取 Vision Pro 模拟器的 HTTPS 请求](https://proxyman.com/posts/2024-01-24-Capture-HTTPS-traffic-from-Vision-Pro-Simulator)
* [使用 Proxyman 抓取 iOS 模拟器的 HTTP/HTTPS 流量](https://proxyman.com/ios-simulator)（Proxyman 官网）
