一个原生、隐私优先、面向开发者的 macOS 工具箱。
KitDock 将日常开发中常用的数据处理、编码、时间转换、内容生成、密码学、端口与进程查询和 SSH 端口代理集中在一个应用中。转换、密码学计算和系统查询均在本机完成,不需要账号,也不会把编辑内容发送到网络服务;只有用户主动启动 SSH 隧道时,应用才会连接其明确配置的跳板机和目标服务。
- 使用 Swift、SwiftUI 和少量 AppKit 构建,保持原生 macOS 体验。
- 数据转换、生成和密码学工具完全离线运行,不依赖在线 API。
- 可查询 TCP/UDP 端口占用和本机进程,并在确认后发送普通或强制终止信号。
- SSH 端口代理基于 macOS 自带 OpenSSH,不引入常驻代理服务。
- 简体中文、English 和跟随系统三种语言模式。
- 支持浅色、深色和跟随系统外观。
- 核心逻辑与界面分离,
KitDockCore可独立测试和复用。 - 没有第三方运行时依赖。
| 分类 | 工具 | 能力 |
|---|---|---|
| 数据 | JSON | 格式化、压缩、校验、字符串转义与反转义 |
| 文本 | 文本处理 | 查找替换、排序、去重、清理、命名格式和换行符转换 |
| 文本 | 正则表达式 | 匹配、捕获组和替换预览 |
| 文本 | Diff | 行级对比和 Unified Diff |
| 编码 | Base64 | 标准 Base64、Base64URL 编码与解码 |
| 编码 | URL | 查询参数值编解码、URL 解析、参数编辑和重新组装 |
| 时间 | 时间与时区 | Unix 时间戳、ISO 8601、本地日期时间和 IANA 多时区转换 |
| 生成 | UUID / 密码 | UUID v4 批量生成和安全随机密码生成 |
| 安全 | 哈希 / HMAC | SHA-256、SHA-384、SHA-512 和 HMAC 计算与验证 |
| 安全 | 认证加密 | AES-GCM、ChaCha20-Poly1305 和版本化 JSON envelope |
| 安全 | JWT | Header/Payload 解析、数字日期状态和 HS256/384/512 验签 |
| 网络 | 端口与进程 | TCP/UDP 端口占用、进程筛选、资源排序和确认后终止 |
| 网络 | SSH 端口代理 | 多个命名配置、增删改、密码或私钥认证,以及本地端口启停 |
不包含账号、云同步、在线 API、插件系统、输入历史或 AI 功能。
- 使用 macOS 系统的
lsof和ps查询本机 TCP 监听、UDP 绑定和进程信息,不经 shell 拼接参数。 - 支持按端口、PID、进程名、用户、地址或命令搜索,以及按协议、用户范围和资源占用筛选排序。
- 普通终止发送
SIGTERM,强制结束发送SIGKILL,两者均需要二次确认。 - 终止前会再次核对进程启动时间,避免 PID 被复用后误终止另一个进程。
- 不请求管理员权限或安装特权 helper;能查看和终止的范围完全由当前 macOS 用户权限决定。
端口代理用于通过 SSH 跳板机访问不能直接从公网连接的 MySQL、Redis 等 TCP 服务:
- 可保存多个自定义命名的隧道配置,并独立新增、编辑、删除、启动和停止。
- 跳板机支持用户名 + 密码,或私钥 + 可选口令两种认证方式。
- 本地监听固定绑定到
127.0.0.1,不会把数据库端口暴露给局域网。 - 使用系统
/usr/bin/ssh建立本地端口转发,不经过 shell 拼接命令。 - 密码与私钥口令通过匿名本地 socket 和系统
SSH_ASKPASS交给 OpenSSH,不进入命令参数、环境变量或连接日志。 - 内嵌的最小 watchdog helper 监督 SSH 生命周期;即使 KitDock 崩溃或被强制结束,也会终止并回收对应 SSH 进程组。
- SSH 密码、私钥和私钥口令保存在 macOS Keychain;私钥仅在连接时写入权限为
0600的临时文件,并在认证完成或停止后删除。 - 主机密钥写入 KitDock 专属
known_hosts,首次连接需由用户核对并确认指纹。 - 应用不会探测或连接配置之外的主机;目标服务流量仅在隧道运行期间经用户指定的跳板机转发。
- macOS 14 或更高版本
- Xcode 26.3(当前开发与 CI 验证版本)
- Swift 6
使用 SSH:
git clone git@github.com:kar1hsu/kitDock.git
cd kitDock
open KitDock.xcodeproj也可以使用 HTTPS:
git clone https://github.com/kar1hsu/kitDock.git在 Xcode 中选择 KitDock scheme,按 Command + R 运行。
本机开发和运行使用本地 ad-hoc 签名的 Debug App 不需要 Apple Developer Program 账号。通过 Mac App Store 发布,或使用 Developer ID 签名、公证后公开分发时,才需要加入相应的 Apple 开发者计划。
| 命令 | 用途 |
|---|---|
make test |
运行 KitDockCore 单元测试 |
make build |
构建当前 Mac 架构的 Debug App |
make run |
构建并直接运行 App |
make check |
依次运行测试和 Debug 构建 |
make package |
生成 Apple Silicon 与 Intel 通用 DMG |
make clean |
清理本机构建产物 |
项目包含覆盖核心转换、密码学、系统查询解析和 SSH 隧道配置的单元测试。CI 会在推送到 main 和 Pull Request 时运行测试并构建 macOS App。
make package完成后可在 dist/ 中找到:
KitDock-<version>-macOS-universal.dmg
KitDock-<version>-macOS-universal.dmg.sha256
打开 DMG,将 KitDock 拖入“应用程序”即可。本地安装包使用 ad-hoc 签名,适合开发和自用;它没有经过 Developer ID 签名或 Apple 公证,从网络传输到其他 Mac 后可能被 Gatekeeper 阻止。
KitDock/
├── KitDock/ # SwiftUI / AppKit 应用界面
├── KitDockTunnelWatchdog/ # SSH 异常退出清理 helper
├── Packages/KitDockCore/ # 可独立测试的核心逻辑
│ ├── Sources/KitDockCore/
│ └── Tests/KitDockCoreTests/
├── KitDock.xcodeproj/ # macOS App 工程
├── scripts/
│ ├── package-dmg.sh # 通用 DMG 打包脚本
│ └── sign-app.sh # App 与 watchdog 内到外签名脚本
└── .github/ # CI、Issue 和 PR 模板
- 通用工具的输入、输出、临时密码和临时密钥不会写入历史记录或持久化保存。
- 用户保存的 SSH 隧道连接信息会保存在本机;配置元数据存入应用设置,密码、私钥和私钥口令存入 macOS Keychain。
- 离开敏感工具页面时会清理其输入状态。
- 收藏、常用时区、界面语言、外观和部分工具偏好会保存在本机
UserDefaults中。 - 编码、哈希、消息认证和加密在界面中明确区分,密码学能力使用系统框架实现。
- 端口与进程工具只调用本机系统命令。为允许查询本机进程并发送终止信号,直接分发版本不启用 App Sandbox;应用不会提权,操作仍受当前 macOS 用户权限限制。
- 转换类工具不访问网络;SSH 隧道只连接用户明确配置的跳板机和目标地址。
- 请勿在公开 Issue、日志或截图中提交真实密码、密钥、令牌或其他敏感数据。
安全问题请遵循 安全策略,不要通过公开 Issue 披露可利用细节。
欢迎提交 Bug 报告、功能建议和 Pull Request:
提交代码前请运行:
make checkKitDock 采用 MIT License 开源。