- 桌面应用
- 开发工具
【免费下载链接】MooTool
Handy tool set for developers
本文基于 MooTool 开源仓库中next-macos-native(macOS 原生版)的0.8.0 验收记录(verification-0.8.0.md)整理而成。0.8.0 是该产品线的首个公开预发布版,本文完整梳理其自动化验收体系(check-core.sh59 组测试、smoke.sh界面/交互全绿)、交付功能范围(文本对比工作区、菜单栏托盘、关闭主窗口行为、SQLite 数据迁移等)、三语国际化覆盖边界与手工验收建议。读者读完后可以掌握这套 macOS 原生工具产品的质量门禁做法、0.8.0 的完整功能清单,以及如何复现对应验收流程。
一、0.8.0 验收概况
next-macos-native是 MooTool 独立的 macOS 产品线,使用 SwiftUI、AppKit 和系统框架实现,沿用nextElectron 版的 26 个工具入口、分组导航和编辑工作区(详见 next-macos-native/README.md)。0.8.0 是其首个公开预发布版(GitHub tagnext-macos-native-v0.8.0,prerelease且make_latest: false,详见 parity.md)。
验收记录给出的核心结论是:
| 命令 | 结果 | 说明 |
|---|---|---|
./scripts/check-core.sh | 59 组,0 失败 | 含 SQLite 导入(HTTP / Host / 翻译 / 收藏 / 历史 / 草稿 /t_quick_note/t_json_beauty);2026-09-17 工作树终验复跑通过 |
./scripts/smoke.sh | 通过(偶发需复跑) | 附件、随手记、JSON、格式化、文档库选区/滚动、86 张截图、重启持久化;2026-09-17 两批 i18n 后均单次全绿(约 6.1 min / 8.6 min) |
最近一次 smoke 全绿为2026-09-17:调色板 / Cron describe / JSON worker / 计算器标签等批次后单次通过(约 6.1 min);同日 Markdown 预览 / 托盘·附件批次(约 8.6 min)亦全绿。
二、自动化验收体系:check-core 与 smoke 双门禁
2.1 check-core.sh:命令行工具集环境下的 59 组核心测试
check-core.sh 是核心逻辑的回归门禁,解决了一个 macOS 工程常见的痛点:Command Line Tools(CLT)环境不包含 XCTest 框架。它的做法是:
- 先执行 check-toolchain.sh 校验工具链(要求 macOS SDK 26、Swift 6.2+,应用运行最低版本仍为 macOS 14);
swift build构建MooToolNextCore,并收集MooToolNextCore.build、Yams.build、CYaml.build的全部目标文件;- 用
swiftc -parse-as-library -D STANDALONE_CHECK把测试用例 CoreTests.swift 与 StandaloneTests.swift 一起编译成独立可执行文件MooToolNativeCoreChecks; - 直接运行该可执行文件,按组输出 PASS/FAIL 并统计失败数。
StandaloneTests.swift 中定义了轻量XCTestCase/XCTAssert*桩实现,让同一份CoreTests.swift测试体在 CLT 和完整 Xcode(swift test)两条路径下都能运行。最终汇总的 59 组覆盖范围包括:文本对比 Electron 样例、格式化解析器与独立辅助程序、图片附件插入/备份/导出、随手记快速替换与 Markdown 块、JSON 原生格式化/JSONPath/转换/查找替换、文档库层级与原子导入、Vault Git 检查点调度、编码往返、RSA/SM2/AES-GCM、正则、配置转换、时间、计算器、Cron、Protobuf、PDF 页码、HTTP 校验/cURL 往返、扩展工作区与产品隔离等,另有 5 组异步用例(进程捕获超时、本地 HTTP 响应、重定向与会话隔离、JSON worker 超时取消、Reformat worker 隔离)。
2.2 smoke.sh:真实界面与交互的全绿验收
smoke.sh 是界面级验收门禁,运行在已登录桌面环境,会:
- 先
swift build,创建临时隔离数据目录(MOOTOOL_NATIVE_TEST_DATA)与验收截图目录(MOOTOOL_NATIVE_SCREENSHOTS,即dist/acceptance/); - 以
--smoke-test参数启动MooToolNextNative应用,执行附件的NativeAttachmentAcceptance、随手记NativeNoteAcceptance、JSONNativeJSONAcceptance、VaultNativeVaultAcceptance、格式化NativeReformatAcceptance、文本对比NativeDiffAcceptance等专项验收,随后以--verify-workspace校验重启持久化; - 生成浅/深色主题、窄窗口等共 86 张界面截图,并把报告与日志写入
dist/acceptance/。
smoke 支持按需裁剪的专项参数,便于定位问题域:
./scripts/smoke.sh --window-capture # 完整窗口截图,含系统工具栏与材质层 ./scripts/smoke.sh --chrome-only # 工具栏动作、搜索控件、分栏宽度与 12 种窗口布局 ./scripts/smoke.sh --feedback-only # 浮动提示关闭/超时、材质回退、双主题/窄窗口及重启恢复 ./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 # 仅随手记布局和图片分栏宽度回归验收使用临时数据目录及.acceptance偏好域,不会访问真实工作区;操作的是实际 NSTextView 与原生按钮,检查差异高亮、导航、统一只读补丁、格式化撤销、快速切换、文档与图片附件、独立工作区以及新进程恢复。
2.3 验收中的稳定性加固(flaky 治理)
从验收记录可见,0.8.0 期间针对负载下的偶发失败做了多轮针对性加固,这也是值得参考的工程实践:
- JSON worker / JSON 验收超时放宽至10s(提交
dc5f1049后 smoke 单次全绿约 3.7 min); - 文本对比统一输出、JSON 输入转换与格式化文件模式增加轮询等待(
bb07bcc1、ee738d0d、1faf101c等提交); - 随手记查找计数等待加长(
waitForFind); - 格式化 smoke 验收加长撤销/历史等待(
NativeReformatAcceptance)。
这些改动背后的诱因是 SwiftPM 并发构建抢占.build目录导致的偶发超时,记录中多次出现“首轮失败、单独复跑通过”的同一类 flake。
三、0.8.0 功能范围
验收记录将 0.8.0 的重点归纳为:
- 文本对比工作区(双编辑器、统一视图、历史恢复);
- 工作台分栏与迁移(Electron
mootool-next.json合并布局/代理/编辑器与 Git 选项); - 加密 / Host / 翻译 / 收藏;
- SQLite 历史与
t_func_content草稿导入; - 菜单栏托盘与关闭主窗口行为(
general.closeBehavior:询问 / 隐藏 / 退出)。
3.1 文本对比工作区(0.8.0 核心交付)
文本对比改为与 Electron 对应的双编辑器工作区,支持字符与行高亮、统一补丁、忽略空白、差异导航、同步滚动、交换、复制和历史恢复;940px 窄窗口采用两行工具栏(详见 text-diff-workspace.md)。
从引擎实现 TextDiff.swift 可以看到关键技术约束与设计:
- 输入变化后约160 毫秒自动比较;比较在后台执行,不会用过期结果覆盖当前工作区;
- 资源保护上限:总输入限50 万 UTF-16 单元,左右行数乘积限1000 万(对应测试
testTextDiffWhitespaceTrailingLinesAndBounds中的String(repeating: "x", count: 500_001)抛错用例); - 一对需比较的行合计超过4000 单元时改用行级高亮(
maximumCharacterPair = 4_000),统一补丁仍保留完整内容; - 统一补丁按三行上下文分组输出(
@@ -oldStart,count +newStart,count @@),忽略空白只隐藏对应高亮,不删改真实补丁(测试样例验证one two与one two忽略空白后 segments 为空、但 unified 仍含-one two/+one two); - 高亮使用 NSTextView 临时文本背景,尚未包含 Monaco 的行侧边标记及完整编辑装饰(明确列在边界内)。
3.2 菜单栏托盘与关闭主窗口行为
菜单栏托盘(MenuBarTray.swift)提供打开、设置、屏幕取色、区域截图、翻译与 Host 配置切换等快捷入口,托盘菜单项随general.language刷新;通过general.trayEnabled可关闭。取色通过系统NSColorSampler完成,截图调用/usr/sbin/screencapture -i -x。
关闭主窗口行为(MainWindowClosePolicy.swift)与 Electron 的closeBehavior一致:默认ask弹出「隐藏窗口 / 退出 / 取消」确认;hide仅orderOut隐藏;quit直接终止应用。smoke/verify 模式下直接关闭以支持无人工验收。
3.3 GitHub 更新检查
帮助菜单与设置 → 关于通过 GitHub Releases API 检查更新(UpdateChecker.swift):启动时受general.autoCheckUpdates控制,若同时开启autoDownloadUpdates则发现新版本直接打开下载页;暂无后台安装器(明确列为 0.8 边界)。
四、三语国际化(zh-CN / en-US / ja-JP)交付范围
0.8.0 的大头工作是界面与 Core 错误的三语化。验收记录按批次逐条确认,可归纳为以下几层:
界面层(侧栏/工作台/工具面板):侧栏/搜索/26 个工具名三语、首页区块与设置分类标题、工作台工具栏与 ToolPage/共享编辑器栏、应用菜单、历史弹窗、调色板工具栏、翻译三标签(翻译/词库/历史)、HTTP 请求/响应分栏与表单/集合弹窗、Host/收藏弹窗与AppStore.run状态、网络工具面板、Cron 工作区与首页其他作品、留言板/系统信息工具栏、自定义分组与侧栏工具显示 sheet、二维码/图片/PDF 工具栏、文本对比工作区、格式化工作区、JSON 主工作区(工具栏/检查器/查找条/弹窗/历史 sheet)与结构树/路径选择面板(JSONTreePane)、文档库侧栏(JSON/随手记)、随手记编辑区(工具栏/查找/24 项快速替换)与 Markdown 预览块级 UI(quickNote.preview.*)。
Core 层(用户可见 ToolError):MooToolNextCore 内硬编码中文清零。覆盖键名前缀包括:
| 键名前缀 | 覆盖范围 |
|---|---|
encode.error.*/config.error.*/regex.error.*/calculator.error.* | 编码、配置转换、正则、计算器 Core 校验错误 |
reformat.error.*/reformat.undo.* | 格式化宿主/ReformatTools边界错误与撤销动作名(含vendor/formatters/entry.js重打包) |
cron.error.*、cron.describe.*/cron.weekday.* | Cron 解析/构建/运行次数错误与可读摘要(QuartzCronParser/CronExpression、CronToolView传language) |
protobuf.error.*/messageBoard.error.* | Protobuf wire 解析与留言板选项校验 |
textCrypto.error.* | TextTool /CryptoToolViewlegacy AES-GCMTextServices.digest校验错误 |
textDiff.error.* | 文本对比输入超限错误(TextDiffEngine.compare) |
crypto.error.*/crypto.verify.*/encode.error.base32Invalid | RSA/SM2/RSAOpenSSLBridge错误与验签结果、对称 AES/DES/SM4 ECB、Base32 |
http.error.*/http.curl.*/http.field.*/http.multipart.*/process.error.*/net.error.* | HTTP/ProcessRunner/网络诊断校验错误 |
migration.error.*/migration.warning.*/backup.error.*/workspace.error.* | Electron 设置/SQLite 导入与备份校验、迁移 warnings |
vault.error.*/vault.import.error.* | 文档库校验/重命名/移动/批量导入、DocumentImportReader批量导入校验 |
git.error.*/git.result.* | VaultGitService用户可见ToolError与操作结果摘要 |
quickNote.error.*/attachment.error.*/backup.error.attachment*/quickNote.image.* | 随手记查找替换限额、图片预览/插入队列、备份恢复附件路径 |
host.error.*/host.validate.* | Host 校验/配置保存错误与校验结果摘要 |
timeConvert.error.*/timeConvert.detail.* | 时间转换校验错误与「详细解析」字段标签 |
tray.status.* | 菜单栏托盘操作状态 |
color.preview.title/color.label.*/calculator.label.* | 调色板预览标题与结果栏格式标签、计算器进制转换结果行标签 |
vault.status.deletedDraftKept | VaultStore 删除草稿提示 |
json.valid.* | JSON worker(JSONDispatch.js+JSONTools.js)校验 idle/ok/error |
worker 层:JSON worker(JSONDispatch.js)宿主与 worker 校验文案随language三语,请求携带language;legacy TextTool JSON/紧凑加密与 crypto 稳定模式键保持稳定算法键。
五、数据迁移范围
0.8.0 的设置 → 数据迁移支持从 ElectronMooToolNext.db或 Java~/.MooTool/MooTool.db的 SQLite 表合并(详见>赞
- 桌面应用
- 开发工具
【免费下载链接】MooTool
Handy tool set for developers
相关推荐
MooTool Next macOS Native 0.5.0 本机验收流程解析:43 组核心测试到 Universal DMG 的可信发布闭环
MooTool Next macOS Native 0.5.0 本机验收流程解析:43 组核心测试到 Universal DMG 的可信发布闭环 本文围绕 Mo
桌面应用开发工具MooTool Next macOS Native 0.4.0 本机验收记录全解析:JSON 解析引擎、JavaBean 生成与 Universal 打包验证
MooTool Next macOS Native 0.4.0 本机验收记录全解析:JSON 解析引擎、JavaBean 生成与 Universal 打包验证
桌面应用开发工具MooTool Next macOS Native 0.7.0 本机验收记录详解:格式化双工作区、Universal 安装包与可复现验收流水线
MooTool Next macOS Native 0.7.0 本机验收记录详解:格式化双工作区、Universal 安装包与可复现验收流水线 本篇基于 Moo
桌面应用开发工具