v0.1.2 — 2026-07-04(GA · UI/UX 深度优化 · 菜单分组 / 运动类型注册表 / 跳过残留修复)
继 v0.1.1 后的体验打磨版本:状态栏菜单重排、运动类型可个性化持久、运动补录时间自动贴合休息区间,并修复一处「跳过看似复用上次记录」的 SwiftUI 状态残留 bug。沿「最小干预、循证工程」原则,无新依赖、零回归(83 单测全绿、复制 / 导出 Markdown 与 v0.1.1 逐字节一致)。
核心改进
- 状态栏菜单:文案统一 2~4 字 + 按动作分组。过长文案精简(
补录工作日志→补录工作、补录运动记录→补录运动),全菜单分 5 段(分隔线划分):立即休息 ┃ 查看(工作日志·综合报告)┃ 录入(补录工作·补录运动)┃ 偏好(设置·开机自启)┃ 退出。扫读更快、语义边界清晰。 - 运动类型注册表(可持久增删 + 自动记住)。运动类型由硬编码升级为配置注册表——在设置「运动记录」页集中增删;录入时经「其他…」临时输入的自定义类型保存即自动记住(去重、保序),下次直接挑选,无需重输。
- 运动补录时间自动定位到休息区间。「补录运动」默认时段由「上一条记录的结束时刻」改为
[现在 − 休息时长, 现在]——贴合「补刚才那段休息做的运动」的真实语义,不再停留在上次记录。 - 运动提示窗超时可配。新增
exercisePromptTimeoutSeconds(默认 180s,可设「永久等待」),与工作日志小结窗对称;原硬编码 180s 兜底保留为默认值。
Bug 修复
- 修复「跳过 / 重开窗复用上次输入」:四个提示 / 补录窗 + 报告 / 设置窗控制器在稳定
NSHostingController上反复替换rootView,致 SwiftUI@State跨弹窗残留——「输入文字 → 跳过」后下次弹窗文字仍在(视觉 = 复用,非数据复用,故持久层无可疑写入)。改为每次重建 hosting 控制器,@State归零,跳过真正「忽略」。已记入 issue #9。
工程
- 配置 schema 6→7:
exerciseTypes(默认["胯下击掌","提膝击掌","深蹲","俯卧撑"])/exercisePromptTimeoutSeconds(默认 180s),容错解码平滑迁移(缺字段补默认、显式空数组尊重)。 - 抽纯函数
exerciseBackfillDefaultRange([now − restDuration, now],负值裁剪)与appendedExerciseTypes(去重 / 保序 / 去空白,无新增返回 nil 跳过写盘);落库侧据此「写 config + 热更新引擎」。 - 单元测试 77→83(+6:v6→v7 迁移 / exerciseTypes 往返 / 补录默认时段 / 类型追加纯函数),全绿 < 1s。
说明
- macOS 与 Windows 产物均未做代码签名 / 公证(与 v0.1.0 / v0.1.1 一致),首次启动需手动放行(详见 README);代码签名 / 公证将在后续版本补齐。
macOS
下载 give-me-a-break-0.1.2-macos.zip。解压后将 GiveMeABreak.app 拖入 /Applications;首次启动需在「系统设置 → 隐私与安全性」授权辅助功能与媒体控制权限。
⚠️ 此版本为 ad-hoc 签名(未签名/未公证)。首次打开会被 Gatekeeper 拦截,请执行xattr -dr com.apple.quarantine /Applications/GiveMeABreak.app放行(macOS 15.1 Sequoia 起「右键→打开」已失效),仅供内测。
Windows
下载 give-me-a-break-0.1.2-win64.zip。解压后运行 GiveMeABreakShell.exe。内置 .NET 8 运行时,无需额外安装任何依赖。
⚠️ 此 Windows 版本未签名。首次运行会被 SmartScreen 拦截,请点击「更多信息 → 仍要运行」。GiveMeABreakShell.exe可能被杀软(Defender / 360 / 火绒)误报(WH_KEYBOARD_LL键盘钩子 +SendInput媒体键触发),需手动加入信任。代码签名将在后续版本提供。