diff --git a/README.md b/README.md index e4e1f0ce..59bdea15 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,14 @@ > 🚧 重新实现进行中 —— 本仓库正在使用现代技术栈重写 ShadowsocksX-NG macOS 客户端。 -新实现位于 [`ShadowsocksX-NG2/`](ShadowsocksX-NG2/README.zh-CN.md),面向 macOS 15+ / Apple Silicon(arm64)。外部二进制使用上游发布产物,不再通过 git 子模块在仓库内构建。 +新实现位于 [`ShadowsocksX-NG2/`](ShadowsocksX-NG2/README.zh.md),面向 macOS 15+ / Apple Silicon(arm64)。外部二进制使用上游发布产物,不再通过 git 子模块在仓库内构建。 ## 开发入口 -- [首次构建与常用命令](ShadowsocksX-NG2/README.zh-CN.md#开发构建与测试) -- [开发指南](docs/development.zh-CN.md):统一验证、测试证据、代码风格工具与 Git hooks。 -- [工程与专题文档](ShadowsocksX-NG2/README.zh-CN.md#文档导航):源码布局、供应链与签名、规则快照、配置说明。 -- [术语表](GLOSSARY.md)与[架构决策记录(ADR)](docs/adr/);文档语言约定见[开发指南](docs/development.zh-CN.md#领域文档语言)。 +- [首次构建与常用命令](ShadowsocksX-NG2/README.zh.md#开发构建与测试) +- [开发指南](docs/development.zh.md):统一验证、测试证据、代码风格工具与 Git hooks。 +- [工程与专题文档](ShadowsocksX-NG2/README.zh.md#文档导航):源码布局、供应链与签名、规则快照、配置说明。 +- [术语表](GLOSSARY.md)与[架构决策记录(ADR)](docs/adr/);文档语言约定见[开发指南](docs/development.zh.md#领域文档语言)。 ## 旧版归档 diff --git a/ShadowsocksX-NG2/README.md b/ShadowsocksX-NG2/README.md index 7589f9fd..8b841a25 100644 --- a/ShadowsocksX-NG2/README.md +++ b/ShadowsocksX-NG2/README.md @@ -1,6 +1,6 @@ # ShadowsocksX-NG2 -English | [简体中文](README.zh-CN.md) +English | [简体中文](README.zh.md) ShadowsocksX-NG2 is a modern rewrite of ShadowsocksX-NG for macOS 15+ and Apple Silicon (arm64). Its source code and build configuration are in this directory. The archived legacy version is described on the [repository home page](../README.md#旧版归档). diff --git a/ShadowsocksX-NG2/README.zh-CN.md b/ShadowsocksX-NG2/README.zh.md similarity index 64% rename from ShadowsocksX-NG2/README.zh-CN.md rename to ShadowsocksX-NG2/README.zh.md index 0854c057..6822c81f 100644 --- a/ShadowsocksX-NG2/README.zh-CN.md +++ b/ShadowsocksX-NG2/README.zh.md @@ -8,7 +8,7 @@ ShadowsocksX-NG 的现代化重写版本,面向 macOS 15+ / Apple Silicon(ar ## 开发、构建与测试 -准备 Xcode/Swift 工具链、[Task](https://taskfile.dev/)、[XcodeGen](https://github.com/yonaskolb/XcodeGen) 和 SwiftLint;工具基线与安装说明见[开发指南](../docs/development.zh-CN.md#代码风格工具)。 +准备 Xcode/Swift 工具链、[Task](https://taskfile.dev/)、[XcodeGen](https://github.com/yonaskolb/XcodeGen) 和 SwiftLint;工具基线与安装说明见[开发指南](../docs/development.zh.md#代码风格工具)。 从本目录执行首次构建,先获取外部二进制,再生成工程: @@ -18,7 +18,7 @@ task gen:prj task build ``` -Debug 默认使用 ad-hoc 签名,无需证书;Developer ID 配置与发布门槛见[签名与分发](../docs/distribution.zh-CN.md)。工程配置以 `project.yml` 为准,生成的 `.xcodeproj` 不入库。 +Debug 默认使用 ad-hoc 签名,无需证书;Developer ID 配置与发布门槛见[签名与分发](../docs/distribution.zh.md)。工程配置以 `project.yml` 为准,生成的 `.xcodeproj` 不入库。 从仓库根目录运行统一验证: @@ -28,17 +28,17 @@ task --exit-code --taskfile ShadowsocksX-NG2/Taskfile.dist.yml validate task --exit-code --taskfile ShadowsocksX-NG2/Taskfile.dist.yml validate -- lint test ``` -默认顺序为 `lint → test → test:smoke → build`,失败即停止,日志与结果保存在 `ShadowsocksX-NG2/.build/validation/`。在本目录内可直接运行 `task --exit-code validate`。单项任务、证据读取与测试边界见[开发指南](../docs/development.zh-CN.md)。 +默认顺序为 `lint → test → test:smoke → build`,失败即停止,日志与结果保存在 `ShadowsocksX-NG2/.build/validation/`。在本目录内可直接运行 `task --exit-code validate`。单项任务、证据读取与测试边界见[开发指南](../docs/development.zh.md)。 ## 文档导航 | 文档 | 内容 | | --- | --- | -| [开发、构建与测试](../docs/development.zh-CN.md) | 验证入口与产物、单项任务、代码风格工具、Git hooks、文档语言 | -| [工程结构与源码搜索](../docs/project-structure.zh-CN.md) | 源码分层、测试目录、跨 target 文件约束、搜索方法 | -| [外部二进制、签名与分发](../docs/distribution.zh-CN.md) | 供应链校验、Debug/Release 签名、发布门槛、依赖升级 | -| [内置规则快照](../docs/rule-snapshots.zh-CN.md) | 来源、转换语义、维护脚本与离线检查 | -| [订阅、插件与监听配置](../docs/configuration.zh-CN.md) | 订阅资料、用户插件、Cloak、本地与局域网监听、配置恢复 | -| [服务器库加密格式](../docs/server-library-encryption-format.zh-CN.md) | 加密文件格式与外部解密约定([English](../docs/server-library-encryption-format.md)) | +| [开发、构建与测试](../docs/development.zh.md) | 验证入口与产物、单项任务、代码风格工具、Git hooks、文档语言 | +| [工程结构与源码搜索](../docs/project-structure.zh.md) | 源码分层、测试目录、跨 target 文件约束、搜索方法 | +| [外部二进制、签名与分发](../docs/distribution.zh.md) | 供应链校验、Debug/Release 签名、发布门槛、依赖升级 | +| [内置规则快照](../docs/rule-snapshots.zh.md) | 来源、转换语义、维护脚本与离线检查 | +| [订阅、插件与监听配置](../docs/configuration.zh.md) | 订阅资料、用户插件、Cloak、本地与局域网监听、配置恢复 | +| [服务器库加密格式](../docs/server-library-encryption-format.zh.md) | 加密文件格式与外部解密约定([English](../docs/server-library-encryption-format.md)) | 领域术语与已定设计见[术语表](../GLOSSARY.md)和[架构决策记录](../docs/adr/)。`docs/design/` 与 `docs/research/` 为历史设计和研究记录,判断当前实现时以代码为准。 diff --git a/docs/adr/0029-source-layout-declares-layer-and-theme.md b/docs/adr/0029-source-layout-declares-layer-and-theme.md index f90f5775..0bbd9bc6 100644 --- a/docs/adr/0029-source-layout-declares-layer-and-theme.md +++ b/docs/adr/0029-source-layout-declares-layer-and-theme.md @@ -6,7 +6,7 @@ Status: Accepted (2026-10-05) 边界由 `Tests/SkeletonTests.swift` 的守卫断言,且一律**正面圈定**而非禁令加豁免登记:视图层的守卫只扫 `App/UI/`(不得引用运行时控制器、工作流实现协作者、原始目录/凭据存储类型),`Domain/` 的守卫只断言根下无平铺 `.swift`、树下只有 `.swift`。把文件放进 `Application/`、`PlatformEffects/` 或某个主题目录,即自动落在扫描范围之外,无需登记豁免;新增主题目录也不需要改断言。 -各目录的划分与各自职责由 [工程结构文档](../project-structure.zh-CN.md)维护——本 ADR 只固定组织原则,不维护清单。 +各目录的划分与各自职责由 [工程结构文档](../project-structure.zh.md)维护——本 ADR 只固定组织原则,不维护清单。 ## Considered options @@ -24,4 +24,4 @@ XcodeGen 带来两条**在代码里不可见**的约束: 跨进程契约按**文件**引用而非按目录:wrapper 与 system proxy helper 两个 target 各自显式列出所需的 `Domain/` 文件,因为它们只该拿到跨进程契约,而不是整个领域层。代价是目录内移动文件必须同步 `project.yml`;漏改时 xcodegen 以 `missing source directory` 直接失败,不静默。 -在目录内移动文件因此是低代价操作:模块名、类型名与 import 均不变,`task format` 与 lint 基线不变,版本历史可继续追溯。这条约定分散记录在 `project.yml` 的分层注释、[工程结构文档](../project-structure.zh-CN.md)与本 ADR;新增主题目录时只需同步前两处(`DomainLayoutTests` 失败信息里列举的目录名会过期,断言本身不会失败)。 +在目录内移动文件因此是低代价操作:模块名、类型名与 import 均不变,`task format` 与 lint 基线不变,版本历史可继续追溯。这条约定分散记录在 `project.yml` 的分层注释、[工程结构文档](../project-structure.zh.md)与本 ADR;新增主题目录时只需同步前两处(`DomainLayoutTests` 失败信息里列举的目录名会过期,断言本身不会失败)。 diff --git a/docs/configuration.md b/docs/configuration.md index b5e4c02a..caf3a600 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1,6 +1,6 @@ # Subscriptions, Plugins, and Listener Configuration -[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](configuration.zh-CN.md) +[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](configuration.zh.md) ## Subscription information diff --git a/docs/configuration.zh-CN.md b/docs/configuration.zh.md similarity index 99% rename from docs/configuration.zh-CN.md rename to docs/configuration.zh.md index 3088b244..c07259a8 100644 --- a/docs/configuration.zh-CN.md +++ b/docs/configuration.zh.md @@ -1,10 +1,10 @@ # 订阅、插件与监听配置 -[English](configuration.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh-CN.md) +[English](configuration.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh.md) ## 订阅资料 -面向订阅服务提供方的字段格式、嵌套分组扩展和响应要求见 [SIP-008 订阅扩展说明](subscription-provider-extension.zh-CN.md)。 +面向订阅服务提供方的字段格式、嵌套分组扩展和响应要求见 [SIP-008 订阅扩展说明](subscription-provider-extension.zh.md)。 订阅可在 SIP-008 JSON 根级提供 `bytes_used`、`bytes_remaining`(非负整数,最大为 UInt64),以及自定义的 `expires_at`(服务到期时间)、`traffic_reset_at`(流量重置时间)。日期值使用 RFC 3339 字符串,省略或 `null` 表示未提供;无效资料仅忽略该项,不影响有效服务器或分组资料。 diff --git a/docs/development.md b/docs/development.md index 7e848b87..da0c11b0 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,6 +1,6 @@ # Development, Build, and Testing -[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](development.zh-CN.md) +[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](development.zh.md) Unless noted otherwise, run commands from `ShadowsocksX-NG2/`; paths in this document are relative to that directory. diff --git a/docs/development.zh-CN.md b/docs/development.zh.md similarity index 97% rename from docs/development.zh-CN.md rename to docs/development.zh.md index ac234f47..bf171f32 100644 --- a/docs/development.zh-CN.md +++ b/docs/development.zh.md @@ -1,6 +1,6 @@ # 开发、构建与测试 -[English](development.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh-CN.md) +[English](development.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh.md) 除特别说明外,命令从 `ShadowsocksX-NG2/` 执行,文中工程路径也相对于该目录。 @@ -24,7 +24,7 @@ task --exit-code --taskfile ShadowsocksX-NG2/Taskfile.dist.yml validate -- lint 测试关通过本机 `xcrun xcresulttool get test-results summary` 和系统 `plutil` 尽力读取计数,无需新增脚本或工具依赖。`test-summary.json` 保存原始摘要,`test-summary.stderr.log` 保存 xcresulttool 错误,`count-reader.log` 保存计数读取错误。汇总展示通过、失败、跳过、预期失败及总数(Xcode 汇总口径,参数化测试的实际执行次数可能不同)。关卡与总体退出码由原命令决定,命令失败始终保留失败。结果包缺失或摘要不可读时显著标注 `evidence incomplete`(证据不完整)、计数未知,不改变命令结果,也不把缺失计数写成零。构建关不读取测试计数;未执行的关卡不等同于测试跳过。 -统一入口成功表示所选关卡的命令通过,仍需核对证据是否完整;hostless、真实进程 smoke、原生 UI 和真实系统代理的验收边界仍分别成立,发布打包门槛见[签名与分发](distribution.zh-CN.md#发布门槛)。 +统一入口成功表示所选关卡的命令通过,仍需核对证据是否完整;hostless、真实进程 smoke、原生 UI 和真实系统代理的验收边界仍分别成立,发布打包门槛见[签名与分发](distribution.zh.md#发布门槛)。 `task test` 与 `task test:smoke` 显式启用 Xcode 单测试超时:默认 120 秒,上限 300 秒。这是 runner 兜底,不保证测试任务正常清理,也不是性能门槛。规则阶段等待失败会抛错退出测试体;受保护的测试任务先释放夹具,再取消并等待结束。规则延迟 gate 和同步阻塞夹具的默认等待上限为 10 秒,超时必须报告失败。共享 `AsyncGate` 保留由用例控制的取消语义。Swift Testing 的 detached worker 超时报告保留创建用例名称和源码位置;应同时核对命令退出码与测试计数,不能仅凭单例通过数判断成功。 @@ -53,9 +53,9 @@ Scripts/fetch-external-binaries.sh task gen:prj ``` -Swift Package Manager 从 `project.yml` 固定的正式版本解析 AgeSwift,并校验其发布 XCFramework。首次解析需要网络,消费者无需安装 Rust。`Vendor/AgeSwift/LICENSE-MIT` 来自固定版本,随应用打包到 `Resources/ThirdParty/AgeSwift/`。加密存储互操作测试还需要 `brew install age` 和可访问的登录钥匙串;测试使用 UUID 隔离的 service 并清理,不修改真实应用配置。命令行调试方法见[加密格式文档](server-library-encryption-format.zh-CN.md)。 +Swift Package Manager 从 `project.yml` 固定的正式版本解析 AgeSwift,并校验其发布 XCFramework。首次解析需要网络,消费者无需安装 Rust。`Vendor/AgeSwift/LICENSE-MIT` 来自固定版本,随应用打包到 `Resources/ThirdParty/AgeSwift/`。加密存储互操作测试还需要 `brew install age` 和可访问的登录钥匙串;测试使用 UUID 隔离的 service 并清理,不修改真实应用配置。命令行调试方法见[加密格式文档](server-library-encryption-format.zh.md)。 -无证书也能构建与跑单测:Debug 基线是 ad-hoc,不需要 `Configs/Signing.local.xcconfig`。只有要做 Developer ID 签名(发布,或让本机 Debug 产物过打包门槛)时才写该文件,内容见[签名与运行形态基线](distribution.zh-CN.md#签名与运行形态基线)。 +无证书也能构建与跑单测:Debug 基线是 ad-hoc,不需要 `Configs/Signing.local.xcconfig`。只有要做 Developer ID 签名(发布,或让本机 Debug 产物过打包门槛)时才写该文件,内容见[签名与运行形态基线](distribution.zh.md#签名与运行形态基线)。 `Tests/Smoke/` 是真实进程冒烟(经 wrapper 拉起真实 sslocal 验证启动、握手、 ACL 路由与插件监管),不在默认 `task test` 内,由独立 scheme 按需运行。 diff --git a/docs/distribution.md b/docs/distribution.md index 5a4eb8b6..2214207b 100644 --- a/docs/distribution.md +++ b/docs/distribution.md @@ -1,6 +1,6 @@ # External Binaries, Signing, and Distribution -[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](distribution.zh-CN.md) +[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](distribution.zh.md) Unless noted otherwise, run commands from `ShadowsocksX-NG2/`; paths in this document are relative to that directory. diff --git a/docs/distribution.zh-CN.md b/docs/distribution.zh.md similarity index 99% rename from docs/distribution.zh-CN.md rename to docs/distribution.zh.md index 15dd67d5..4ee5baf2 100644 --- a/docs/distribution.zh-CN.md +++ b/docs/distribution.zh.md @@ -1,6 +1,6 @@ # 外部二进制、签名与分发 -[English](distribution.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh-CN.md) +[English](distribution.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh.md) 除特别说明外,命令从 `ShadowsocksX-NG2/` 执行,文中工程路径也相对于该目录。 diff --git a/docs/project-structure.md b/docs/project-structure.md index 429c2304..950403b9 100644 --- a/docs/project-structure.md +++ b/docs/project-structure.md @@ -1,6 +1,6 @@ # Project Structure and Source Search -[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](project-structure.zh-CN.md) +[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](project-structure.zh.md) Unless noted otherwise, run commands from `ShadowsocksX-NG2/`; paths in this document are relative to that directory. diff --git a/docs/project-structure.zh-CN.md b/docs/project-structure.zh.md similarity index 96% rename from docs/project-structure.zh-CN.md rename to docs/project-structure.zh.md index 334e5a9e..93f81ec5 100644 --- a/docs/project-structure.zh-CN.md +++ b/docs/project-structure.zh.md @@ -1,6 +1,6 @@ # 工程结构与源码搜索 -[English](project-structure.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh-CN.md) +[English](project-structure.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh.md) 除特别说明外,命令从 `ShadowsocksX-NG2/` 执行,文中工程路径也相对于该目录。 @@ -43,7 +43,7 @@ - `Vendor/rules/geolocation-cn/` — 内置中国域名规则快照(issue #63):`snapshot.json`(规范化规则 + 元数据 + 损失报告)、`manifest.json`(上游版本与快照 SHA-256)、`NOTICE`(许可证与归属)。普通构建只读本地快照,绝不抓取或转换。 - `Vendor/rules/china-ipv4/` — 内置中国 IPv4 CIDR 直连候选快照(issue #64):同上三件套,来源为 [gaoyifan/china-operator-ip](https://github.com/gaoyifan/china-operator-ip) `china.txt` 固定 commit。规则模式的 `proxy_all` ACL 同时编入中国域名与 IPv4 CIDR 直连候选。 - `Vendor/rules/gfwlist/` — 内置 GFWList 代理候选快照(issue #65):同上三件套,来源为 [gfwlist/gfwlist](https://github.com/gfwlist/gfwlist) 官方 Base64 AutoProxy `gfwlist.txt` 固定 commit。域名锚点转换为后缀匹配,满足条件的空路径或根路径 URL 前缀转换为精确域名匹配;「未匹配时直连」的 `bypass_all` ACL 编入这些代理候选。 -- `Scripts/` — 供应链脚本(见[外部二进制供应链](distribution.zh-CN.md#外部二进制供应链))与打包门槛断言;另有 `update-geolocation-cn.sh` / `update-china-ipv4.sh` / `update-gfwlist.sh`(显式维护动作,抓取固定版上游并转换)与 `verify-rule-snapshots.sh`(构建前离线校验快照完整性)。 +- `Scripts/` — 供应链脚本(见[外部二进制供应链](distribution.zh.md#外部二进制供应链))与打包门槛断言;另有 `update-geolocation-cn.sh` / `update-china-ipv4.sh` / `update-gfwlist.sh`(显式维护动作,抓取固定版上游并转换)与 `verify-rule-snapshots.sh`(构建前离线校验快照完整性)。 ### 源码搜索 diff --git a/docs/rule-snapshots.md b/docs/rule-snapshots.md index f135b199..5296ec11 100644 --- a/docs/rule-snapshots.md +++ b/docs/rule-snapshots.md @@ -1,6 +1,6 @@ # Bundled Rule Snapshots -[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](rule-snapshots.zh-CN.md) +[Project home](../ShadowsocksX-NG2/README.md) | [简体中文](rule-snapshots.zh.md) Bundled snapshots used by rule mode are explicitly maintained artifacts: diff --git a/docs/rule-snapshots.zh-CN.md b/docs/rule-snapshots.zh.md similarity index 99% rename from docs/rule-snapshots.zh-CN.md rename to docs/rule-snapshots.zh.md index 369994ff..268d2586 100644 --- a/docs/rule-snapshots.zh-CN.md +++ b/docs/rule-snapshots.zh.md @@ -1,6 +1,6 @@ # 内置规则快照 -[English](rule-snapshots.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh-CN.md) +[English](rule-snapshots.md) | [返回工程首页](../ShadowsocksX-NG2/README.zh.md) 除特别说明外,命令从 `ShadowsocksX-NG2/` 执行,文中工程路径也相对于该目录。 diff --git a/docs/server-library-encryption-format.md b/docs/server-library-encryption-format.md index f6d7294c..2b634e0a 100644 --- a/docs/server-library-encryption-format.md +++ b/docs/server-library-encryption-format.md @@ -1,6 +1,6 @@ # Sensitive Configuration Encryption with age -English | [简体中文](server-library-encryption-format.zh-CN.md) +English | [简体中文](server-library-encryption-format.zh.md) The server library and proxy listening configuration use standard [age v1](https://age-encryption.org/v1) files through [AgeSwift](https://github.com/qiuyuzhou/AgeSwift). See [ADR-0050](adr/0050-age-encrypted-configuration-storage.md) for the decision and recovery boundaries. diff --git a/docs/server-library-encryption-format.zh-CN.md b/docs/server-library-encryption-format.zh.md similarity index 100% rename from docs/server-library-encryption-format.zh-CN.md rename to docs/server-library-encryption-format.zh.md diff --git a/docs/subscription-provider-extension.md b/docs/subscription-provider-extension.md index e7bb25e8..b68e0c5b 100644 --- a/docs/subscription-provider-extension.md +++ b/docs/subscription-provider-extension.md @@ -2,7 +2,7 @@ This guide describes the SIP-008 fields and private extensions currently supported by ShadowsocksX-NG. It is intended for subscription providers generating compatible responses. It reflects the current implementation. -[简体中文](subscription-provider-extension.zh-CN.md) +[简体中文](subscription-provider-extension.zh.md) `x_shadowsocksx_ng`, `expires_at`, and `traffic_reset_at` are private extensions recognized by ShadowsocksX-NG; they are not SIP-008 standard fields. Ordinary SIP-008 clients may not recognize them, and clients without extension support should still read the servers from the standard `servers` array. SIP-008 allows custom fields but does not guarantee that all clients support them. See the [SIP-008 Online Configuration Delivery specification](https://shadowsocks.org/doc/sip008.html). diff --git a/docs/subscription-provider-extension.zh-CN.md b/docs/subscription-provider-extension.zh.md similarity index 99% rename from docs/subscription-provider-extension.zh-CN.md rename to docs/subscription-provider-extension.zh.md index a4281d09..45971e4d 100644 --- a/docs/subscription-provider-extension.zh-CN.md +++ b/docs/subscription-provider-extension.zh.md @@ -128,4 +128,4 @@ SIP-008 订阅 URL 通常包含访问令牌。请使用不可猜测的令牌, - 流量字段使用 SIP-008 标准字段;到期与重置日期使用本文规定的 RFC 3339 字符串。 - 以不支持 `x_shadowsocksx_ng` 的普通 SIP-008 客户端验证时,扁平 `servers` 列表仍包含全部服务器。 -订阅字段的应用内呈现与刷新行为见[配置文档中的“订阅资料”](configuration.zh-CN.md#订阅资料)。 +订阅字段的应用内呈现与刷新行为见[配置文档中的“订阅资料”](configuration.zh.md#订阅资料)。