MooTool Next macOS Native
next-macos-native 是独立的 macOS 产品线,使用 SwiftUI、AppKit 和系统框架实现。它沿用 next Electron 版的 26 个工具入口、分组导航和编辑工作区,并采用系统侧边栏、统一工具栏、原生菜单、深浅色和独立工具窗口。
当前版本为 0.8.0(首个公开预发布版):文本对比改为与 Electron 对应的双编辑器工作区,支持字符与行高亮、统一补丁、忽略空白、差异导航、同步滚动、交换、复制和历史恢复;窄窗口采用两行工具栏。详见 文本对比工作区与边界。0.7.0 的文本 / 文件格式化工作区继续保留;设置支持从 Electron 合并工作台与 SQLite/磁盘迁移;界面语言(简中 / 英语 / 日语)覆盖侧栏、工作台与多数工具主操作;可选菜单栏托盘提供取色/截图等快捷入口。验收记录见 verification-0.8.0.md;从 Electron/Java 合并数据见 数据迁移说明;其余工具见 功能对齐清单。
GitHub 预发布版 0.8.0 提供 Universal DMG(ad-hoc 签名,未经 Apple 公证)。安装包不会覆盖 MooTool.app 或 MooTool Next Electron.app。
功能和布局以 next Electron 版为基准:开发前对照对应页面与测试,保留功能入口、面板顺序及操作语义,再使用原生控件适配 macOS。这项约束已记录在 AGENTS.md。
界面

JSON 深色检查器 · 查找替换 · 转换结果
随手记快速替换 · Markdown 表格预览 · 随手记窄窗口查找
环境
- macOS 14+;系统自动翻译需要 macOS 15+ 和对应语言模型。
- 构建需要 Xcode 26 / Command Line Tools 26(macOS SDK 26、Swift 6.2+);应用运行最低版本仍为 macOS 14。首次构建需联网解析固定版本的 Yams 6.2.2。
- Python、Node.js、Java、Groovy 等仅在运行对应代码时需要,不随安装包提供。
- 不需要启动 Electron、Tauri、Java 版 MooTool,也不需要它们的源码或用户数据。
开发与运行
cd next-macos-native
swift build
./scripts/run.sh
run.sh 创建带独立标识和资源的调试 .app 并打开它。也可在 Xcode 中打开 Package.swift,运行 MooToolNextNative。swift run MooToolNextNative 可用于快速开发,但正式使用应运行打包后的应用。
常用操作:
⌘K:搜索工具;方向键选择、回车打开、Esc 关闭。⌘Return:执行多数工具的主要操作。⌘⇧F:格式化工具当前文本或文件,沿用 Electron 的格式化快捷键。⌘F、⌘Z:编辑器查找、撤销;保留系统复制、粘贴、选择操作。⌘,:设置;可调整主题、编辑器字号、自动换行和备份。- 侧边栏右键:添加常用工具、打开独立窗口。
- JSON / 随手记:左侧依次为搜索、正文检索/排序、操作按钮、文件夹树和路径;支持新建文件/文件夹、展开折叠、重命名、移动、复制、删除。拖动项目到文件夹或空白根区域即可移动,也可用右键菜单选择目标。
- “更多”菜单可批量导入文件或文件夹;JSON 支持
.json,随手记支持.md/.markdown/.txt/.text/.log,均为 UTF-8。保留导入层级,同名文件增加数字后缀;一次最多 500 份、总计 32 MB、单文件 10 MB,失败不会部分写入。隐藏文件、符号链接及不匹配类型不会从文件夹中导入。 - 编辑自动保存,
⌘S手动保存;记住文档选择、展开状态、搜索/排序、光标选择与滚动位置。切换文档隔离撤销记录,跨重启不保存撤销历史。未关联文档的内容可通过“打开草稿”找回。 - 随手记工具栏沿用编辑 / 分栏 / 预览三个模式;分栏默认左右各半,可拖动分隔条,双击恢复默认比例。JSON 正文、结果和查询路径按文档保存。窄窗口可通过左上角按钮打开文档库弹出面板。
- 随手记:文档颜色、10 种语法、系统字体/等宽字体/本机字体、8–48 号字号、1.0–2.0 倍行距和自动换行按文档保存。颜色标记文档树图标;正文保留系统配色及语法高亮。
- 随手记:查找栏支持大小写、全词、正则、前后导航和替换;右侧 24 项快速替换有选区时处理选区,否则处理全文。替换、列表插入及 JSON/XML 格式化均可撤销;切换预览继续保留编辑器。窄编辑区使用两行工具栏和快速替换弹出面板。详见 随手记工作区与边界。
- 随手记:保存按钮后是“插入图片附件”;也可粘贴剪贴板图片或拖入多图。插入会替换选区、补齐换行并切换为 Markdown,支持撤销与重做。点击预览图片可缩放;长图可滚动查看,丢失图片保留引用并显示提示。
- “更多”和文档右键菜单提供“导出文档及附件…”,创建包含 Markdown 与附件的新文件夹;普通文本导出仍可单独使用。设置中的“导出备份”将工作区及已登记的图片打包进 JSON。详见 图片附件与备份。
- JSON:左侧文档库、中间主编辑器、右侧可折叠检查器。格式化/压缩直接更新正文且可撤销;高级格式化支持 2/4 空格、排序、忽略大小写和重复键检测。
- JSON:工具栏提供字体、换行、复制、查找替换、导入导出和历史。JSONPath 查询及 JSON → XML/JavaBean 在弹窗中显示结果;XML/JavaBean → JSON 先输入来源内容。支持筛选、递归、切片、联合查询和路径选择。详见 JSON 工作区与解析边界。
- 格式化:文本模式支持 Nginx、Java、XML、HTML,以及兼容旧原生草稿的 JSON;选择 2–6 空格缩进,结果直接写回可撤销编辑器。文件模式打开最多 2 MB 的 UTF-8 文件,在可编辑原文旁显示只读结果;复制、导出、清空与历史按当前模式处理。原文件不被改写,结果导出为新文件。详见 格式化工作区与边界。
- 文本对比:左右可编辑文本自动计算差异;工具栏可比较并保存历史、清空、交换、复制统一补丁、跳转上一处/下一处,选择忽略空白、行/字符高亮和左右/统一视图。左右滚动同步,统一补丁在下方只读显示;选项与光标/滚动位置随原生工作区恢复。详见 文本对比工作区与边界。
- HTTP:在参数、请求头、Cookie、正文之间切换;正文支持原始文本、JSON 和 URL 编码表单。URL 已有参数与编辑表格中的参数会合并,重复键保持顺序。
- HTTP 的
…菜单可导入/复制 cURL、新建请求;点击“请求集合”打开本地保存的请求。保存包含所有请求参数和当前响应,同名替换需要在应用内确认。 - HTTP 响应可查看正文、响应头和 Cookie,支持 JSON 格式化显示、复制和导出。超时、重定向及正文类型随草稿、集合、历史与备份保存,切换工具后仍可取消进行中的请求。
独立构建与安装
./scripts/build-app.sh --dmg # 当前架构,Release
./scripts/build-app.sh --arch arm64 --dmg # Apple Silicon
./scripts/build-app.sh --arch x86_64 --dmg # Intel
./scripts/build-app.sh --arch universal --dmg
产物:
dist/{arch}/MooTool Next Native.app
dist/{arch}/MooTool-Next-macOS-Native-0.8.0-mac-{arch}.dmg
dist/{arch}/build-info.json
把 MooTool Next Native.app 拖入 Applications 即可。应用名与其他产品不同,安装不覆盖 MooTool.app 或 MooTool Next Electron.app。构建脚本不会修改 Applications,也不会自动安装或卸载其他版本。
默认使用本地 ad hoc 签名,适合本机构建使用。公开分发时设置 NATIVE_SIGN_IDENTITY 使用 Developer ID 签名,并在发布流程中另行完成 Apple notarization;本脚本不上传签名密钥、不自动公证或发布 Release。
产品边界
| 项目 | 原生版值 |
|---|---|
| 产品 ID | next-macos-native |
| App 名称 | MooTool Next Native.app |
| Bundle ID / 偏好设置域 | com.rememberber.mootool.next.macos-native |
| 可执行文件 | MooToolNextNative |
| 数据目录 | ~/Library/Application Support/com.rememberber.mootool.next.macos-native/ |
| 版本来源 | VERSION |
| Tag | next-macos-native-v{version} |
源码、资源副本、构建、文档、版本和数据均位于本产品边界内。JSON 解析依赖、随手记文本算法、格式化解析器及辅助程序随本产品打包,使用系统 JavaScriptCore,用户运行时无需 Node.js。没有跨产品的源码导入、符号链接、共享数据库、自动迁移、公共偏好设置域或更新通道,也不依赖旧 macos/ 原型。各版本可以独立演进和重复实现。
工作区保存输入、输出、文档、虚拟文件夹、请求内容、最近记录和收藏,写入为原子替换,目录/文件权限分别为 0700 / 0600。文档库层级保存在本产品的 workspace.json 中,导入是复制内容,后续编辑不会改写原始文件;导出时创建独立文本文件。图片单独保存在本目录的 attachments/ 中,正常保存只写入附件记录;兼容读取 0.1.0–0.5.0 工作区。
这是本地工作区文件,不是加密密码库。解析损坏文件时暂停自动保存,保留原文件;备份只接受本产品及受支持的 schema,恢复前保存当前工作区与图片副本。工作区 JSON 上限 64 MB,携带图片的便携备份上限 192 MB;附件登记总量上限 64 MB。外观偏好与工作区备份分开保存,文档库搜索/排序/展开/视图状态包含在工作区备份内。
系统 Hosts 读取、环境查看不会修改机器配置。Hosts 提供检查和导出;环境变量草稿仅传给原生版代码运行子进程。网络请求和代码执行只由操作按钮触发。截图和屏幕取色走系统 UI;涉及系统权限时由 macOS 管理。
检查
./scripts/check-core.sh # CLT 可运行:与 XCTest 相同的测试用例
swift test # 安装并配置完整 Xcode 后可用
./scripts/smoke.sh # 需要登录桌面;86 个界面/主题渲染及实际编辑、重启恢复
./scripts/smoke.sh --window-capture # 完整窗口截图,包含系统工具栏和材质层
./scripts/smoke.sh --notes-only # 仅随手记、附件交互及新进程恢复
./scripts/smoke.sh --window-capture --format-only # 仅格式化交互、5 种布局和重启恢复
./scripts/smoke.sh --window-capture --diff-only # 仅文本对比交互、5 种布局和重启恢复
./scripts/smoke.sh --window-capture --note-layouts-only # 仅随手记布局和图片分栏宽度回归
python3 scripts/verify-package.py # 构建 Universal DMG 后校验签名、资源和独立运行
check-core.sh 使用 CoreTests.swift 的同一组用例,解决 Command Line Tools 不包含 XCTest 的限制。没有接受 Xcode 许可时无需为了运行这些检查更改系统配置。
59 组核心测试覆盖输入输出和边界,包括文本对比的 Electron 样例、统一补丁、字符范围、忽略空白、长行回退及旧草稿;格式化五种类型、独立辅助程序、UTF-8 文件/大小限制、历史恢复;原有图片附件、快速替换、JSON、HTTP 和文档库测试。完整窗口模式额外捕获 JSON 结果弹窗的深浅色截图。截图和报告位于 dist/acceptance/;验收使用临时数据目录及 .acceptance 偏好域,不访问真实工作区。包含全部工具的双主题、文本对比和格式化的窄窗口布局。验收还操作实际 NSTextView 与原生按钮,检查差异高亮、导航、统一只读补丁、格式化撤销、快速切换、文档与图片附件、独立工作区和新进程恢复。
本机环境、实际验证范围与安装包 SHA-256 见 0.8.0 验收记录。历史记录:0.7.0 · 0.6.0 · 0.5.0 · 0.4.0。
这些检查不等价于所有菜单、拖放及系统对话框的端到端测试。CI 独立构建原生版并上传产物,不使用仓库全局 Latest,也不影响其他产品发布。
目录说明:Sources/MooToolNextCore 为可测试逻辑;Sources/MooToolNextApp 为原生界面与系统集成;Tests 为核心测试;scripts 为构建、运行和验收入口。