# 简介

在这里，您可查阅到我们为您提供的使用帮助。

## 欢迎使用 Choc 的说明文档。

更多关于 Choc 的内容详见[此页面](https://github.com/Watfaq/choc-docs/blob/main/getting_started/introduction.md)。

欲获得支持，请加入 [Telegram 讨论群组](https://t.me/choc_chat)，或加入 [Telegram 频道](https://t.me/choc_channel) 以获取最新消息。

> 如您的浏览器支持，也可访问本站部署在 IPFS 上的版本：<http://choc.watfaq.eth/>


# Choc 应用介绍

Choc - 一个灵活的实用性网络工具。

Choc 是一款应用于 iOS 平台上的实用性网络工具。

得益于其强大[内核](https://github.com/Dreamacro/clash)，Choc 可在 iOS 平台上运行多种网络代理协议。通过按需连接，可以满足各种不同场景下的网络访问需求。

对于多平台使用者，也可通过 Choc 实现跨平台共用配置文件，在不同平台享受一致的网络体验。


# 最近更新

此页面将会展示最近版本（仅正式版）的更新内容。

## 1.3.3

### Added

* support clash tun mode
* request to join TestFlight within app

### Changed

* optimization of config file download and import

## 1.3.2(102)

### Added

* New deeplink supports:
  * choc://start
  * choc://stop
  * choc://restart
* open config file from share sheet
* IPv6 config honors config file

### Changed

* Upgrade clash core to latest version 1.9.0

### Fixed

* crashes switching OnDemand too fast in certain cases

## 1.3.1(95)

### Features

* 配置文件排序
* 切换深色模式
* Haptics 开关
* Rewrite 支持重写请求 headers Host 字段以及正则替换\*

### Changes

* 优先使用 Group URL 进行延迟测试

> \*: 详情请看 <https://choc.watfaq.com/advanced-usage/mitm#rewrite>

## 1.3.0(91)

### Features

* 主页新增一些信息模块
* 设置页面自定义测速使用的 URL
* 长按订阅信息刷新
* 设置页新增在线订阅转换入口链接
* 新的节日图标
* 实验性功能：MitM 以及 Rewrite

### Changes

* 面板不再使用「策略组」概念，统一改为「分组」
* 重新实现面板管理后端，可在VPN断开时查看和修改代理分组
* 优化文本编辑器体验
* 性能优化
* UI 优化
* 其他优化

### Fixes

* 优化频繁切换主题颜色导致应用崩溃
* 优化 provider 延迟展示

## 1.2.0(61)

### Feature

* 全新界面 UI
* 全新实现管理面板
* 新增 RULE-SET 支持
* 新增 iCloud 自动同步本地配置选项
* 新增配置文件自动更新支持选择更新频率
* 新增自定义主题颜色

### Changes

* 设置页面布局调整

### Fixed

* 修复某些情况下下载配置文件名不正确的问题
* 其他问题修复

## 1.0.1(41)

### Feature

* 独立设置界面
* 当配置文件中未设置 DNS 时可在 UI 中添加 DNS
* 支持 `bypass tunnel routes`
* 支持隐藏 VPN 图标

### Changes

* 界面布局调整
* 其他 UI 调整
* 使用开源文本编辑类库 - 支持显示配置文件行号


# 获取远程配置

{% hint style="info" %}
若需使用 Choc ，您需要拥有至少一个包含节点信息及配置的Clash订阅。
{% endhint %}

本章节主要阐述如何 Choc 中有关添加远程配置的内容。

## URL Schema

如您所使用的代理节点提供商支持，您可通过点击按钮一键导入配置文件。支持的导入格式为：

* choc://install-config?url=URL
* clash://install-config?url=URL

## 下载远程配置

1. 在 Choc 主页面，选中右上角的 `Tray` 图标

   <img src="https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-34f666ff45dc6a2495cdf2c38325a9bd6c1e8121%2Fconfig-tray.png?alt=media" alt="" data-size="original">
2. 在”输入配置文件下载地址“中填写您的提供商提供的订阅链接

   <img src="https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-334a22c39721b07d2197f723a1bb9e904de1b9bf%2Fconfig-download.png?alt=media" alt="" data-size="original">
3. 在配置文件列表中选中您下载的配置

   <img src="https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-baeaa8f9c0200808b1e9f9d42c10ce999ed0ccdc%2Fconfig-downloaded.png?alt=media" alt="" data-size="original">


# 配置文件管理

本章节主要阐述如何 Choc 中有关配置文件管理的内容。

### 左划

![从左到右分别为：删除、编辑、更新](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-d02aa151ef71681ee5d2e55cb47433e9eade3bd7%2Fconfig-swipe-left.png?alt=media)

### 右划

![从左到右分别为：编辑名称、复制配置](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-dd1b58a9a8d7164836221eb2a7b62c69c561ad8e%2Fconfig-swipe-right.png?alt=media)


# 订阅转换

Choc 提供的在线订阅转换

* [https://choc-sub.watfaq.com/](https://choc-sub.watfaq.com)

如果您的浏览器(例如 [Brave](https://brave.com)）支持，您也可以通过 Web3 地址访问部署在IPFS 之上的版本：

* [choc-sub.watfaq.eth](http://choc-sub.watfaq.eth)


# 启用 Tailscale (Beta)

## 什么是 Tailscale

Tailscale 是基于 Wireguard 开发的易用跨平台 VPN 软件。

了解更多：<https://tailscale.com>

## 如何在 Choc 中使用 Tailscale（Beta）

{% hint style="info" %}
假设您已经注册了 Tailscale 账号
{% endhint %}

在设置中开启：

![](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-828906f7f2a32e040e22ccc8d5d20d63c6da7e82%2Ftailscale-enable.jpeg?alt=media)

{% hint style="info" %}
注意：需要断开重新连接 VPN 以使变更生效
{% endhint %}

此时在 App 主界面会出现 Tailscale 相关信息。

点击「登录」在弹出的窗口中完成 Tailscale 登录，成功后会显示当前设备获得的 Tailscale IP 地址：

![](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-477c91cdb95aaa0ba6befaed880969137b610f97%2Ftailscale-status.jpeg?alt=media)

## 访问局域网内的服务

当启用并连接了 Tailscale 之后，您可以通过 Tailscale IP 直接访问其他节点。

如果您启用了 [Tailscale 的 Relay 节点](https://tailscale.com/kb/1019/subnets/)，您可以配置 Choc 来通过 Tailscale 访问处于内网的设备（如 HomeLab/NAS）。

例如，tailscale 的 relay 节点广播了您的内网路由 10.0.0.0/24，在该网段内有：

* DNS（例如 [Pi-hole](https://pi-hole.net))：10.0.0.5
* web：my-website.my.home

且内网的网址可以通过内网 DNS 解析。

可以在 Tailscale 的控制台设置 `10.0.0.5` 为默认路由，在 Choc 中设置 DNS Suffix 为 `my.home`（长按「运行中」三个字弹出设置界面）：

![](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-b194393345d7b1c85bc88facc88a1e6569368d9f%2Ftailscale-settings.jpeg?alt=media)

断开重新连接 VPN 之后即可访问内网资源。

{% hint style="info" %}
如您不需要使用自建 DNS，您仍可以通过 Tailscale IP 或者 Magic DNS 等方式直接访问其他节点。
{% endhint %}


# 按需连接配置

![设置中按需连接部分](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-5b9d629e9718ef6a3dba4e23726fb32b29ad54f4%2Fon-demand-config.png?alt=media)

### Wi-Fi 列表配置说明

![按需连接中Wi-Fi列表部分](https://1265905731-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE8jwTAUjXK597fB3tJQ5%2Fuploads%2Fgit-blob-36fcfcc42d703c21d663e0957571574d244b67e5%2Fon-demand-wifi.png?alt=media)

可通过右上角 + 添加SSID。在 `Any` 模式下无需添加SSID。

* `any` : 任何 Wi-Fi 网络下均自动连接
* `only` : 仅在 `ssid-list` 中的 Wi-Fi 下连接
* `except` : 当处于 `ssid-list` 中的 Wi-Fi 下时断开连接


# MitM 以及 HTTP(S) Rewrite

{% hint style="info" %}
*此功能目前仍属于实验性功能，如配置后连接出现问题请暂时关闭该功能并通过*[*邮件*](mailto:support@watfaq.com?subject=%5BMitM%20%E9%97%AE%E9%A2%98%E5%8F%8D%E9%A6%88%5D%E8%AF%B7%E6%8F%8F%E8%BF%B0%E4%BD%A0%E7%9A%84%E9%97%AE%E9%A2%98)*或* [*Telegram 群组*](https://t.me/choc_chat)*反馈。*
{% endhint %}

{% hint style="info" %}
*当前版本的 MitM 支持对 HTTP(S) 请求的 URL 进行匹配以及 URL Rewrite，后续版本可能会增加 Headers 匹配/改写、运行脚本等更多功能。*
{% endhint %}

## 准备

### 准备 CA 证书

在启用 MitM 之前，需要有一个 CA 证书。

由于当前版本的 app 不支持自动生成，您可以导入已有的 CA 证书，或通过其他工具创建新的 CA 证书。

#### 导入已有 CA 证书

如您已有可用 PKCS 12/PFX 证书（例如您已经正在使用其他支持 MitM 的软件，或部署私有 PKI 系统），可将其进行 base64 编码，并保存编码后的结果备用。

您同时还需要创建该证书时指定的密钥。

{% hint style="info" %}
对于大部分用户来说，您可能已有可用证书（及其密钥）。
{% endhint %}

#### 创建全新 CA

* macOS 参考：<https://support.apple.com/zh-cn/guide/keychain-access/kyca2686/mac>
* Linux/Windows 参考：
  * 使用 cfssl 生成 PEM 格式证书和密钥：<https://rob-blackbourn.medium.com/how-to-use-cfssl-to-create-self-signed-certificates-d55f76ba5781>
  * 将 PEM 格式转换为 PFX：<https://stackoverflow.com/a/808742/1109167>

> 对于大部分用户，您可能已有可用 CA 证书。如您有安全性顾虑，建议创建个人 CA 证书。

将 P12 证书转换为 base64 编码：

```
$  base64 /path/to/your.p12

...
...
...
```

至此，应该已经准备好了：

1. base64 编码的 p12 格式 CA 证书
2. 该证书对应的密钥

### 信任证书

上一步准备好的 pfx 证书发送到手机（通过邮件/AirDrop等方式并在手机中打开安装该证书。

安装好后，进入系统设置，手动信任该证书。参考：<https://support.apple.com/zh-cn/HT204477#:~:text=If%20you%20want%20to%20turn,Mobile%20Device%20Management%20(MDM)>

至此，准备工作结束。

## 配置

### MitM

由于 clash 使用 yaml 格式的配置文件，为保持一致性，MitM 相关功能仍然通过 yaml 配置文件来设置。

相关的配置项：

```yaml
mixed-port: 8080  # 原有 clash 配置

# 新增以下配置项
mitm:
  enable: true  # 是否开启
  hostnames:  # 需要进行 MitM 匹配的 hostname，支持通配符 *
  - '*.google.com'
  - www.qq.com

  ca:
    passphase: "填入上一步准备好的证书密钥"
    certificate: "填入上一步准备好的证书 base64 编码"
```

至此 MitM 配置完毕。

如果 log-level 设置为 debug，匹配 MitM hostname 的请求会出现在日志中。

> 启用 MitM 后可以解密 HTTPS 请求与响应，由于目前版本不支持显示相关内容，所以无法通过 UI 查看。未来的版本中会增加该功能。

### Rewrite

由于仅配置 MitM 目前来说没有任何实际意义，可通过配合 URL Rewrite 规则来实现进阶的规则匹配与处理。

相关的配置项：

```yaml
port: 8080  # 原有 clash 配置

# 新增以下配置
rewrite:
- regex: ^https?:\/\/api\.douban\.com\/v2\/app_ads\/common_ads
  match: url
  action: reject-image
  target: ""
```

参数解释：

每一组 Rewrite 规则由以下参数组成：

* regex：需要重写的请求 URL，支持[正则表达式](https://github.com/google/re2/wiki/Syntax)
* match: `url` 表示匹配请求的 URL。
  * 目前仅支持 `url` 一项，之后会新增
* action：
  * reject：直接关闭连接
  * reject-image：修改该请求的响应，返回 1x1 像素大小的图片文件
  * 自定义 status code：例如，200/404 等
  * header：会替换请求 header 中的 Host 字段
* target：仅当 action 设置为 3xx status code 时，会设置 Location header 为 target 值，实现 URL 重定向
  * 可以使用正则表达式引用例如：

    ```yaml
    - regex: ^https?:\/\/(www.)?jd\.com\/(.*)
      match: url
      action: "302"
      target: https://www.jd.com/$2
    ```
  * 关于正则表达式：<https://github.com/google/re2/wiki/Syntax>

更多规则可**参考**，并更具实际使用场景做出调整：<https://raw.githubusercontent.com/Watfaq/choc-configs/main/samples/rewrite.yaml>

## 参考链接

* <https://en.wikipedia.org/wiki/Certificate_authority>
* <https://en.wikipedia.org/wiki/Man-in-the-middle_attack>
* <https://datatracker.ietf.org/doc/html/rfc7231#section-6>

***

如有疑问，可通过文章顶部邮件/Telegram 用户群组反馈。

也可通过支持 Web3 的浏览器访问本文部署于 IPFS 上的版本：<http://choc.watfaq.eth/advanced-usage/mitm.html>


# 支持的 URL Scheme

* choc://start - 启动
* choc://stop - 停止
* choc://restart - 重启
* choc://install-config?url=URL - 导入配置文件
* clash://install-config?url=URL - 导入配置文件


# FAQ

常见问题

## 这是什么？

这是首个 clash on iOS 的公开版本。

完全基于原生 clash 开发，并针对 iOS 使用场景进行深度适配 - 并非 **兼容** clash 配置。

您可以用这个软件完成所有 clash 能做的事情，并且同时可以使用 iOS 版本独有的特性。

## clash 是什么？

下一个问题。

## 如何使用？

添加符合 clash 格式的配置文件后点击启动按钮。

## 如何添加配置文件？

参考：<https://choc.watfaq.com/basic-usage/remote-config>

## 和其他软件相比哪个快？

不一定。

## 能替代其他软件吗？

请看第一个问题。

## 如何实现 Safari 搜索跳转到 Google.com ？

参考配置片段：

```yaml
- regex: ^http://www.google.cn
  match: url
  action: "header"  # rewrite request header Host
  target: http://www.google.com
```

或者：

```yaml
- regex: ^https?://www.google.cn/(.*)
  match: url
  action: "302"
  target: https://www.google.com/$1  # redirect with params
```

## 为什么主页没有显示订阅用量信息？

显示订阅信息需要订阅的 URL 在返回的数据中包含该订阅的使用情况。

如您的订阅在使用订阅转换后无法显示用量信息，可在配置文件第一行加入以下配置：

```
### subscription-url = 替换为你自己的订阅地址
```


