[![Translate to English](https://img.shields.io/static/v1?label=Translate&message=to%20English&color=blue&logo=googletranslate&logoColor=white&labelColor=grey&messageColor=white)](https://translate.google.com/translate?hl=en&sl=zh-CN&tl=en&u=https://github.com/LOWERTOP/Shadowrocket/wiki "Google Translate")

[![Shadowrocket](https://socialify.git.ci/LOWERTOP/Shadowrocket/image?custom_description=%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C%0AUser+Manual&description=1&font=Rokkitt&logo=https%3A%2F%2Fraw.githubusercontent.com%2FLOWERTOP%2FShadowrocket-First%2Frefs%2Fheads%2Fmain%2Fimg%2FShadowrocket.png&name=1&pattern=Plus&theme=Light)](https://github.com/LOWERTOP/Shadowrocket "仓库地址")

> [!NOTE]
> 
> 本使用手册以 **[Shadowrocket 官方群组](https://t.me/ShadowrocketApp)** 使用的关键词列表文件为基础进行完善更新，包含软件多数功能的介绍和部分常见问题及解答。本仓非官方仓库，仅由社区进行维护，本仓对原作者及所有为相关项目做出贡献的人表示由衷的感谢！请确保在使用本文及相关软件的过程中符合当地法律法规。其他使用需求可尝试查看 **[配色与配置仓库](https://github.com/LOWERTOP/Shadowrocket-First)**

> [!TIP]
> 
> **[懒人配置](https://lowertop.github.io/Shadowrocket/lazy_group.conf "含策略组版本")** 是专为 Shadowrocket 打造的开箱即用的配置文件，首发于 [官方群组](https://t.me/ShadowrocketApp)。该配置文件优化了各项设置并包含了详细的参数说明，可在纯文本模式下查阅<br>
> ```ruby
> https://lowertop.github.io/Shadowrocket/lazy_group.conf
> ```
> 
> 本仓与官方群组发布的版本同时更新，[Johnshall](https://github.com/Johnshall/Shadowrocket-ADBlock-Rules-Forever) 的版本也与本仓保持同步。对新手用户而言更推荐 [访问官方群组](https://t.me/ShadowrocketApp) 使用离线版本

------

# [Shadowrocket 使用手册](https://lowertop.github.io/Shadowrocket/ "发布页面")

[![AppStore](https://shadowlaunch.com/static/appstore.svg)](https://apps.apple.com/us/app/shadowrocket/id932747118 "AppStore")

> [!NOTE]
> 
> **[Shadowrocket](https://apps.apple.com/us/app/shadowrocket/id932747118)**（常被用户称为 **小火箭**）是一款由 **[Shadow Launch Technology Limited](https://shadowlaunch.com/)** 专为 iOS 设备开发的网络代理工具，同时也支持 Apple TV 等设备，软件自 **[2.2.70 (2712)](https://t.me/ShadowrocketNews/1047)** 版本起已正式支持 macOS

> 官方群组：[Shadowrocket App](https://t.me/ShadowrocketApp)<br>
> 官方频道：[Shadowrocket News](https://t.me/ShadowrocketNews)<br>
> 反馈邮箱：[buginapp@gmail.com](mailto:buginapp@gmail.com)

## [使用目录](#使用目录)

> 点击 **目录标题** 可以快速定位到相关正文<br>
> 点击正文的 **蓝色标题** 可以快速回到目录

> * [首页](#软件首页)
>     * [快速使用方法](#快速使用方法)
>     * [添加节点](#添加节点)
>     * [协议类型](#协议类型)
>     * [更新订阅节点](#更新订阅节点)
>     * [节点排序](#节点排序)
>     * [节点分享与整理](#节点分享与整理)
>     * [订阅节点筛选](#订阅节点筛选)
>     * [代理通过/代理链](#代理通过代理链)
>     * [全局路由](#全局路由)
>     * [连通性测试](#连通性测试)
>     * [修改测试地址](#修改测试地址)
>     * [场景](#场景)
>     * [简单模式](#简单模式)
>     * [启用回退](#启用回退)
> * [配置](#配置页面)
>     * [配置文件](#配置文件)
>     * [使用配置](#使用配置)
>     * [编辑配置](#编辑配置)
>     * [编辑纯文本](#编辑纯文本)
>     * [编译配置](#编译配置)
>     * [预览配置](#预览配置)
>     * [更新配置](#更新配置)
>     * [重新命名](#重新命名)
>     * [导出配置](#导出配置)
>     * [扩展配置](#扩展配置)
>     * [通用参数](#通用参数)
>     * [隐式参数](#隐式参数)💡
>     * [添加规则](#添加规则)
>     * [规则优先级](#规则优先级)
>     * [规则类型](#规则类型)
>     * [规则策略](#规则策略)
>     * [策略扩展参数](#策略扩展参数)
>     * [APP分流](#app分流)
>     * [更新规则集](#更新规则集)
>     * [预览规则集](#预览规则集)
>     * [修改DNS](#修改dns)
>     * [DNS-over-PROXY](#dns-over-proxy)
>     * [no-resolve的作用](#no-resolve的作用)
>     * [代理分组](#代理分组)
>     * [代理分组类型](#代理分组类型)
>     * [隐藏代理分组](#隐藏代理分组)
>     * [负载均衡](#负载均衡)
>     * [规则集URL](#规则集url)
>     * [脚本URL](#脚本url)
>     * [复制配置文件](#复制配置文件)
>     * [替换策略](#替换策略)
>     * [测试规则](#测试规则)
>     * [Hosts](#hosts)
>     * [URL重写](#url重写)
>     * [头部重写](#头部重写)
>     * [正文重写](#正文重写)
>     * [本地映射](#本地映射)
>     * [HTTPS解密](#https解密)
>     * [脚本](#脚本)
>     * [模块](#模块)
>     * [编辑参数](#编辑参数)
>     * [证书模块](#证书模块)
>     * [身份证书密码](#身份证书密码)
>     * [编写本地节点](#编写本地节点)
> * [数据](#数据页面)
>     * [代理日志](#代理日志)
>     * [DNS日志](#dns日志)
>     * [iCloud自动同步](#icloud自动同步)
>     * [节点数据管理](#节点数据管理)
>     * [流量统计信息](#流量统计信息)
> * [设置](#设置页面)
>     * [延迟测试方法](#延迟测试方法)
>     * [小组件](#小组件)
>     * [外观](#外观)
>     * [按需求连接](#按需求连接)
>     * [隧道](#隧道)
>     * [兼容模式](#兼容模式)
>     * [前置代理](#前置代理)
>     * [代理共享](#代理共享)
>     * [代理类型](#代理类型)
>     * [开启UDP转发](#开启udp转发)
>     * [禁用STUN](#禁用stun)
>     * [Tailscale](#tailscale)
>     * [权限](#权限)
>     * [隐藏VPN图标](#隐藏vpn图标)
>     * [GEOIP数据库](#geoip数据库)
>     * [自动更新](#自动更新)
>     * [温和策略机制](#温和策略机制)
> * [其他](#其他问题)
>     * [自动切换节点](#自动切换节点)
>     * [订阅异常](#订阅异常)
>     * [节点旗帜](#节点旗帜)
>     * [节点感叹号](#节点感叹号)
>     * [微信转圈](#微信转圈)
>     * [模块消失](#模块消失)
>     * [模块失效](#模块失效)
>     * [VPN自动断开](#vpn自动断开)
>     * [检测代理](#检测代理)
>     * [编译原因](#编译原因)
>     * [URL-Schemes](#url-schemes)

------

## [软件首页](#使用目录)

### [快速使用方法](#使用目录)
> 
> * [首页](#软件首页) > [添加节点](#添加节点)
> * [设置](#设置页面) > [延迟测试方法](#延迟测试方法) > **CONNECT**
> * [首页](#软件首页) > [连通性测试](#连通性测试) > 选可用节点连接
>   
> * 首次启动会提示 **安装VPN配置文件**，请点击 **好** 和 **允许** 才能正常使用

### [添加节点](#使用目录)

> Shadowrocket 兼容多种服务器订阅格式，以及支持多种 [代理协议类型](#协议类型) 包括 [WireGuard 节点](#添加wireguard节点)
> 
> * 首页 > 左上角 > 扫码添加
>   
>   _此操作须开启摄像头权限_
>   
> * 复制节点链接，如 `trojan://*`、`vmess://*`、`vless://*` 等，打开 Shadowrocket 时会自动识别导入
>   
>   _此操作须开启剪贴板读取权限_
> 
> * 首页 > 右上角 `➕` > 类型 `Subscribe` > URL 栏输入服务器订阅链接 > 保存
> 
>   _订阅链接后面加上 `#1`、`#2`、`#3` 等，可以重复添加同一个订阅_
> 
>   _长按服务器订阅可选 **隐藏** 功能，启用后该订阅将默认不显示任何节点，该功能等同于在订阅编辑内的 **最大值** 填写数字 `0`_
> 
> * 首页 > 右上角 `➕`，选择对应节点类型，填写节点配置信息并保存
>   
> * Shadowrocket 为了兼容部分其他类型的配置文件，也支持在配置文件中 [编写本地节点](#编写本地节点) 信息，但不要当作 [添加节点](#添加节点) 的优先选择
>
> _若添加或更新订阅时出现异常，请参见 [订阅异常](#订阅异常)_
> 
> > **添加WireGuard节点**
> > 
> > * 首页 > 右上角 `➕` > 类型选择 `WireGuard`，填写配置信息
> > 
> > * 复制如下格式的 `WireGuard` 配置信息，打开 Shadowrocket 时会自动弹出 **添加对话框**，点击添加
> >   
> >   ```ruby
> >   [Interface]
> >   PrivateKey = xxxxxx
> >   Address = 172.16.0.2/32
> >   DNS = 1.1.1.1
> >   MTU = 1420
> >   [Peer]
> >   PublicKey = xxxxxx
> >   AllowedIPs = 0.0.0.0/0
> >   AllowedIPs = ::/0
> >   Endpoint = engage.cloudflareclient.com:2408
> >   Reserved = 12,34,56
> >   ```
> >   如果没有自动弹出对话框，可能是因为设置中的 **允许检测剪贴板** 被关闭了，您可以重新打开，或者点击首页 **连通性测试** 下方的 **粘贴** 按钮，手动添加配置信息

### [协议类型](#使用目录)

> 现阶段正式版软件及测试版软件已支持的协议类型
> 
> > **Subscribe（订阅）、Shadowsocks、ShadowsocksR、Vmess、VLESS、Relay、Socks5、Socks5 Over TLS、HTTP、HTTPS、HTTP2、Trojan、Hysteria、Hysteria2、AnyTLS、TUIC、Juicity、SSH、WireGuard、Snell、Mieru、OpenConnect、TrustTunnel、Brook、Lua**
>
> 当前版本支持的协议可在 **首页 > 右上角 `➕` > 类型** 中查看
>
> 各协议节点的纯文本格式参见 [编写本地节点](#编写本地节点)

### [更新订阅节点](#使用目录)

> * 订阅右滑 > 更新
> 
> * 点击首页的更新订阅按钮🔄
> 
> * 设置 > 订阅 > 打开时更新（刷掉后台，重新打开应用程序时会自动更新订阅）
> 
> * 设置 > 订阅 > 自动后台更新（需在系统 **设置 > 通用 > 后台App刷新** 中开启对 Shadowrocket 的允许，更新周期可设1-24小时）
> 
> * Shadowrocket 提供了 **更新订阅** 的快捷指令，可以实现自动化操作
> 
> * 长按屏幕的应用图标 > 更新订阅
>
> * 软件提供 [自动更新](#自动更新) 服务
>
> 若添加或更新订阅时出现异常，请参见 [订阅异常](#订阅异常)

### [节点排序](#使用目录)

> * 设置 > 订阅 > 根据 `Ping` 排序
> 
> 根据节点延迟测试结果由低到高自动排序

### [节点分享与整理](#使用目录)

> **节点分享**
> 
> > * 长按节点 > 拷贝，可以把节点链接分享给其他设备
> > 
> > * 左滑节点 > 二维码，其他设备可以通过扫码添加节点（二维码页面点击右上角的 **分享** 按钮，可以选择其他形式传送二维码）
> > 
> > * 点击节点后面的 `ⓘ` 图标，滑动至页面底部，有多种分享节点的菜单
> > 
> > * 展开节点列表，点击连通性测试下方的编辑按钮 `•••`，勾选需要分享的节点，点击左上角的 **复制**，可以把多个节点链接同时分享给其他设备
> > 
> >   **_节点二维码及 URL 缺乏统一标准，Shadowrocket 的节点分享仅代表可以分享给其他终端的 Shadowrocket。当使用其他代理工具扫码添加由 Shadowrocket 导出的某些节点时，可能会丢失部分节点信息，导致不能连接。如果遇到此问题，请仔细检查同一个节点的各项配置信息是否一致_**
> > 
> 
> **节点整理**
> 
> > * **调整顺序**：点击编辑按钮 `•••`，或者长按首页右上角的 `➕`，即可进入编辑模式，按住订阅或节点后面的 `≡` 图标可以调整订阅或节点之间的上下顺序（本地节点默认置顶位置）
> > 
> > * **节点分类**：非订阅形式添加的节点，默认会归类为 **本地节点**。如果需要重新对本地节点进行分类，可以使用 **折叠** 功能。点击编辑按钮 `•••`，勾选节点，点击左上角的 **折叠**，为新分类的节点组命名（**折叠** 功能可以选择本地节点或者订阅节点）
> > 
> > * **删除节点**：点击编辑按钮 `•••`，点击左上角的 **删除**，可以选择删除全部节点或者删除连通性测试结果中的超时节点
> > 
> > * **滑动菜单**：向右滑动订阅，可以选择 **测试** 当前订阅节点的连通性，或者 **更新** 当前订阅节点。向右滑动节点，点击 **测试** 可以获取单个节点的连通性测试结果，点击 **复制**，可以在当前节点列表中新增一个同样配置信息的节点

### [订阅节点筛选](#使用目录)

> Shadowrocket 支持通过脚本或正则表达式对订阅节点进行筛选，从而实现更灵活的节点过滤与管理
> 
> * 首页 > 订阅后面的 `ⓘ` 图标 > 过滤
> 
> **节点筛选**
> 
> > * 保留节点名称含有关键词 A 和 B 的节点：
> >   ```ruby
> >   /(?=.*(A))^(?=.*(B))^.*$/
> >   ```
> > * 保留节点名称含有关键词 A 或 B 的节点：
> >   ```ruby
> >   A|B
> >   ```
> > * 排除节点名称含有关键词 A 或 B 的节点：
> >   ```ruby
> >   /^((?!(A|B)).)*$/
> >   ```
> > * 保留节点名称含有关键词 A 并排除含有关键词 B 的节点：
> >   ```ruby
> >   /(?=.*(A))^((?!(B)).)*$/
> >   ```
> > 
> > _分组、代理分组中的正则写法与上述【过滤】中使用的命令相同，但需删除前后 `/` 符号_
> 
> **批量整理**
> 
> > 节点订阅筛选功能支持使用脚本代码批量整理和修改相应订阅中节点的功能选项及节点名称
> > 
> > * 批量给节点中的关键词 a 替换成 b：
> >   ```ruby
> >   $server.title=$server.title.replace(/关键词a/g,'关键词b')
> >   ```
> > * 批量给节点名称增加 abc 开头的关键词：
> >   ```ruby
> >   $server.title='abc'+$server.title
> >   ```
> > * 批量给节点名称增加 abc 结尾的关键词：
> >   ```ruby
> >   $server.title=$server.title+'abc'
> >   ```
> > * 批量开启全部节点的片段：
> >   ```ruby
> >   $server.reserved="1,40-60,30-50"
> >   ```
> > * 批量开启全部节点的多路复用：
> >   ```ruby
> >   $server.mux=1
> >   ```
> > * 批量设置全部订阅节点的 代理链/链式代理/代理通过，以下两种方式以生效者为准
> >   
> >   ```ruby
> >   $server.chain="订阅名称/节点名称"
> >   ```
> >   ```ruby
> >   $server['dialer-proxy']="UUID值"
> >   ```
> >   _其中 **UUID 值** 可在中转节点或订阅的 JSON 文本中复制，第一种命令的 **订阅名称/节点名称** 也可以使用 UUID 值_
> >   
> > * 当节点名称不包含地区标识，且节点地址有可以分辨地区的关键词时，可以使用以下脚本为节点名称批量添加地区关键词或旗帜标识
> >   ```ruby
> >   if (/节点地址关键词/i.test($server.host)) {
> >     $server.title = '需要添加的关键词或旗帜'+ $server.title
> >     return true;
> >   }
> >   ```
> 
> **其他命令**
> 
> > 该功能也支持更复杂的脚本指令，可以参阅 [此处示例](https://github.com/LOWERTOP/Shadowrocket-First#%E7%AD%9B%E9%80%89%E8%AE%A2%E9%98%85%E8%84%9A%E6%9C%AC)

### [代理通过/代理链](#使用目录)

> 当前代理通过另一个代理进行连接，支持多级链式代理，但并非所有协议都支持通过代理链作为落地节点使用。使用代理链方法：
> 
> * 使用节点 A 连接，点击节点 A 后面的 `ⓘ` 图标，**代理通过** 选择节点 B，流量走向：`Client > B > A > Web server`
> * 支持使用分组/代理分组作为中转代理
> * 支持批量修改订阅节点的代理链，可实现同时部署多个节点的链式代理。具体命令可查看 [订阅节点筛选 > 批量整理](#订阅节点筛选) 中的相关指令
> * 取消代理通过/代理链：点击开启该功能节点后面的 `ⓘ` 图标，**代理通过** 选择右上角的 **取消** 后保存

### [全局路由](#使用目录)

> * **配置**：流量根据设定规则进行分配，有些通过节点连接，有些则不通过
> * **代理**：全部流量都通过同一个节点连接
> * **直连**：全部流量都不通过节点连接
> * **场景**：根据不同的网络连接类型（Wi-Fi、蜂窝数据）自动切换到预先设置的路由模式，并选择对应的配置文件和节点连接

### [连通性测试](#使用目录)

> 点击首页的 **连通性测试**，节点列表将会显示以毫秒（ms）为单位的延迟数字，这是数据包的传输时间，不同的 **延迟测试方法** 对应不同的计算结果。长按首页的 **连通性测试**，可以临时调整测试方法，仅对本次测试生效
> 
> 设置 > 延迟测试方法
> 
> * **TCP**：建立 `TCP` 连接的往返时间
> * **ICMP**：发送 `ICMP` 回显请求报文和接收 `ICMP` 回显应答报文的往返时间
> * **CONNECT**：向测试 URL 发送一个 `HTTP HEAD` 请求，测量从发送请求到接收响应头部信息的往返时间
> 
> 请优先选择 `CONNECT`，因为它更能准确反映节点的连通性。延迟大小与网络上传下载速度没有直接关系，测速请使用其他方法，如：<https://www.speedtest.net>

### [修改测试地址](#使用目录)

> **用于首页和分组节点的延迟测试**
> 
> > * 设置 > 延迟测试方法 > URL 测试设置
> > * 首页 > 连通性测试后面的圆形图标 > URL 测试设置
> 
> **用于代理分组内节点的延迟测试**
> 
> > * 点击配置文件的 `ⓘ` 图标 > 代理分组 > 编辑或添加包含自动测试类型的分组 > 最下方 URL 栏

### [场景](#使用目录)

> 场景是根据不同的网络连接类型（Wi-Fi、蜂窝数据）自动切换到预先设置的路由模式，并选择对应的配置文件和节点连接
> > * 首页 > 全局路由 > 设置的 **场景** > 添加场景
> > * 为指定的网络连接类型设置对应的路由模式（**配置、直连、代理**），类型（**节点、分组**）、配置文件 及 备注
> > * 网络连接类型分别为：Wi-Fi、蜂窝数据、默认。选择Wi-Fi类型时，SSID需填写Wi-Fi名称
> > * 首页 > 全局路由 > 选择 **场景**
>
> 软件支持添加蜂窝数据场景，支持以 **网络接口** 作为匹配条件
> > * 默认（留空）代表接口 `pdp_ip0`
> > * 当设备启用了多个蜂窝数据网络时，可在 Shadowrocket 的 设置 > 诊断 > 网络 中查看对应的接口信息
> > * 输入格式：`pdp_ip1`、`pdp_ip2`、`pdp_ip3` 等
> 
> 首次添加场景，可能会弹出申请权限的对话框，具体原因请看 [权限](#权限)。当没有允许定位权限时，场景列表的 ✅ 标记不会随着网络类型的切换而自动切换，但这不影响场景功能的正常生效
> 
> 设置 > 隧道/按需求连接 中的 **包含所有网络** 相关选项可能会对场景模式的生效造成影响


### [简单模式](#使用目录)

> 简单模式是一种以相对简单的方式实现自动测试并选择延迟低的节点进行连接的设置模式。简单模式未来或不再维护，其功能已被 **[代理分组](#代理分组)** 所包含，建议使用 [代理分组](#代理分组) 替代简单模式
> 
> * 首页 > 全局路由 > 分组 > 简单模式
> 
> > **节点的范围是什么？**
> > > 当开启简单模式，此时下方会出现分组选项，如果没有继续添加分组的操作，节点范围就是首页全部节点，如果添加分组，范围就变成分组里的节点
> > 
> > **自动测试的周期是多久？延迟低的判断依据是什么？**
> > > **设置 > 延迟测试方法 > URL测试设置**，这里规定了测试的间隔时间，默认 600s，即表示每 10 分钟自动进行一次节点延迟测试。相邻两次测试结果中最小延迟值的对比，根据公差机制决定是否切换节点，公差越大，触发节点切换的频次越低，默认 0ms，即表示只要后面测试结果的最低延迟节点比前面测试结果的最低延迟节点延迟小就会自动切换
> > 
> > **切换的节点给什么规则使用？**
> > > Shadowrocket 内置策略 `proxy`，简单模式时自动切换的节点使用于所有指向 `proxy` 策略的规则
> > 
> > **简单模式是自动切换延迟低节点，代理分组的 url-test 类型也是自动切换延迟低节点，两者有何不同？**
> > > 代理分组创建后，需要在规则中修改策略指向，而简单模式已经关联 `proxy` 策略，节省了修改规则的步骤<br>
> > > **全局路由** 选择 **代理** 时将导致所有 **代理分组** 失效，而简单模式依然能够实现自动切换节点
> > 
> > **添加分组时的测速开关是什么作用？**
> > > 开启测速，这个分组才允许自动切换节点。不开启测速，这个分组只能手动选择节点

### [启用回退](#使用目录)

> 首页 > 全局路由 > 启用回退
> 
> **启用回退** 的功能是当节点连接失败时自动切换其他可用节点
> * 连接失败3次才会触发回退机制
> * 节点只满足可用性，不要求是最低延迟节点
> * 随机切换，不按照节点顺序选择
> * 策略为 `proxy`，节点切换范围就是首页全部节点，如果开启简单模式并选择分组，则范围缩小至分组内节点
> * 策略为 **非 select 类型** 的 [分组/代理分组类型](#代理分组类型)，节点切换范围就是分组或代理分组内节点
> * 具体切换到哪个节点，请查看 [代理日志](#代理日志)

------

## [配置页面](#使用目录)

### [配置文件](#使用目录)

> [!NOTE]
> 
> Shadowrocket 的配置文件是用于快速设置和调整软件的核心功能的重要文件，通常以 `*.conf` 格式保存。配置文件还可以在多设备间同步以及分享配置文件给其他用户，以快速部署相同设置、简化用户手动配置的流程。用户可以在配置文件里设置 [通用参数](#通用参数)、[添加规则](#添加规则)、[Hosts](#hosts)、[URL重写](#url重写)、[HTTPS解密](#https解密)、[脚本](#脚本)等内容。[模块](#模块) 的写法与配置文件相同<br>
> 同时，Shadowrocket 支持在配置文件中 [编写本地节点](#编写本地节点)，但该操作方式仅是为了兼容部分其他类型的配置文件，不能当作 Shadowrocket [添加节点](#添加节点) 的优先选择<br>

> Shadowrocket 内置了一个默认配置文件 `default.conf`，其中包含了国内外主要网站或服务的分流规则，一般可以满足大多数用户的基本需求。此配置文件的内容跟随应用更新而做不定期的调整。如果在使用过程中错误修改或误删配置文件，可以点击 **配置 > 恢复默认配置**。
> 
> 添加配置文件方法：
> > * 从 URL 下载配置
> >   * 配置 > 右上角 `➕` > 粘贴配置链接 > 下载 > 点击对应的配置文件 > [使用配置](#使用配置) / [编译配置](#编译配置)
> >   * Shadowrocket 兼容使用 **Clash YAML 格式** 的配置文件。使用含节点信息的标准 Clash 链接可以同时导入配置文件和节点信息
> >  
> > * 从本地存储或云盘导入
> >   * 配置 > 从云导入，点击对应存储路径的配置文件
> 
> 点击配置文件，显示操作菜单（以下选项可能因不同的软件版本而有所不同）：
> > * [使用配置](#使用配置)
> > * [编辑配置](#编辑配置)
> > * [编辑纯文本](#编辑纯文本)
> > * [编译配置](#编译配置)
> > * [预览配置](#预览配置)
> > * [更新配置](#更新配置)
> > * [扩展配置](#扩展配置)
> > * [重新命名](#重新命名)
> > * [导出配置](#导出配置)
> 
> 点击配置文件的 `ⓘ` 图标或点击 **[编辑配置](#编辑配置)**，进入编辑菜单（以下选项可能因不同的软件版本而有所不同）：
> > * [通用](#通用参数)
> > * [规则](#添加规则)
> > * [Hosts](#hosts)
> > * [URL重写](#url重写)
> > * [头部重写](#头部重写)
> > * [正文重写](#正文重写)
> > * [本地映射](#本地映射)
> > * [HTTPS解密](#https解密)
> > * [脚本](#脚本)
> > * [代理分组](#代理分组)
> > * [规则集URL](#规则集url)
> > * [脚本URL](#脚本url)
> > * [复制](#复制配置文件)
> > * [替换策略](#替换策略)
> > * [测试规则](#测试规则)

### [使用配置](#使用目录)

> 点击 **使用配置** 可以编译并启用该配置文件。该功能会对该配置使用的远程 [规则集](#规则集url)、[脚本](#脚本url) 等远程资源进行更新

### [编辑配置](#使用目录)

> 使用 UI 交互界面对配置文件的可设置项进行调整。[部分设置或命令](#通用参数) 不提供 UI 编辑界面，如有需要可在 [纯文本编辑](#编辑纯文本) 中使用

### [编辑纯文本](#使用目录)

> 使用纯文本模式对配置文件的可设置项进行调整。[部分设置或命令](#通用参数) 不提供 UI 编辑界面，仅在纯文本模式下可以设置
> 
> 配置文件的纯文本编写方法可以参考：
> > * [懒人配置](https://raw.githubusercontent.com/LOWERTOP/Shadowrocket/main/lazy.conf)<br>
> > * [懒人配置（含策略组）](https://raw.githubusercontent.com/LOWERTOP/Shadowrocket/main/lazy_group.conf)

### [编译配置](#使用目录)

> 点击 **编译配置** 可以对该配置文件进行重新编译。可以理解为软件将该配置文件重新编辑并转译为符合当前版本规范和逻辑的底层格式。该功能会更新该配置文件所用到的 [规则集](#规则集url)、[脚本](#脚本url) 等远程资源。仅当软件版本大于等于特定版本时才具有该选项

### [预览配置](#使用目录)

> 查看配置文件的纯文本格式。该选项仅当配置文件是以远程配置文件的形式添加进来的才会出现

### [更新配置](#使用目录)

> 使用当前配置文件的远程版本对当前文件进行覆盖更新。该选项仅当配置文件是以远程配置文件的形式添加进来时才会出现，该功能一般适用于在远端维护的配置文件或远程配置需要恢复时使用。除更新配置设置外该功能还会同时更新该配置所用的 [规则集](#规则集url)、[脚本](#脚本url) 等远程资源，若仅需要更新规则集等远程资源，请使用 [使用配置](#使用配置) / [编译配置](#编译配置) 功能。软件同时提供自动更新功能，相关说明及其他技巧请点击查看 [自动更新](#自动更新) 词条

> [!CAUTION]
> 
> **更新配置会覆盖在本地对配置文件所做的修改，对于在本地修改过的远程配置而言需要谨慎使用此功能**

### [重新命名](#使用目录)

> 重命名当前配置文件

### [导出配置](#使用目录)

> 将当前配置文件以文件的形式导出

### [扩展配置](#使用目录)

> * 从配置 a 扩展出配置 b，此时默认关系是 b 包含 a，也可以理解为 b 继承了 a 的内容
> 
> * 配置 b 优先级高于配置 a，该功能是对配置建立包含关系，以满足同时使用多个配置的需求
> 
> * 点击配置文件的 `ⓘ` 图标 > 通用 > 包含配置，可以修改或解除包含关系

### [通用参数](#使用目录)

> 通用参数是 Shadowrocket 中最重要的功能参数，位于 [配置文件](#配置文件) [纯文本编辑](#编辑纯文本) 模式中的 `[General]` 字段，该字段选项包含具有 UI 界面的设置项和不包含 UI 界面的 [隐式参数](#隐式参数)
> 
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > 通用
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[General]`
> > 
> > 配置行的纯文本设置语法格式为 `key = value`
> > 
> > ```ruby
> > [General]
> > key = value
> > ```
> 
> **~~旁路系统 `bypass-system`~~**
> 
> > ~~如果禁用此选项，可能会导致一些系统问题，如推送通知延迟~~<br>
> > * 本选项仅存在于特定软件版本之前，现阶段或已弃用
> 
> **跳过代理 `skip-proxy`**
> 
> > 跳过代理接口，使用 TUN 接口接管。此选项强制列表中的域名或 IP 的连接范围交由 Shadowrocket **TUN 接口** 来处理，而不是 Shadowrocket 代理接口。此选项用于提高部分应用程序对于代理环境的兼容性。若开启 [TUN 模式](#代理类型) 时，将强制使用 TUN 接管所有连接，此处地址列表可以忽略。需要注意，该选项并非将设定的地址使用直连进行连接，仅表示使用 TUN 接口处理
> 
> **TUN旁路路由 `tun-excluded-routes`**
> 
> > Shadowrocket **TUN 接口** 只能处理 **TCP 协议**。使用此选项可以绕过指定的 IP 范围，让其他协议通过
> 
> **DNS覆写 `dns-server`**
> 
> > 使用普通 DNS 或加密 DNS（如 `doh`、`doq`、`dot` 等）覆盖默认的系统 DNS。DNS 覆写仅针对直连类域名进行解析，代理类域名将经由代理服务器进行解析。DNS 覆写支持同时添加多个地址，Shadowrocket 采用并行查询的方式进行解析请求，最先返回的结果将被采用。有些 `dns over https` 支持 `http3`，所以将会尝试查询，如果支持就切换到 `http3`，可在 **doh链接** 后面加上 `#no-h3` 关闭。`doh` 强制通过 `h3` 查询的写法是将 `https` 改成 `h3`，如`h3://dns.alidns.com/dns-query`。其他示例或写法参见：[修改DNS](#修改dns)、[DNS-over-PROXY](#dns-over-proxy)
> 
> **备用DNS `fallback-dns-server`**
> 
> > 当覆写 DNS 查询失败或查询时间超过2秒，Shadowrocket 会自动回退备用 DNS。如需指定多个 DNS，可用逗号分隔。`system` 表示回退到系统 DNS，清空备用 DNS 等于将其设置为 `system`
> 
> **启用IPv6支持 `ipv6`**
> 
> > `false` 表示不启用，`true` 表示启用。即使不启用此选项，当本地网络环境支持 IPv6，并且节点域名支持 IPv6 解析，Shadowrocket 也会使用节点的 IPv6 地址进行访问。解决方法是关闭节点域名的 IPv6 解析，或者在配置文件的 `[Host]` 项目下为节点域名指定 IP 地址
> 
> **首选IPv6 `prefer-ipv6`**
> 
> > 优先向 IPv6 的 DNS 服务器查询 `AAAA` 记录，优先使用 `AAAA` 记录。`false` 表示不启用
> 
> **私有IP应答 `private-ip-answer`**
> 
> > 如果不启用该选项，域名解析返回私有 IP，Shadowrocket 会认为该域名被劫持而强制使用代理
> 
> **TUN包含路由 `tun-included-routes`**
> 
> > 默认情况下，Shadowrocket 接口会声明自己为默认路由，但由于 Wi-Fi 接口的路由较小，有些流量可能不会通过 Shadowrocket 接口。使用此选项可以添加一个较小的路由表
> 
> **总是真实IP `always-real-ip`**
> 
> > 这个选项要求 Shadowrocket 在 `TUN` 处理 DNS 请求时返回一个真实的 IP 地址而不是假的IP地址
> 
> **DNS劫持 `hijack-dns`**
> 
> > 有些设备或软件总是使用硬编码的 DNS 服务器，例如 Netflix 通过 Google DNS（`8.8.8.8` 或 `8.8.4.4`）发送请求，您可以使用此选项来劫持查询
> 
> **包含配置 `include`**
> 
> > 表示当前配置包含另一个配置的内容，当前配置的优先级高于被包含配置。该选项是对配置建立包含关系，以满足同时使用多个配置的需求

### [隐式参数](#使用目录)

> [!CAUTION]
> 
> **隐式参数是指相关选项仅支持在配置文件 [纯文本编辑](#编辑纯文本) 模式中的 `[General]` 字段进行纯文本设置，不提供 UI 操作选项，属于 [通用参数](#通用参数) 的隐藏属性，建议谨慎设置。**
> 
> 隐式参数属于 [通用参数](#通用参数)，设置语法格式为 `key = value`

> **`dns-direct-system`**
> 
> > 直连的域名类规则使用系统 DNS 进行查询。设置为 `true` 表示启用，设置为 `false` 表示不启用
> 
> **`icmp-auto-reply`**
>
> > ping 数据包自动回复。设置为 `true` 表示启用，设置为 `false` 表示不启用
> 
> **`always-reject-url-rewrite`**
>
> > 不开启时，「重写的REJECT策略」默认只有在配置模式下生效。开启后，可以令该策略在其他全局路由模式下都生效。设置为 `true` 表示启用，设置为 `false` 表示不启用
> 
> **`dns-direct-fallback-proxy`**
>
> > 直连域名解析失败后使用代理。设置为 `true` 表示启用，设置为 `false` 表示不启用
> 
> **`udp-policy-not-supported-behaviour`**
>
> > 当 UDP 流量匹配到规则里不支持 UDP 转发的节点策略时重新选择回退行为，可选行为包括 `DIRECT`、`REJECT`。`DIRECT` 表示直连转发 UDP 流量，`REJECT` 表示拒绝转发 UDP 流量
>
> **`stun-response-ip`**
>
> > 此选项包含两个命令：`stun-response-ip` 和 `stun-response-ipv6`。该选项允许返回一个虚假的IP地址，如 `stun-response-ip=1.1.1.1`、`stun-response-ipv6=::1`，目的是防止真实IP地址泄漏，提高 WebRTC 的隐私和安全性。使用此命令将忽略软件设置选项内的 [禁用STUN](#禁用stun) 的启用状态
>
> **`compatibility-mode`**
>
> > 网络兼容模式
> > 
> > `compatibility-mode = 0` > 自动/禁用<br>
> > `compatibility-mode = 1` > Proxy with Loopback Address<br>
> > `compatibility-mode = 2` > Proxy Only<br>
> > `compatibility-mode = 3` > TUN Only<br>
> > `compatibility-mode = 4` > Proxy without Loopback Address<br>
> > `compatibility-mode = 5` > No Default Route
> > 
> > 本设置的优先级高于软件设置内的相关选项。当参数的值设定为 `3` 时的效果等同于启用 [Tun模式](#代理类型)；当参数的值设定为 `5` 时的效果等同于启用 [兼容模式](#兼容模式)。该参数其他数值或为兼容其他软件所用，其有效性需自行测试或咨询作者
>
> **`always-ip-address`**
>
> > 强制所有域名使用本地 DNS 解析。设置为 `true` 表示启用，设置为 `false` 表示不启用
>
> **`proxy-dns-server`**
>
> > 使用指定 DNS 解析所有节点域名。若未设置此参数，节点域名默认使用 [dns-server](#修改dns) 进行解析，对于 [DNS-over-PROXY](#dns-over-proxy) 则使用系统 DNS 解析
> 
> **`close-if-proxy-chain-missing`**
> 
> > 代理链丢失关闭连接。当设置为 `true` 时，若 [代理链](#代理通过代理链) 中的中转节点丢失则 `Reject` 代理连接；当设置为 `false` 时等同于不设置该命令，即若 [代理链](#代理通过代理链) 中的中转节点丢失则跳过中转节点直接连接落地节点使用
> 
> **`ipv6-only-if-no-ipv4-dns`**
> 
> > 当设置为 `true` 时，如果设备在网络环境中仅获取到 IPv6 的 DNS 而未获取到 IPv4 的 DNS，此时软件将认为网络环境是 `IPv6 Only` 网络。设置为 `false` 表示不启用
> 
> **`block-quic`**
> 
> > QUIC协议屏蔽策略。支持使用 `all-proxy`、`all`、`always-allow` 对 QUIC 传输层协议进行设置。其中 `all-proxy` 表示只对 **走代理的连接** 阻断 QUIC，直连连接（DIRECT）不会被干预；`all` 表示对所有连接（包括直连与代理）都屏蔽 QUIC，这会完全禁止系统中一切 UDP/443 流量；`always-allow` 表示始终允许 QUIC，不做任何屏蔽，等同于 **关闭 QUIC 屏蔽**
>
> **`use-local-host-item-for-proxy`**
> 
> > 本地 HOST 映射对代理生效。在默认情况下，对于代理类的 DNS 解析始终在远端服务器上执行。当设置为 `true` 时，若存在本地 DNS 映射，Shadowrocket 将在代理连接中使用映射后的地址，而不是原始的主机名。设置为 `false` 表示不启用
> 
> **`allow-dns-svcb`**
> 
> > 允许 DNS SVCB 查询。系统可能会执行 SVCB 记录 DNS 查询，而不是标准的 A 记录查询。这会导致无法返回虚拟 IP 地址。因此，默认情况下禁止执行 SVCB 记录查询，以强制系统执行 A 记录查询。设置为 `true` 表示启用，默认设置为 `false` 表示不启用。该命令会控制 HTTPS 和 SVCB
>
> **`allow-dns-all`**
>
> > 允许所有 DNS 查询类型正常转发。该命令设置为 `true` 时，A/AAAA 查询返回 Fake-IP，其余查询将正常转发至上游 DNS。设置为 `false` 时，除 A/AAAA 外的 HTTPS、SVCB、TXT 等 DNS 查询会被返回空值。软件默认为开启状态
> 
> _Shadowrocket 或还有其他支持的隐式参数，此处可能未能完全列出，若有相关需求请联系 [buginapp@gmail.com](mailto:buginapp@gmail.com)_

### [添加规则](#使用目录)

> 在 Shadowrocket 中，"规则"是指用来决定哪些网络请求应该走代理、哪些请求应该直接连接互联网的规则集合。规则通常是基于用户的需求来配置 [规则策略](#规则策略)，目的是实现对流量的精细控制。软件对规则集的识别不受文件后缀的影响，是以规则集的内容为识别标准
> 
> * 点击配置文件的 `ⓘ` 图标 > 规则 > 右上角 `➕`，根据需求选择 [规则类型](#规则类型) 和 [规则策略](#规则策略)，填写规则内容
> 
> * 数据 > 代理 > 启用日志记录，产生网络活动后回到该页面，从最近的日志中查看网络活动记录，点击任一记录查看详情，点击右上角 `•••` 选择类型添加规则
> 
> * 规则匹配需要着重注意 [规则的优先级](#规则优先级) 顺序
>
> **规则管理**
> > * 配置 > 配置文件 > 编辑配置 > 规则 > 规则区域右上角 `···`
> >   
> >   可选择并批量删除规则

### [规则优先级](#使用目录)

> 规则的匹配是从上到下逐条匹配的，一旦匹配到某条规则，Shadowrocket 就会停止继续匹配，因此规则的顺序非常重要，优先级高的规则应该放在前面
>
>   * 模块中的规则优先于配置文件
>   * 上面的规则优先于下面的规则
>   * 域名类的规则优先于IP类规则
>
> > 此外，规则的优先级在自动编译配置时同时遵循 **显式优先、推断其次、最终兜底** 的原则。其中可被直接、精确匹配的显式规则（如 `DOMAIN`、`DOMAIN-SUFFIX`、`URL-REGEX` 等）具有最高优先级。而基于地域或数据库判断的推断类规则（如 `GeoIP`）会在自动编译过程中被放置在显式规则之后。`FINAL` 规则作为兜底项，始终位于整个规则集的最末尾

### [规则类型](#使用目录)

> **DOMAIN-SUFFIX**：匹配请求域名的后缀
> 
> > 如 `DOMAIN-SUFFIX,example.com,DIRECT` 可以匹配到 `a.example.com`、`a.b.example.com`
> 
> **DOMAIN-KEYWORD**：匹配请求域名的关键词
> 
> > 如 `DOMAIN-KEYWORD,exa,DIRECT` 可以匹配到 `a.example.com`、`a.b.example.com`
> 
> **DOMAIN-WILDCARD**：匹配请求域名，支持使用通配符 `*`、`?`
> 
> > 如 `DOMAIN-WILDCARD,a*c.example*.com,DIRECT` 可以匹配到 `abc.example123.com`、`aqwec.example456.com`
> 
> **DOMAIN**：匹配请求的完整域名。当为`DOMAIN`、`DOMAIN-SUFFIX`、`DOMAIN-KEYWORD` 等相似类型分别设置相同的值时，只有其中一种类型会生效
> 
> > 如 `DOMAIN,www.example.com,DIRECT` 只能匹配到 `www.example.com`
> 
> **USER-AGENT**：匹配用户代理字符串，支持使用通配符 `*`
> 
> > 如 `USER-AGENT,MicroMessenger*,DIRECT` 可以匹配到 `MicroMessenger Client`
> 
> **URL-REGEX**：匹配 URL 正则式
> 
> > 如 `URL-REGEX,^https?://.+/item.+,REJECT` 可以匹配到 `https://www.example.com/item/abc/123`
> 
> **IP-CIDR**：匹配 IPv4 或 IPv6 地址
> 
> > 如 `IP-CIDR,192.168.1.0/24,DIRECT` 可以匹配到 IP 段 `192.168.1.1～192.168.1.254`。当域名请求遇到IP类规则时，Shadowrocket 会向本地 DNS 服务器发送查询请求，以判断主机 IP 是否匹配规则。若 IP 类规则加 `no-resolve`（如：`IP-CIDR,172.16.0.0/12,DIRECT,no-resolve`），则域名请求将会跳过此规则，不会触发本地DNS查询
> 
> **IP-ASN**：匹配 IP 地址隶属的 ASN 编号
> 
> > 如 `IP-ASN,56040,DIRECT` 可以匹配到属于 China Mobile Communications Corporation 网络的 IP 地址
> 
> **RULE-SET**：匹配规则集内容。规则集的组成部分需包含规则类型
> 
> **DOMAIN-SET**：匹配域名集内容。域名集的组成部分不包含规则类型
> 
> **SCRIPT**：匹配脚本名称
> 
> **DST-PORT**：匹配目标主机名的端口号
> 
> > 如 `DST-PORT,443,DIRECT` 可以匹配到 443 目标端口
>   
> **GEOIP**：匹配 IP 数据库
> 
> > 如 `GEOIP,CN,DIRECT` 可以匹配到归属地为CN的IP地址
> 
> **FINAL**：兜底策略
> 
> > 如 `FINAL,PROXY` 表示当其他所有规则都匹配不到时才使用 `FINAL` 规则的策略
> 
> **AND**：逻辑规则，与规则
> 
> > 如 `AND,((DOMAIN,www.example.com),(DST-PORT,123)),DIRECT` 可以匹配到 `www.example.com:123`
> 
> **NOT**：逻辑规则，非规则
> 
> > 如 `NOT,((DST-PORT,123)),DIRECT` 可以匹配到除了 `123` 端口的其他所有请求
> 
> **OR**：逻辑规则，或规则
> 
> > 如 `OR,((DST-PORT,123),(DST-PORT,456)),DIRECT` 可以匹配到 `123` 或 `456` 端口的所有请求
> 
> **PROTOCOL**：匹配传输协议类型
> 
> > `PROTOCOL` 类型不支持单独使用，只能作为子规则类型嵌套于逻辑规则当中。如 `AND,((PROTOCOL,UDP),(DST-PORT,443)),REJECT-NO-DROP`


### [规则策略](#使用目录)

> **PROXY**：代理。通过代理服务器转发流量
> 
> **DIRECT**：直连。连接不经过任何代理服务器
> 
> **TAILSCALE**：Tailscale 出口。通过 [Tailscale](#tailscale) 隧道转发
> 
> **REJECT**：拒绝。返回 HTTP 状态码 404，没有内容
> 
> **REJECT-DICT**：拒绝。返回 HTTP 状态码 200，内容为空的JSON对象
> 
> **REJECT-ARRAY**：拒绝。返回 HTTP 状态码 200，内容为空的JSON数组
> 
> **REJECT-200**：拒绝。返回 HTTP 状态码 200，没有内容
> 
> **REJECT-IMG**：拒绝。返回 HTTP 状态码 200，内容为 1 像素 GIF
> 
> **REJECT-TINYGIF**：拒绝。返回 HTTP 状态码200，内容为 1 像素 GIF
> 
> **REJECT-DROP**：拒绝。丢弃 IP 包
> 
> **REJECT-NO-DROP**：拒绝。返回 ICMP 端口不可达
> 
> 除此之外，规则策略还可以选择 **分组**、**代理分组**、**订阅**、**服务器节点** 等
> 
### [策略扩展参数](#使用目录)
>
> **Extended Matching**：扩展匹配。代表将尝试同时匹配 `SNI` 和 `HTTP` 主机标头。适用于 `DOMAIN`、`DOMAIN-SUFFIX`、`DOMAIN-KEYWORD` 等域名规则。Shadowrocket 默认支持 `extended-matching`，已默认开启 `SNI` 匹配
> 
> **Pre Matching**：预匹配功能，可以快速、低开销地拒绝请求。对于使用 REJECT 策略的规则，可以通过 pre-matching 标记启用此功能预匹配。启用此参数的规则将在正常规则匹配过程之前生效，具有最高优先级
>
> 纯文本示例：
> ```ruby
> [Rule]
> DOMAIN,ad.com,REJECT,extended-matching,pre-matching
> ```

### [APP分流](#使用目录)

> 根据不同 App 或特定服务指定分流规则，并使其按照设定的规则执行代理策略
> 
> 示例：YouTube App 分流走代理
> 
> * 复制 YouTube 的规则集链接
>   ```ruby
>   https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Shadowrocket/YouTube/YouTube.list
>   ```
> * 点击配置文件的 `ⓘ` 图标 > 规则 > 右上角 `➕`，[规则类型](#规则类型) 选择 `RULE-SET`，[规则策略](#规则策略) 选择 `PROXY`，输入框内粘贴 **规则集链接**，保存完成（规则策略可以根据需求使用其他选项或节点）
> 
> iOS系统没有常规分应用代理的操作，只能通过 **域名 / ip / ua** 规则实现app分流效果。可自行抓包，或者订阅 [blackmatrix7](https://github.com/blackmatrix7) 的 [规则集](https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/Shadowrocket)。如果引用的链接是域名集，添加规则时，[规则类型](#规则类型) 请选择 `DOMAIN-SET`

### [更新规则集](#使用目录)

> * 手动更新：点击 [配置文件](#配置文件) > [使用配置](#使用配置) / [编译配置](#编译配置)
> * 自动更新：[自动更新](#自动更新)

### [预览规则集](#使用目录)

> 点击配置文件 > 编辑配置 > 规则 > 在规则集上左滑 > 预览

### [修改DNS](#使用目录)

> **DNS覆写**
>   
> >   点击 配置文件 `ⓘ` 图标 > 通用 > DNS 覆写
> > 
> >   DNS 覆写仅针对直连类域名进行解析，代理类域名将经由代理服务器进行解析。DNS 覆写为并发查询，若填写多个 DNS 服务，则使用最快返回的解析结果。填 `system` 表示使用系统 DNS，支持普通 DNS 或加密 DNS（如 DoH、DoQ、DoT 等），也支持使用 [通过代理转发 DNS 查询请求](#dns-over-proxy)
> >   
> >   **普通 DNS 示例**<br>
> >   ```ruby
> >   dns-server = 223.5.5.5,119.29.29.29
> >   ```
> >   
> >   **加密 DNS 示例**<br>
> >   * DNS-over-HTTPS（DoH）
> >   ```ruby
> >   dns-server = https://dns.alidns.com/dns-query
> >   ```
> >   * DNS-over-HTTP/3（DoH3）
> >   ```ruby
> >   dns-server = h3://dns.alidns.com/dns-query
> >   ```
> >   * DNS-over-QUIC（DoQ）
> >   ```ruby
> >   dns-server = quic://223.5.5.5
> >   ```
> >   * DNS-over-TLS（DoT）
> >   ```ruby
> >   dns-server = tls://223.5.5.5
> >   ```
> >   * [DNS-over-PROXY](#dns-over-proxy)
> 
> **备用DNS**
>   
> >   当覆写的 DNS 查询失败或查询时间超过2秒后回退备用 DNS 进行查询。如需指定多个 DNS，可用逗号分隔。填写 `system` 或者留空表示可回退到系统 DNS

### [DNS-over-PROXY](#使用目录)

> 通过代理转发 DNS 查询请求
>
> **proxy**
> 
> > 使用 **默认节点** 转发 DNS 查询请求，有以下两种写法：
> > 
> > ```ruby
> > dns-server=https://dns.google/dns-query#proxy
> > ```
> > ```ruby
> > dns-server=https://dns.google/dns-query#proxy=proxy
> > ```
> 
> **proxy=name**
> 
> > 使用 **指定节点** 转发 DNS 查询请求，需要注意此处的代理名称仅支持 URL 编码，以 `香港 01` 示例：
> > ```ruby
> > dns-server=https://dns.google/dns-query#proxy=%E9%A6%99%E6%B8%AF%2001
> > ```
> > 此处指定的节点若填写不规范会自动回退至默认节点
> 
> **ecs=子网范围**
> 
> > ecs 参数用于设置 EDNS Client Subnet (ECS)，向 DNS 服务器传递客户端的子网信息。ECS 允许 DNS 服务器根据指定的子网范围（而非实际客户端 IP）来返回最优结果
> > 
> > 示例：
> > ```ruby
> > dns-server=https://dns.google/dns-query#ecs=120.76.0.0/14|2620:149:af0::10/56&ecs-override=true
> > ```
> 
> **ecs-override=true**
> 
> > ecs 参数的强制覆盖。即使客户端的实际 IP 提供了不同的地理位置，查询会强制使用 ecs 指定的子网范围
> > 
> > 示例：
> > ```ruby
> > dns-server=https://dns.google/dns-query#proxy=name&ecs=1.1.0.0/14|2620:149:af0::10/56&ecs-override=true
> > ```

### [no-resolve的作用](#使用目录)

> * 当域名请求遇到 IP 类规则时，Shadowrocket 会向本地DNS服务器发送查询请求，以判断主机 IP 是否匹配规则
> 
> * 若IP类规则加 `no-resolve`，则域名请求将会跳过此规则，不触发本地 DNS 查询。如：
>   ```ruby
>   IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
>   ```

### [代理分组](#使用目录)

> **代理分组** 也可称之为 **策略组**，是用来 **灵活管理和切换不同代理节点、自动分流网络请求** 的一种核心功能。它的作用类似于一个 **智能路由系统**，可以根据设定的规则将不同的流量导向不同的代理节点或行为。简单来说，它就是一个 **容器**，里面可以包含多个代理节点或其他代理分组。你可以根据需求通过 **规则 → 代理分组 → 代理节点** 的路径手动或自动切换。代理分组支持的类型可以查看：[代理分组类型](#代理分组类型)
> 
> * 点击配置文件的 `ⓘ` 图标 > 代理分组 > 右上角 `➕`。填写名称，根据需求选择 [代理分组类型](#代理分组类型)，通过 **正则** 匹配策略，或者从策略输入框后面的 `•••` 手动添加策略，保存
> 
> * 策略是规则的组成部分，创建的代理分组只有放到规则里才能发挥作用
>   * 进入对应规则的详情页，点击策略选项，从列表中选择所需的代理分组，保存
>   * 代理分组中可以包含其他代理分组，形成层级结构，但需要注意各级代理分组的 [类型](#代理分组类型)
>
> * 代理分组内的右上角设有 **测试** 按钮，点击 **测试** 可对当前分组内的节点进行延迟测试。测试按钮仅支持对节点进行测试，不支持测试分组内的其他策略
>   * 代理分组下方设有 **测试并选择最快服务器** 选项
>   * 该选项开启后，将在手动点击右上角的 **测试** 后自动选择并使用延迟最低的节点
>   * 该选项的开启或关闭对全部代理分组同时生效
>   * 该选项仅存在于版本号大于等于 **2.2.65 (2604)** 的软件上
>
> * 代理分组内设有 **订阅** 开关，开启开关会在下方出现 **服务器节点** 选项，需要进入选择所需要的订阅
>   * 开启 **订阅** 开关并选择所需订阅后，下方 **策略** 内会出现该订阅的所有节点
>   * 支持同时使用 [正则表达式](#订阅节点筛选) 对节点进行筛选，筛选范围受限于所选择的订阅
> 
> * 快捷进入代理分组
>   * 首页下拉，可以快捷进入代理分组界面
>   * 首页本地节点上方设有指示牌图标，点击该图标可以快捷进入代理分组界面，软件版本需大于等于 **2.2.65 (2614)**
> 
> * 代理分组其他设置参数
>   * interval：测试周期。指定间隔多长时间后需要重新发起测试
>   * timeout：超时时间。如果测试在超时前未完成，放弃测试
>   * tolerance：公差。只有当新优胜者的分数高于旧优胜者的分数加上公差时，才会进行线路更换
>   * url：测试地址。指定要测试的URL
>   * hidden：[隐藏代理分组](#隐藏代理分组)

### [代理分组类型](#使用目录)

> * **select**：允许用户手动选择一个子策略，可以指定其他代理分组或代理服务器。纯文本中设置为 `0` 表示第一个策略，`1` 表示第二个策略，`2` 表示第三个策略，以此类推
> 
> * **url-test**：根据设定的自动测试周期和结果自动切换延迟最低的节点
> 
> * **fallback**：节点不可用时自动切换其他可用节点，可用节点范围被上次自动测试结果所限
> 
> * **load-balance**：不同规则的请求使用分组里的不同节点进行 [负载均衡](#负载均衡)，相同的域名会使用同一个节点
> 
> * **random**：随机使用分组里的不同节点进行连接，相同的域名可能使用不同的节点，该类型也可以用作 [负载均衡](#负载均衡)
>
> > 除 **select** 类型外，其余代理分组类型均基于自动测试机制运行。当连接命中此类分组时，系统将优先使用最近一次测试结果选定的节点，并按照该分组的设定执行下一轮测试
> > 
> > 在两次测试间隔期间，若当前节点状态发生变化（例如节点变为不可用），可能出现仍使用失效节点的情况。对此，可酌情使用 **[启用回退](#启用回退)** 功能，以在节点异常时保障连接可用性。但需要详细阅读回退功能的详细说明
> > 
> > 自动测试类型的代理分组允许用户在界面中临时手动选择了该类分组所包含的节点，但实际连接行为仍受分组自身设置约束，且 UI 中显示的测试结果并不影响该分组在背景中的自动测试，代理分组将继续根据自动测试结果自动发生切换。基于上述特性，**除 select 类型外，不建议在此类代理分组中嵌套包含其他代理分组**，以避免服务器节点选择逻辑复杂化或出现不符合预期的切换行为

### [隐藏代理分组](#使用目录)

> 自 `Shadowrocket Version 2.2.66 (2649)` 版本开始，新增参数 `hidden=1`，可用于在图形界面隐藏不希望展示的代理分组。当 `hidden` 设置为数值 `1` 时，表示隐藏当前代理分组；当设置为 `0` 时表示不隐藏，等同于不设置此参数。该功能仅提供纯文本编辑设置方式，无图形设置界面
> 
> 示例：
> ```ruby
> 香港节点 = url-test,HK 01,HK 02,HK 03,policy-select-name=HK 01,interval=600,tolerance=100,timeout=5,url=http://www.gstatic.com/generate_204,hidden=1
> ```

### [负载均衡](#使用目录)

> [代理分组类型](#代理分组类型) 中的 `load-balance`、`random` 表示将连接请求随机使用分组里的节点进行连接，能够尽可能将流量平均分配给所有子策略或代理。其中 `load-balance` 会将相同的域名使用同一个节点进行连接，`random` 会将所有请求使用随机节点进行连接，不区分是否是同一个域名
> 
> 使用负载均衡的方法：
> 
> 点击配置文件的 `ⓘ` 图标 > 代理分组 > 右上角 `➕`，类型选择 `load-balance` 或者 `random`

### [规则集URL](#使用目录)

> 配置 > 配置文件 > 编辑配置 > 规则集 URL
> 
> 当前使用的所有远程规则资源的展示页面，其后显示的数字为当前成功下载的数量和总共包含的数量。进入后所显示的 ✅ 表示当前规则下载成功，❎ 表示当前规则下载失败。点击相应地址可重新拉取并弹出状态提示，但不会重新编译更新配置文件，点击 [使用配置](#使用配置) / [编译配置](#编译配置)，可以对当前所有 URL 进行更新并重新编译更新配置文件

### [脚本URL](#使用目录)

> 配置 > 配置文件 > 编辑配置 > 脚本 URL
> 
> 当前使用的所有远程脚本资源的展示页面，其后显示的数字为当前成功下载的数量和总共包含的数量。进入后所显示的 ✅ 表示当前脚本下载成功，❎ 表示当前脚本下载失败。点击相应地址可重新拉取并弹出状态提示，但不会重新编译更新配置文件，点击 [使用配置](#使用配置) / [编译配置](#编译配置)，可以对当前所有 URL 进行更新并重新编译更新配置文件

### [复制配置文件](#使用目录)

> 配置 > 点击配置文件 > 编辑配置 > 复制
> 
> 复制当前配置并生成新的配置文件，默认命名为 `*-copy.conf`

### [替换策略](#使用目录)

> 配置 > 点击配置文件 > 编辑配置 > 替换策略
> 
> * 点击查找右侧的 `ⓘ` 图标选择准备替换的策略，或输入准备替换的策略
> * 点击替换右侧的 `ⓘ` 图标选择欲替换成的策略，或输入欲替换成的策略
> * 点击完成后替换完成

### [测试规则](#使用目录)

> 配置 > 测试规则
> 
> 配置 > 点击配置文件 > 编辑配置 > 测试规则
> 
> * 根据当前配置测试指定请求的匹配规则及最终策略

### [Hosts](#使用目录)

> Hosts 用于自定义域名解析结果或指定 DNS 服务器。包含 **本地值** 和 **DNS服务器** 两种设定方式。在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[Host]` 字段。在默认情况下，对于代理类的 DNS 解析始终在远端服务器上执行，支持使用 `use-local-host-item-for-proxy` 等 [隐式参数](#隐式参数)
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > Hosts
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[Host]`
>
> 编辑示例：<br>
> > * 将特定域名映射到指定 IP 地址，绕过 DNS 解析，直接控制域名到 IP 的对应关系<br>
> >   `example.com = 1.2.3.4`
> > * 将特定域名指定特定的 DNS 服务器进行解析<br>
> >   `example.com = server:1.2.3.4`

### [URL重写](#使用目录)

> 修改 HTTP(S) 请求/响应，动态拦截并修改请求的 URL 或内容，在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[URL Rewrite]` 字段。重写类型包含 `HEADER`、`302`、`307` 以及其他支持的代理策略。支持使用 `always-reject-url-rewrite` 等 [隐式参数](#隐式参数)
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > URL重写
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[URL Rewrite]`

### [头部重写](#使用目录)

> **请求头/响应头** 重写功能，即标头重写，包含 `del`、`add`、`replace`、`replace-regex` 几种操作。在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[Header Rewrite]` 字段
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > 头部重写
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[Header Rewrite]`
>
> **类型：**
> > `http-request`：作用于请求头<br>
> > `http-response`：作用于响应头
>
> **行为：**
> > `header-del`：从请求头或响应头中删除指定字段<br>
> > `header-add`：向请求头或响应头中添加字段及其对应的值<br> 
> > `header-replace`：在请求头或响应头中替换指定字段的值<br>
> > `header-replace-regex`：使用正则表达式在请求头或响应头中替换字段的值
> 
> **表达式：**
> > 正则表达式用于匹配目标网站的 URL
> 
> **常用字段：**
> > `Content-Type`、`User-Agent`、`Accept-Language`、`Authorization`、`Host`、`Referer`、`Cookie`、`X-Forwarded-For`、`Location` 等

### [正文重写](#使用目录)

> **请求体/响应体** 重写功能，支持使用 `jq` 语法。在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[Body Rewrite]` 字段
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > 正文重写
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[Body Rewrite]`
>
> **类型：**
> > `http-request`：作用于请求体<br>
> > `http-response`：作用于响应体<br>
> > `http-request-jq`：使用 `jq` 语法处理请求体<br>
> > `http-response-jq`：使用 `jq` 语法处理响应体
> 
> **表达式：**
> > 正则表达式用于匹配目标网站的 URL

### [本地映射](#使用目录)

> **本地映射** 功能，在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[Map Local]` 字段
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > 本地映射
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[Map Local]`
>
> **类型：**
> > `text`：返回文本类型响应<br>
> > `file`：返回文件类型响应。文件内容不一定是本地文件，支持引用远程文件地址<br>
> > `tiny-gif`：返回一个 1x1 像素的 GIF 图片<br>
> > `base64`：返回 base64 编码数据类型响应
> 
> **表达式：**
> > 正则表达式用于匹配目标网站的 URL
> 
> **数据：**
> > 填写所需返回的数据
> 
> **额外请求头：**
> > 可选返回额外请求头

### [HTTPS解密](#使用目录)

> 对正在使用的配置开启 HTTPS 解密才能使包含 MITM 的模块完整生效，不包含 MITM 的模块除外<br>
> 
> 打开HTTPS解密方法：
> 
> * 点击配置文件的 `ⓘ` 图标 > HTTPS 解密 > 证书 > 生成新的 CA 证书 > 安装证书
> * 系统设置 > 已下载描述文件 > 安装
> * 系统设置 > 通用 > 关于本机 > 证书信任设置 > 开启对应 Shadowrocket 证书信任
>
> > 自版本 `2.2.81 (3096-3099)` 起支持通过 HTTP/2 协议进行中间人攻击来解密 HTTPS 流量
> > 
> > * 点击配置文件的 `ⓘ` 图标 > HTTPS 解密 > 通过 HTTP/2 进行中间人攻击（MitM）
> > * 或者在配置文件、模块纯文本模式中的 `[MITM]` 字段中使用 `h2 = true` 表示启用
> > 
> > 若模块中包含此命令，则会覆盖配置文件中的相关设置
>
> **注意**<br>
> HTTPS解密仅对启用此功能的配置文件生效，若切换或更换配置文件需要重新为新配置文件 [开启解密](#https解密)，为避免重复安装证书可使用 [证书模块](#证书模块)<br>
> 在安装证书时若提示 `No PKCS12 Certificates`，是因为在未完成解密证书安装并信任的操作前安装了证书模块，请删除相关模块后重试<br>
> 若多终端经 iCloud 使用同一个配置文件，需要使用证书 `ⓘ` 图标的复制粘贴功能将同一个证书在多个终端上进行安装信任

### [脚本](#使用目录)

> 可通过 JavaScript 脚本实现高级处理逻辑。在 [纯文本编辑](#编辑纯文本) 模式中位于 [配置文件](#配置文件) 的 `[Script]` 字段
>
> > * **UI 编辑**：点击配置文件的 `ⓘ` 图标 > 脚本
> > * **文本编辑**：点击配置文件 > 编辑纯文本 > `[Script]`
>
> **类型：**
> > `http-request`：使用脚本修改 HTTP 请求<br>
> > `http-response`：使用脚本修改 HTTP 响应<br>
> > `event`：在指定事件发生时运行脚本<br>
> > `rule`：使用脚本作为规则使用<br>
> > `dns`：使用脚本作为DNS 解析器<br>
> > `cron`：在指定时间运行脚本
> 
> **引擎：**
> > `auto`：自动选择脚本引擎<br>
> > `jsc`：适用于小型、简单、频繁调用的脚本，例如规则、DNS等<br>
> > `webview`：适用于复杂、高内存需求的脚本，例如解析 MB 级别的 JSON
> > 
> > 若脚本类型为 `http-request` 或 `http-response`，则在配置 `engine=auto` 参数时，系统将默认调用 `WebView` 引擎，而非 `JSC` 引擎。因此，从使用规范与一致性角度考虑，该参数建议明确指定类型，以确保行为符合预期
> 
> **其他参数：**
> > 参见软件内的具体选项及释义
>   
> 脚本文本示例如下：
> > 
> > ```ruby
> > [Script]
> > script = type=rule,script-path=rule.js
> > ```


### [模块](#使用目录)

> 模块是指为 Shadowrocket 提供额外功能的插件或者扩展项，一般是以增强或自定义软件的使用体验为出发点。模块的写法与 [配置文件](#配置文件) 相同，且模块的 [规则优先级](#规则优先级) 高于配置文件。一般情况下，模块仅包含完整配置文件格式中的特定部分，以实现特定的特殊效果且不影响配置文件的其他功能。用户可以在模块里另外设置 [通用参数](#通用参数) 以及添加 [规则](#添加规则)、[Hosts](#hosts)、[URL重写](#url重写)、[证书内容](#证书模块)、解密主机名、[脚本](#脚本) 等内容
>
> **下载远程模块**
> > * 配置 > 模块 > 右上角 `➕` > 填写链接 > 下载
> 
> **本地新建模块**
> > * 配置 > 模块 > 新建模块 > 编辑后保存
> > 
> >   模块 `[MITM]` 部分需要加 `%APPEND%`，表示把内容插入到配置中，不加时会覆盖配置中对应内容，并影响其他模块功能
> >   
> >   ```ruby
> >   [MITM]
> >   hostname = %APPEND% 主机名
> >   ```
> 
> **模块管理**
> > * 配置 > 模块 > 模块区域右上角 `···`
> >   
> >   可以对模块顺序进行重新排序，并可以选择并批量删除/启用/禁用选定的模块
> 
> **注意**
> > * 对正在使用的配置 [开启 HTTPS 解密](#https解密) 或使用 [证书模块](#证书模块)，才能使包含 MITM 的模块完整生效，不包含 MITM 的模块除外
> > * 因模块可能包含不同规则，所以大多数模块仅在 [全局路由](#全局路由区别) 设为配置时生效，不包含规则类的模块除外
> > * iOS 15 之后，NE的内存限制由 15 MB 增加到了 50 MB，低版本系统可能因内存不足导致 [模块失效](#模块失效) 或 [VPN 自动断开](#vpn自动断开)
> > * 若出现以下问题可以查看相应说明：[模块消失](#模块消失)、[模块失效](#模块失效)

### [编辑参数](#使用目录)

> 配置 > 模块 > 点击模块 > 编辑参数 > 按需填写或修改
> 
> Shadowrocket 的 **编辑参数 / 传递参数** 功能，是用于对请求或响应中的参数进行动态修改的一个高级功能，可用于配合模块中的 `URL Rewrite`、`Script`、`MITM` 等代码使用，目的是实现对网络请求的精准控制与定制化处理。编辑参数所修改或填写的内容不会因为模块更新而丢失，若开启了 iCloud，其自定义参数保存在 `iCloud - Shadowrocket - Modules` 内与模块同名的 `*.meta` 文件内
>
> 示例：
> 
> ```ruby
> #!name=证书模块
> #!desc=需要以编辑参数的方式启用并填写完整
> #!arguments=证书模块:false, 证书内容:此处粘贴有效的证书内容, 证书密码:此处粘贴有效的证书密码
> #!arguments-desc=证书模块：启用并填写证书内容方可生效\n\n证书内容：粘贴自有效证书\n\n证书密码：若默认密码是Shadowrocket则可不动
> 
> [MITM]
> enable={{{证书模块}}}
> ca-passphrase={{{证书密码}}}
> ca-p12={{{证书内容}}}
> ```

### [证书模块](#使用目录)

> 在实际使用软件时如果需要切换或更换 [配置文件](#配置文件)，且原配置已开启过 [HTTPS 解密](#https解密)，则需要对新的配置文件重新安装并信任证书，才可使解密继续生效。为免除重复安装 CA 证书，可以选择使用证书模块。证书模块是一组手动添加已生效解密证书的模块，由于模块的优先级高于配置文件，可以使解密状态不受更换配置的影响。其原理参见：[模块](#模块)
>
> > **注意**<br>
> > 请确保已完成解密证书安装并信任操作后，再使用包含证书相关命令的模块<br>
> > 在解密证书未配置完成时执行此类模块，可能会导致证书安装失败，并显示：`No PKCS12 Certificates`
> 
> 
> * 新建模块：
> 
>   软件 **配置 > 模块 > 新建模块**，复制以下内容并粘贴进去保存备用：
>   
>   ```ruby
>   #!name=证书（名字可更改）
>   [MITM]
>   enable=true
>   
>   # 在下方 “ca-passphrase=” 后面粘贴证书密码
>   ca-passphrase=
>   
>   # 在下方 “ca-p12=” 后面粘贴证书内容
>   ca-p12=
>   ```
>   
> * 点击「已安装证书的配置文件」后面的 `ⓘ` 图标 > HTTPS 解密 > 证书后面的 `ⓘ` 图标 > 复制
>
> * 将复制的证书内容粘贴至第一步创建的证书模块内的 `ca-p12=` 后面保存
> 
> > 证书模块原本可以省略 `ca-passphrase` 这行参数。但由于引用的配置文件可能已经包含了证书密码，且证书密码可能不是 `Shadowrocket`，为防止出错，因此才增加 `ca-passphrase` 参数来覆盖引用的配置文件的证书密码

### [身份证书密码](#使用目录)

> Shadowrocket 安装 CA 证书时，如果遇到「输入证书 **身份证书** 的密码」页面，可以尝试输入：Shadowrocket

### [编写本地节点](#使用目录)

> [!CAUTION]
> 
> Shadowrocket 支持在 [配置文件](#配置文件) 中编写本地节点，但该操作方式仅是为了兼容部分其他类型的配置文件，不能当作 Shadowrocket [添加节点](#添加节点) 的优先选择

> **Shadowsocks类型**
> > 
> > 节点名称=ss,地址,端口,password=密码,其他参数(如method=aes-256-cfb,obfs=websocket,plugin=none)
> 
> **Vmess类型**
> > 
> > 节点名称=vmess,地址,端口,password=密码,其他参数(如alterId=0,method=auto,obfs=websocket,tfo=1)
> 
> **VLESS类型**
> > 
> > 节点名称=vless,地址,端口,password=密码,tls=true,其他参数(如obfs=websocket,peer=example.com)
> 
> **HTTP/HTTPS/Socks5/Socks5 Over TLS等类型**
> > 
> > 节点名称=http,地址,端口,用户,密码
> > 节点名称=https,地址,端口,用户,密码
> > 节点名称=socks5,地址,端口,用户,密码
> > 节点名称=socks5-tls,地址,端口,用户,密码,skip-common-name-verify=true
> 
> **Trojan类型**
> > 
> > 节点名称=trojan,地址,端口,password=密码,其他参数(如allowInsecure=1,peer=example.com)
> 
> **Hysteria类型**
> > 
> > 节点名称=hysteria,地址,端口,auth=密码,obfsParam=混淆,protocol=协议,udp=1,其他参数(如peer=example.com,alpn=h2,upmbps=100,downmbps=100)
> 
> **Hysteria2类型**
> > 
> > 节点名称=hysteria2,地址,端口,auth=密码,obfsParam=混淆,udp=1,其他参数(如peer=example.com,alpn=h3)
> 
> **TUIC类型**
> > 
> > 节点名称=tuic,地址,端口,password=密码,udp=1,其他参数(如user=uuid值,peer=example.com,alpn=h2)
> 
> **Juicity类型**
> > 
> > 节点名称=juicity,地址,端口,password=密码,udp=1,其他参数(如user=uuid值,peer=example.com,alpn=h2)
> 
> **WireGuard类型**
> > 
> > 节点名称=wireguard,地址,端口,privateKey=私钥,publicKey=公钥,ip=子网IP,udp=1,其他参数(如dns=1.1.1.1,mtu=1350,keepalive=40,reserved=1/2/3)
> 
> **Snell v2 类型**
> > 
> > 节点名称=snell,地址,端口,password=密码,udp=1,其他参数(如obfs=http,obfs-host=example.com,obfs-uri=/abc)

------

## [数据页面](#使用目录)

### [代理日志](#使用目录)

> **代理日志** 记录了网络活动过程中 Shadowrocket 处理请求的具体信息
> * 数据 > 代理 > 启用日志记录
> 
> * 产生网络活动时，返回 **数据 > 代理** 页面查看日志文件
> 
> * 每条记录包含信息：
>     * 请求 URL
>     * 请求匹配的规则策略
>     * 请求传输协议
>     * 请求发送时间
> 
> * 记录显示 `MITM`，表示请求域名已启用解密
> 
> * 点击每条记录查看详情，详情页右上角 `•••` 可以选择类型添加规则
> 
> * **数据 > 代理** 页面，右上角 `•••` 可以手动删除所有日志文件。日志文件页面，右上角 `•••` 可以选择导出
> 
>   **数据 > 自动删除 > 打开**，程序会自动删除7天前的日志文件。Shadowrocket 已连接状态，手动删除将保留最新的日志文件，未连接时，手动删除所有

### [DNS日志](#使用目录)

> **DNS 日志** 记录了网络活动过程中 DNS 服务器处理域名查询请求的具体信息
> * 数据 > 代理 > DNS > 启用日志记录
> 
> * 产生网络活动时，返回 **数据 > DNS** 页面查看日志文件
> 
> * 每条记录包含信息：
>     * 请求域名
>     * 查询结果
>     * DNS 响应时间
>     * 处理请求的 DNS
> 
> * 旗帜是根据返回IP地址的地理位置信息自动显示
> 
> * **覆写 DNS** 不可用或未返回有效响应时，将回退至 **备用 DNS** 来查询域名
> 
>   **记录信息中如果响应时间超过2秒，意味着系统正在触发回退机制**

### [iCloud自动同步](#使用目录)

> Shadowrocket 支持将服务器节点、配置文件、模块和脚本文件等数据类型自动同步至 iCloud 云端
> * 数据 > iCloud > 自动同步 > 打开
> 
> * 设备 **设置 > 账号 > iCloud**，确保使用 iCloud 的 APP 列表中已经开启 Shadowrocket 和 **iCloud 云盘** 项目，否则会出现 **iCloud 自动同步失败** 的提示
> 
> * 同步成功时，点击 **iCloud 文件** 可以看到存储云端的配置文件
> 
> * **文件app > iCloud 云盘 > Shadowrocket**，可以看到存储云端的所有数据。其中的 **shadowrocket.v2.model** 文件包含服务器节点的配置信息
> 
> * iCloud 服务中断、网络连接问题以及其他复杂原因可能导致 iCloud 同步异常，这种情况建议选择手动删除 iCloud 备份并重新同步数据
> 
>   **如果用户删除首页某个节点后发现它又自动恢复，可以尝试以下解决方法：数据 > iCloud，服务器节点下面点击删除 iCloud 备份和同步服务器节点**
> 
> * 添加的 **场景** 和 **分组** 不属于 iCloud 自动同步的数据类型，需要手动备份下载，才能在设备间共享数据

> [!TIP]
> 
> 由于 iCloud 的同步机制存在一定限制，在使用 iCloud 进行多设备数据同步时，建议采用以下方式：
> 
> * **主设备**：开启自动同步
> * **副设备**：保持关闭自动同步，仅在需要更新数据时手动执行同步操作
> 
> 这种方式可以有效降低多设备同时同步所导致的数据冲突或覆盖问题

### [节点数据管理](#使用目录)

> **导出节点**：将首页的所有节点数据整合成一个 JSON 文件，选择存储在本地或云端，也可以通过其他共享方式传输文件
> 
> **导入节点**：将存储在本地或云端 JSON 文件中的节点数据解析并添加到首页
> 
> **删除本地节点**：一键删除首页所有节点数据

### [流量统计信息](#使用目录)

> **统计** 是 Shadowrocket 开启连接后接管设备所有网络传输的流量统计信息
> > * 数据 > 统计
> > * 统计包含信息：
> >     * 开始时间
> >     * 连接时间
> >     * Wi-Fi 和蜂窝数据的上下行流量
> >     * 流量分流的柱形图统计
> > * 默认记录所有流量统计信息。打开 **启用存档** 将会单独记录每一次连接的流量统计信息，关闭首页连接后可以从 **归档** 查看
> > * 点击右上角 `•••` 可以重置统计信息
> 
> 首页 **订阅** 支持显示流量统计信息
> > * 方法一，订阅链接添加响应头：`subscription-userinfo: upload=xxx; download=xxx; total=xxx; expire=xxx`
> > * 方法二，在订阅链接指向的纯文本 base64 编码前添加 `STATUS=xxx` 或 `REMARKS=xxx` 字段，这样订阅名称下方就能显示自定义信息。如果没有添加字段或者隐藏用户代理字符串，可能导致不返回相关统计信息，只显示时间

------

## [设置页面](#使用目录)

### [延迟测试方法](#使用目录)

> 详见词条 [连通性测试](#连通性测试)

### [小组件](#使用目录)

> 设置 > 小组件
> > 
> > * **服务器节点**：根据需求添加6个常用节点，点击 **Today 小组件** 右上角的 `>` 可以展开查看，方便手动切换节点
> > 
> > * **显示Ping值**：启用后，长按 **Today小组件** 中心位置可以测试 **服务器节点** 连通性并显示延迟数字
> > 
> > * **根据Ping排序**：启用后，长按 **Today小组件** 中心位置可以测试 **服务器节点** 连通性并依延迟大小自动排序
> 
> 添加小组件方法：
> 
> Today 小组件
> 
> > * 负一屏 > 编辑 > 自定 > 点击 Shadowrocket 旁边的 **添加** 按钮  `➕`。（系统要求低于 iOS 18）
> 
> 屏幕小组件
> 
> > * 长按屏幕 > 左上角 `➕` > Shadowrocket，选择合适类型添加。（系统要求≥ iOS 17）
> 
> 更新 Shadowrocket 后，如果找不到小组件添加按钮，请尝试重启手机。如果小组件显示 **无法加载**，请尝试以下方法：
> 
> > * 系统设置 > 通用 > 语言与地区，添加或删除一种其他语言

### [外观](#使用目录)

> 设置 > 外观
> 
> Shadowrocket 支持自定义设置软件配色方案，可以根据个人喜好调整各个板块的颜色，并可以随时恢复默认颜色。同时支持分享和安装已有配色方案，配色案例参考 [此处](https://github.com/LOWERTOP/Shadowrocket-First#shadowrocket-%E9%85%8D%E8%89%B2%E6%96%87%E4%BB%B6)
> 
> 配色安装方法：复制已知的配色链接，在配置页面点击 `➕` 号粘贴安装
> 
> > * **外观**：支持匹配系统的自动色彩方案，以及深色、浅色模式
> > * **传统样式**：使用传统应用样式
> > * **颜色**：自定义设置颜色，编码为 **十六进制颜色编码（Hex Color Code）**
> > * **重设颜色**：恢复默认配色
> > * **复制网址**：复制当前配色的 URL 地址，可用以分享或保存
>
> 以下为软件配色项目的名称及其中文译名，需要注意因系统限制，部分项目不可自定义
> 
> > ```ruby
> > NavigationBarColor / 导航栏背景色
> > NavigationBar2Color / 导航栏背景色2
> > NavigationBarTextColor / 导航栏文字颜色
> > NavigationBar2TextColor / 导航栏文字颜色2
> > TabBarColor / 标签栏背景色
> > TabBarBorderColor / 标签栏边框颜色
> > TabBarSelectedColor / 标签栏选中项颜色
> > TabBarUnselectedColor / 标签栏未选中项颜色
> > TableBackgroundColor / 表格背景颜色
> > TableCellBackgroundColor / 表格单元格背景颜色
> > TableCellSelectedBackgroundColor / 表格单元格选中项背景颜色
> > TableSeparatorColor / 表格分隔线颜色
> > TextFieldTextColor / 文本框文字颜色
> > PlaceholderColor / 占位符颜色
> > TextLabelTextColor / 文本标签文字颜色
> > DetailLabelTextColor / 详细标签文字颜色
> > TextLabelDeleteColor / 文本标签删除文字颜色
> > HeaderFooterTextColor / 页眉页脚文字颜色
> > SearchFieldBackgroundColor / 搜索框背景颜色
> > IndicatorColor / 指示器颜色
> > ButtonIconColor / 按钮图标颜色
> > ButtonNormalColor / 按钮正常状态颜色
> > ButtonNormal2Color / 按钮正常状态颜色2
> > ButtonNormal3Color / 按钮正常状态颜色3
> > ButtonHighlightedColor / 按钮高亮状态颜色
> > ButtonHighlighted2Color / 按钮高亮状态颜色2
> > ButtonHighlighted3Color / 按钮高亮状态颜色3
> > ButtonDisabledColor / 按钮禁用状态颜色
> > ButtonDisabled2Color / 按钮禁用状态颜色2
> > PingSuccessTextColor / 测试Ping成功文字颜色
> > PingTimeoutTextColor / 测试Ping超时文字颜色
> > DefaultDotColor / 默认指示点颜色
> > HUDBackgroundColor / 弹窗HUD背景颜色
> > ```

### [按需求连接](#使用目录)

> **始终开启**
> > * VPN 保持连接状态。[意外断开](#vpn自动断开) 或者重启设备，也会自动连接
> > 
> > * **脚本 / 模块 / 解密** 等需求比较多时建议开启
> 
> **按需求连接**
> > * 根据添加的 **按需求规则** 自动切换 VPN 状态。默认规则是任意网络类型下保持连接状态，相当于 **始终开启**
> > 
> > * 按需求规则：
> >     * 当访问列表中的 **域名** 时，系统会向 Shadowrocket 发送请求，如果响应成功，VPN 自动连接
> >     * 网络中指定的 `DNS`（通常认为是网络运营商/Wi-Fi路由器提供的 DNS 服务器地址）与列表任一内容相匹配时，VPN 自动连接或断开
> >     * `SSIDS` 填写需要匹配的 Wi-Fi 名称
> >     * VPN 连接行为可以通过 **网络类型 / 域名 / DNS** 条件触发
> >     * VPN 断开行为可以通过 **网络类型 / DNS** 条件触发，不能通过 **域名** 条件触发
> >     * 从上到下依次匹配添加的 **按需求规则**
> > * 添加 **按需求规则** 后，打开 **按需求连接** 开关，规则才能生效
> > 
> > * 同时打开 **始终开启** 和 **按需求连接**，只有 **始终开启** 选项能够生效
> >   
> > * 按需求连接是系统管理行为，域名通过系统 DNS 触发开启 VPN，如果域名被解析过或者有缓存则可能不会触发，Shadowrocket 只负责按需求规则的配置，是否生效取决于系统行为
>   
> **睡眠时断开**
> > * 当设备进入睡眠状态，VPN 自动断开连接
> > 
> > * Shadowrocket 响应系统发送的睡眠指令才会断开连接，有时候熄屏的系统未必处于睡眠状态
> 
> **显示断开信息**
> > * 显示 VPN 断开连接的通知信息

### [隧道](#使用目录)

> **强制路由**
> 
> > 如果开启，这个隧道的路由规则将优先于任何本地自定义的路由，默认是关闭状态
> 
> **包括所有网络**
> 
> > 启用后系统会通过隧道进行路由所有的网络流量，但为维持预期设备功能所必需的指定系统服务的流量除外
> > 
> > * **包括本地网络**：如果开启，所有发送到本地网络的流量都将包含在隧道中，如 AirPlay、AirDrop 和 CarPlay 的网络连接
> > * **包括APNs**：如果开启，苹果的 Apple Push Notification 推送通知服务（APN）的网络流量将包含在隧道中
> > * **包括蜂窝服务**：如果开启，来自蜂窝服务的互联网可路由网络流量（VoLTE、Wi-Fi通话、IMS、MMS、视觉语音信箱等）将包含在隧道中。

### [兼容模式](#使用目录)

> 设置 > 代理 > 兼容模式
> 
> HomeKit 与摄像头建立连接时，会主动将本机 IP 发送给摄像头端逆向连接。部分情况下 iOS 可能并未处理 VPN 开启时的情况，会将 VPN 的内网地址发送给摄像头，导致 RTSP 数据回包无法发回到 iOS 设备上。若当前设备与家庭中枢设备处于同一局域网下且开启代理时，如果出现无法正常使用 **家庭** 应用查看流式传输的 HomeKit 实况影像时，可以尝试开启此项以提高相应的兼容性。此处的设置是配置文件通用隐式参数中 `compatibility-mode` 的一种，开启该选项效果等同于 [配置文件](#通用参数) 内设置 `compatibility-mode=5`

### [前置代理](#使用目录)

> 设置 > 代理 > 前置代理
> 
> 「前置代理」表示所有流量先通过 HTTP/SOCKS5 代理转发，再根据配置规则向节点服务器发送请求

### [代理共享](#使用目录)

> 代理共享指的是将你当前配置的代理设置分享给其他设备使用。通过代理共享，你可以把自己配置好的代理服务器（如Shadowsocks、Vmess等）通过局域网或者热点网络的方式让其他设备也能够通过相同的代理设置访问互联网
> 
> **在局域网条件下**
> > * A设备：设置 > 代理 > 代理共享 > 启用共享
> > * B设备：系统设置 > WiFi > WiFi 名称后面的 `ⓘ` 图标 > HTTP代理 > 手动输入Shadowrocket「代理共享」的IP和端口
> 
> **使用热点条件下**
> > * A设备：开启热点
> > * B设备：连接热点
> > * 然后按照局域网条件下方法进行设置<br>
> >   **此处需要注意下操作顺序，原理是连接设备热点后先形成局域网环境，然后按照局域网条件进行设置**
> >
> **注意**
> > * 当 iOS 设备开启代理共享时，或需保持该设备屏幕常亮或连接充电器，以防意外退出
> > * 如果配置文件开启了 HTTPS 解密，请确保其他设备已安装并信任相同的证书才能正常使用。当其他设备不需要使用解密功能时，可以在 **代理共享** 页面关闭「HTTPS解密」开关
> > * 使用代理共享时需要对应的 APP 打开系统设置中的 **本地网络** 开关
> > * Telegram 可能不被系统代理接管，可单独在应用内添加 SOCKS5 代理


### [代理类型](#使用目录)

> Shadowrocket 代理类型：
> 
> * 设置 > 代理 > 代理类型
> 
> * **HTTP**：系统代理模式，对于不支持的程序会交给 TUN 接管网络连接
> 
> * **None**：TUN 模式，全部网络请求都将通过 TUN 接口进行处理。效果等同于 [配置文件](#通用参数) 内设置 `compatibility-mode=3`

### [开启UDP转发](#使用目录)

> * 设置 > UDP > 启用转发 > 打开
> 
> * 首页 > 订阅后面的 `ⓘ` 图标 > UDP转发 > 打开
> 
> * 首页 > 节点后面的 `ⓘ` 图标 > UDP转发 > 打开

### [禁用STUN](#使用目录)

> 设置 > UDP > 禁用STUN > 打开
> 
> 禁用 STUN（Session Traversal Utilities for NAT） 的意思是完全阻止 WebRTC 通过 STUN 服务器获取公网 IP，从而彻底杜绝 WebRTC IP 泄露的问题
>
> 若在配置文件 [通用参数](#通用参数) 中使用 `stun-response-ip` 的相关命令，则此处的开关状态将被忽略

### [Tailscale](#使用目录)

> Shadowrocket 自版本 **[2.2.89 (3314)](https://t.me/ShadowrocketNews/1527)** 起增加 **[Tailscale](https://tailscale.com/docs)** 全局隧道模组
> 
> * **启用**
>   
>   启用 Tailscale 作为处理 tailnet 流量的全局模组。当设置变更时数据包 tunnel 将重新加载此模组
>   
>   * 启用此功能可配合 Tailscale [规则策略](#规则策略) 添加对应的规则
>   
>     示例：`DOMAIN-WILDCARD,tail*.ts.net,TAILSCALE`、`DOMAIN-SUFFIX,ts.net,TAILSCALE`
>   
>   * 需要注意 [TUN旁路路由](#通用参数) `tun-excluded-routes` 内若包含 `100.64.0.0/10` 网段可能对 Tailscale 有一定影响，参见 [Tailscale IP 地址](https://tailscale.com/docs/concepts/tailscale-ip-addresses) 以及 [CGNAT 冲突排查](https://tailscale.com/docs/reference/troubleshooting/network-configuration/cgnat-conflicts)
>   
> * **认证密钥**
>   
>   填写并使用来自 Tailscale 管理控制台的可复用或临时 **[认证密钥](https://tailscale.com/docs/features/access-control/auth-keys)**，使设备无需登录即可加入 Tailscale 网络
> 
> * **控制服务器 URL**
>   
>   填写 **[控制服务器地址](https://tailscale.com/docs/how-to/set-up-custom-control-server)**，默认使用初始的 Tailscale 控制服务器，其 URL 为 `https://controlplane.tailscale.com`
>
> * **出口节点**
>   
>   **[出口节点](https://tailscale.com/docs/features/exit-nodes)** 允许将所有互联网流量通过 Tailscale 网络中的某一台设备转发出去再到达公共互联网。Shadowrocket 默认仅处理 tailnet 流量，不使用出口节点
>
> * **始终使用 DERP**
>   
>   强制通过 **[DERP 中继服务器](https://tailscale.com/docs/reference/derp-servers)** 转发 Tailscale 流量，并禁用直接 UDP 通道

### [权限](#使用目录)

> * **位置**
>   
>   iOS 系统要求必须开启位置权限才可以读取 Wi-Fi 网络的 SSID 名称。在 Shadowrocket 中，此权限仅在需要使用基于连接 Wi-Fi 网络触发特定配置的 **[场景](#场景)** 功能时才需要
> 
> * **通知**
>   
>   开启通知权限才可允许软件发送重要通知或警报，包括：脚本执行结果、订阅更新通知、VPN 断开通知等
> 
> * **剪贴板**
>   
>   开启剪贴板权限后，Shadowrocket 将在打开应用程序后尝试识别剪贴板中的内容是否是代理服务器的 URL，若是则会提示将其导入到应用。若未启用此权限，Shadowrocket 主页的本地节点上方将出现一个专用的粘贴按钮，以允许手动粘贴和导入剪贴板的内容

### [隐藏VPN图标](#使用目录)

> 设置 > 排除路由 0.0.0.0/31 > 打开
> 
> **注意**：该选项是利用系统漏洞实现的，打开开关可能会导致网络异常，不推荐开启此项

### [GEOIP数据库](#使用目录)

> 设置 > GeoLite2 数据库
>
> > 软件已内置常规 GeoIP 数据库，一般情况下无需设置，若有需要请参考以下设置方式
> 
> 方法一
> * 填写 [MaxMind官网](https://www.maxmind.com) 注册的账户 ID 和密钥，点击下方的 **更新** 按钮
> 
> 方法二
> * 关注 GitHub 的 IP 数据库项目，复制 mmdb 格式的下载链接，粘贴在国家/ASN 对应的 URL 位置，点击 **更新** 按钮。当点击 **重置** 时，可以恢复为系统自带的数据库
> 
>   [Loyalsoldier](https://github.com/Loyalsoldier/geoip) 的 IP 数据库：
>   ```ruby
>   https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb
>   ```
>   [Hackl0us](https://github.com/Hackl0us/GeoIP2-CN) 的 IP 数据库：
>   ```ruby
>   https://github.com/Hackl0us/GeoIP2-CN/raw/release/Country.mmdb
>   ```
>   [Masaiki](https://github.com/Masaiki/GeoIP2-CN) 的 IP 数据库：
>   ```ruby
>   https://github.com/Masaiki/GeoIP2-CN/raw/release/Country.mmdb
>   ```
>   [P3TERX](https://github.com/P3TERX/GeoLite.mmdb) 的 ASN 数据库：
>   ```ruby
>   https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb
>   ```

### [自动更新](#使用目录)

> 现阶段软件的自动更新包含配置文件自动更新、模块自动更新、服务器订阅自动更新以及 GeoLite2 数据库自动更新。需要在 **系统设置 > 通用 > 后台App刷新** 中为 Shadowrocket 启用后台刷新。在重新启动设备、杀死应用程序等结束了程序进程或后台的情况下，后台任务将不能自动启动
> 
> * **配置**：根据设置自动 [更新配置](#更新配置) 以及当前所用的 [规则集](#规则集url)、[脚本](#脚本url) 等远程资源。
> 
>     * **自动后台更新**：开启后可根据设置自动更新配置文件
>     * **更新提醒**：开启后，更新时会弹出相应提醒。需要开启设备推送通知
>     * **更新间隔**：单位为  **天**，可选 1-7 天
>     * 若当前配置文件是不含更新地址的本地配置文件，则自动更新功能仅会更新当前所用的规则集、脚本等远程资源，参见：[使用配置](#使用配置) / [编译配置](#编译配置)、[规则集URL](#规则集url)、[脚本URL](#脚本url)
>     * 规则集/脚本资源手动更新方法：点击 [配置文件](#配置文件) > [使用配置](#使用配置) / [编译配置](#编译配置)
>     * 需要注意：自动更新配置会覆盖自定义设置，参见 [更新配置](#更新配置)
> 
> * **模块**：根据设置自动更新远程模块资源
> 
>     * **自动后台更新**：开启后可根据设置自动更新模块
>     * **更新提醒**：开启后，更新时会弹出相应提醒。需要开启设备推送通知
>     * **更新间隔**：单位为  **天**，可选 1-7 天
>   
> * **订阅**：根据设置自动更新服务器订阅，另外可 [参见此处](#更新订阅节点)
> 
>     * **自动后台更新**：开启后可根据设置自动更新订阅
>     * **更新提醒**：开启后，更新时会弹出相应提醒。需要开启设备推送通知
>     * **更新间隔**：单位为  **小时**，可选 1-24 小时
>     * **DNS**：使用指定的 HTTPS DNS 来解析订阅链接的域名，点击右侧的 `ⓘ` 可以挑选内置的 DNS
>     * **根据 PING 排序**：以连通性测试的结果从小到大排列服务器节点
>     * **保持代理通过**：在更新时保持 [代理通过/代理链](#代理通过代理链) 的相关设置
>     * **发送 HWID**：开启该开关后，Shadowrocket 将在更新订阅时发送 X-HWID 标头
>     * **显示删除确认**：连通性测试结束后，显示是否删除超时节点的对话框
> 
> * **GeoLite2 数据库**：包含自动后台更新选项、更新提醒选项、更新间隔选项，其中更新间隔单位为 **天**。其他设置 [参见此处](#geoip数据库)

> [!TIP]
> 
> **若当前配置是远程配置，希望定期更新远程资源，且不希望自定义设置被覆盖或丢失时，可参考以下两种方法：**
> * **进入 [纯文本编辑](#编辑纯文本) 删除或注释掉 `update-url = *`，然后再使用自动更新功能**
> * **使用 [扩展配置/包含配置](#扩展配置) 功能后，再使用自动更新功能**

### [温和策略机制](#使用目录)

> 当使用温和策略机制时，切换策略不会打断之前与之相关的TCP连接，仅会对之后的网络请求使用新的策略进行连接<br>
> 当不使用该功能机制时，切换策略会打断与该策略相关的旧有 TCP 连接，若继续使用则使用新的策略重新连接
> 
> 例如：打断会使旧有策略相关的连接所进行的下载任务中断

------

## [其他问题](#使用目录)

### [自动切换节点](#使用目录)

> 自动切换延迟低的节点：
> 
> **方法一**
> > * 首页 > 全局路由 > 分组 > [简单模式](#简单模式) > 打开
> 
> **方法二**
> > * 点击配置文件的 `ⓘ` 图标 > 代理分组 > 右上角 `➕` > [类型](#代理分组类型) `url-test`
> 
> **注意**
> > * 如果节点不稳定，可同时 [开启回退](#启用回退)

### [订阅异常](#使用目录)

> 添加/更新订阅时异常的原因：
> * **forbidden** 表示订阅被重置或令牌 token 错误
> * **not found** 表示订阅路径或链接信息错误
> * **service unavailable** 表示域名信息错误或域名被运营商屏蔽
> * **SSL 错误** 表示无法建立与该服务器的安全连接
>   
> 添加/更新订阅链接时，如果发生异常，可以尝试的解决方法：
> 
> * 全局路由选代理，使用另外一个节点来添加/更新订阅链接
> * 切换网络后再添加/更新订阅链接
> * 检查订阅链接是否错误或失效

### [节点旗帜](#使用目录)

> 节点优先根据备注名称匹配旗帜，如果匹配不成功，由节点地址解析出 IP，通过数据库判断该IP的国家或地区，然后显示对应的旗帜
> 
> > * 节点后面的 `ⓘ` 图标 > 地址栏的图标，可以手动修改旗帜
> > * 订阅后面的 `ⓘ` 图标 > 订阅界面的 **筛选** 输入框，输入相关脚本能批量修改旗帜，参考：[订阅节点筛选](#订阅节点筛选)
> 
> 如果把旗帜的 Emoji 放在节点备注开头，保存时会自动显示对应的旗帜，且不显示开头的 Emoji

### [节点感叹号](#使用目录)

> 节点显示感叹号 `⚠` 的原因：
> 
> * 您的节点使用了 TLS，地址是 IP，却没有设 SNI
> 
> 这不是正确的服务器设置，但为了可以正常连接，Shadowrocket 会主动开启 **允许不安全**。**允许不安全** 将跳过TLS证书验证，这将导致一些安全问题。如果您使用自签名证书，请将证书导入系统并信任它，否则请及时续订服务器端证书，以防止证书过期。在 `2.2.23` 等特定版本中，该选项可能默认为关闭状态

### [微信转圈](#使用目录)

> 如果使用 Shadowrocket 时微信一直显示 **连接中/收取中**，可以尝试的解决方法：
> 
> * 微信分流走直连
> 
> * 点击配置文件的 `ⓘ` 图标 > 通用 > 启用IPv6 > 关闭
>   
> 本质上该问题是由于现阶段某些地区的运营商对 IPv6 的支持不够稳定，或是路由器设置不当，可能会引发微信加载异常的问题

### [模块消失](#使用目录)

> 模块页面已经开启 **保存到 iCloud**，如果出现模块消失的问题，请检查：
> 
> * 系统设置 > Apple ID > iCloud > 使用iCloud的APP中，确保Shadowrocket/iCloud云盘已经打开同步
> 
> * 文件app > iCloud云盘 > Shadowrocket，确定其中包含 `Modules` 和 `Script` 两个子文件夹
> 
> * 文件app > iCloud云盘 > Shadowrocket > Modules，如果iCloud的本地缓存被清理，此时模块文件是未下载状态，请等待自动下载或手动下载

### [模块失效](#使用目录)

> * 切换配置文件需要重新 [开启解密](#https解密)，为避免解密失效可使用 [证书模块](#证书模块)
> * 若 [模块](#模块) 确认有效且解密设置无误时存在模块失效的情况，则可能是加载资源时因内存、网络等原因导致部分内容出现漏编译的情况。尝试对当前配置点击 [使用配置](#使用配置) / [编译配置](#编译配置)，以使远程资源进行重新拉取，一般可恢复正常

### [VPN自动断开](#使用目录)

> 因系统版本低于 `iOS 15`、处理复杂请求、加解密数据、运行脚本等因素或多种因素相互作用之下可能导致 NE 内存占用过高，从而造成 VPN 自动断开，解决方法：
> 
> **设置 > 按需求连接 > 始终开启 > 启用**

### [检测代理](#使用目录)

> 如果在使用 Shadowrocket 的时候，遇到某些 APP 提示需关闭代理才能使用，可以在 **Shadowrocket > 设置 > 代理类型 > 选择 None**
>
> 该设置将使用 [TUN 模式](#代理类型) 接管代理，能很大程度上缓解上述情况，但对于某些直接检测系统 VPN 状态或使用其他检测手段的 APP 无效

### [编译原因](#使用目录)

> Shadowrocket 2.2.29 之前的版本是使用 Xcode 13.2.1 编译的
> 
> 2023年4月份以后，苹果官方要求开发者在提交应用到 App Store 时必须至少使用 Xcode 14 编译，所以 iOS12 以下系统无法使用
> 
> Shadowrocket 在版本 `2.2.30` 之后设置最低安装要求 iOS12，然后停止 `2.2.29` 版本，iOS 低版本用户可以安装 `2.2.28` 版本

### [URL-Schemes](#使用目录)

请使用相应内容直接替换代码中的大括号及其内容

> Shadowrocket 支持 `X-callback-urls`，允许其他应用程序在 Shadowrocket 中触发某些操作
> 
> 支持添加 `autoclose=true` 查询值，可在动作触发后退出 Shadowrocket

> **启动 VPN 隧道**
> ```ruby
> shadowrocket://connect
> ```
> ```ruby
> shadowrocket://open
> ```
>  **停止 VPN 隧道**
> ```ruby
> shadowrocket://disconnect
> ```
> ```ruby
> shadowrocket://close
> ```
>  **切换 VPN 开关状态** 
> ```ruby
> shadowrocket://toggle
> ```
>  **连通性测试** 
> ```ruby
> shadowrocket://connectivity-test
> ```
>  **使用特定节点** 
> ```ruby
> shadowrocket://select?s={节点名称}
> ```
>  **添加 订阅/节点**
> ```ruby
> shadowrocket://add/{url}
> ```
>  **更新 订阅**
> ```ruby
> shadowrocket://update-subs
> ```
>  **安装/使用 配置** 
> ```ruby
> shadowrocket://config/add/{url}
> ```
>  **安装/使用 模块** 
> ```ruby
> shadowrocket://install?module={url}
> ```
>  **切换全局路由（代理/配置/直连/场景）**
> ```ruby
> shadowrocket://route/proxy
> ```
> ```ruby
> shadowrocket://route/config
> ```
> ```ruby
> shadowrocket://route/direct
> ```
> ```ruby
> shadowrocket://route/scene
> ```
> **安装/使用 配色**
> ```ruby
> shadowrocket://color?{配色设置}
> ```

------
