English · 简体中文
Clash 是基于 mihomo v1.19.33 的代理内核,提供面向 Apple 应用的 Go 绑定与构建工具,可生成支持 iOS、macOS 和 tvOS 的 Clash.xcframework。
使用官方应用请点击顶部的 App Store 下载链接。本仓库面向构建或集成内核的开发者。
Clash 是基于 MetaCubeX/mihomo 的独立衍生项目,上游基线为 v1.19.33,提交为 3f27ef39f8c96bbfbc8b0b9bb10f5c9ef60149d8。本项目与 MetaCubeX 无隶属关系。上游要求无隶属关系的下游项目不要在项目名称中使用“mihomo”。
仓库保留 mihomo 的原始提交及贡献者署名。首次源码发布将累计的 Clash 适配整理为一笔提交,衔接已有 README 历史与官方上游基线;这笔提交不重建适配工作的研发历史。后续修改按独立逻辑变更追加,上游稳定版本升级通过保留官方提交的合并接入。比较上游基线与具体 Clash 提交,可查看 Apple 绑定、SDK 构建工具及内核修改的完整差异。
上游 GPL-3.0 许可证保留在 LICENSE 中。署名与依赖许可证见 NOTICE 和 THIRD_PARTY_LICENSES.md。
| 仓库 | 内容 |
|---|---|
| Clash | 代理内核、Go 绑定与 Apple SDK 构建工具 |
| Clash-Adapter | Swift 数据包桥接与扩展生命周期组件 |
| Clash-Client | iOS、iPadOS、macOS 和 tvOS 原生应用及扩展 |
| 组件 | 当前基准 |
|---|---|
| 上游引擎 | mihomo v1.19.33,记录于 UPSTREAM_VERSION |
| 已发布的 Apple SDK | v1.19.33-clash.3 |
| 客户端集成 | 客户端的 Dependencies.lock.json 固定 Kernel 和 Adapter 提交 |
上游引擎版本、SDK 发布标签和 App Store 应用版本分别管理。复现 SDK 发行版时请使用发布标签;main 可能包含后续修改。Client 和 Adapter 源码目前按提交发布,没有各自的发行标签。
SDK 下载包包含五个 Apple 平台切片、许可证声明和源码清单。每次发布另附独立的许可证压缩包、macOS 所用 EasyTier 内嵌内核的对应源码包,以及用于核对下载文件的 SHA256SUMS。
- 基于 mihomo 的代理引擎,包括协议实现、DNS、路由规则、代理组和资源提供者。
bind/clash:通过 gomobile 暴露给 Apple 应用的接口。cmd/build_libbox:SDK 生成与平台打包工具。docs/config.yaml:随源码提供的配置参考。
应用负责提供配置、存储、Network Extension 接入和签名。不同平台的能力有所区别;配置能被解析,不代表所有协议和规则都已在每个平台完成端到端验证。
Apple SDK 的 iOS 和 tvOS 切片使用 no_easytier,不包含 EasyTier;macOS 切片未应用这一排除。平台权限、TUN 栈及出站实现仍会影响实际能力。
需要 macOS、完整的 Xcode,以及 iOS、macOS、tvOS SDK。绑定模块在 bind/clash/go.mod 中声明 Go 1.26.0,并选择 Go 1.26.10 工具链;请允许 Go 获取该工具链,或自行安装。
构建当前正式 SDK 时,完整克隆仓库及标签,切到发行版,再安装固定版本的 gomobile 工具:
git clone https://github.com/ProjectClash/Clash.git
cd Clash
git checkout --detach v1.19.33-clash.3
go install github.com/sagernet/gomobile/cmd/gomobile@v0.1.13
go install github.com/sagernet/gomobile/cmd/gobind@v0.1.13
make lib_apple请将完整 Xcode 设为当前开发工具目录,而非独立的 Command Line Tools。如果 Xcode 安装在标准路径,可在构建环境设置 DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer。
内核版本由随源码发布的 UPSTREAM_VERSION 指定,避免升级源码后误用较旧的 SDK 标签。SDK 发布版本由当前提交的发布标签决定;改为构建未打标签的提交时,版本标为 dev-<提交>。Go 依赖分别记录在仓根及绑定模块的 go.mod/go.sum 中,SDK 构建会使用这两个模块。
输出为 Clash.xcframework,包含五个平台切片:
| 平台 | 架构 |
|---|---|
| iOS 真机 | arm64 |
| iOS 模拟器 | arm64、x86_64 |
| macOS | arm64、x86_64 |
| tvOS 真机 | arm64 |
| tvOS 模拟器 | arm64、x86_64 |
SDK 是静态框架,直接链接时将嵌入选项设为 Do Not Embed,并链接 libresolv。应用和扩展可通过共享的动态框架封装它,避免重复打包内核;Client 的 iOS 和 macOS 工程已采用这种结构。具体接口以所固定提交生成的头文件为准。应用源码和构建说明已在 Clash-Client 公开;Mac 应用内置的控制器终端工具位于 Clash-Client/cli。
根目录 Go 模块可使用以下命令构建和测试:
go build ./...
go test ./...Apple 绑定在 bind/clash 下有独立模块和测试。SDK 构建成功不代表签名真机上的运行行为已经验证。
内核问题请提交到本仓库的 Issues,附上源码提交、平台、复现步骤、预期行为与实际结果。配置示例应尽量精简,并移除密钥等敏感内容。应用界面或安装问题请提交到 Clash-Client Issues。
安全问题请遵循 SECURITY.md 的报告方式。
Clash 基于 MetaCubeX/mihomo 及其贡献者的工作。Clash 是独立项目,与 MetaCubeX 没有隶属或背书关系。
项目采用 GPL-3.0 许可证。署名与依赖许可证见 NOTICE 和 THIRD_PARTY_LICENSES.md。