Releases: lifedever/TaskTick
TaskTick v1.8.4
What's Changed
Quick Launcher visual overhaul
- Native macOS standard window shadow (replaces the compact popup-style shadow previous versions used)
- Rounded corners on all four sides (top-only before)
- Translucent material background matching the Spotlight / Raycast idiom
- Footer hints now sit flush with the card bottom — no more empty space below them
- Search field still auto-focuses without TaskTick stealing foreground from the previous app
Task list selection contrast
- Status dots and the running spinner now use a white tint when their row is selected, so they stay legible against the accent-coloured highlight (the running blue dot used to disappear into the blue background)
- Colour change happens in the same frame as the selection highlight — no more visible "lag" while the dot fades from green to white
Localization
- 9 locales (de, es, fr, id, it, ja, ko, ru, zh-Hant) backfilled to full parity with English — Quick Launcher, CLI settings, backup dialogs, error messages, and other recent UI no longer fall back to English for non-English/Chinese users
- 988 new translations across all 9 locales
更新内容
快捷启动器视觉重构
- 原生 macOS 标准窗口阴影(替代之前的紧凑弹出式阴影)
- 四个角全部圆角(之前仅顶部圆角)
- 半透明 material 背景,与 Spotlight / Raycast 一致
- 底部快捷键提示贴合卡片底边,不再有大块空白
- 搜索框依然自动聚焦,不抢前台 App 焦点
任务列表选中态对比度
- 状态圆点和运行中转圈在选中行(蓝色高亮)上改用白色——之前运行中的蓝点几乎和蓝色背景融为一体
- 颜色切换与选中高亮在同一帧完成,不再有"圆点慢慢从绿渐变到白"的视觉延迟
多语言
- 德/西/法/印尼/意/日/韩/俄/繁中 9 个语言补全所有缺失翻译,快捷启动器、CLI 设置、备份对话框、错误提示等界面不再对非中英用户回退英文
- 跨 9 个语言共新增 988 条翻译
Full Changelog: v1.8.3...v1.8.4
TaskTick v1.8.3
What's Changed
🐛 Bug Fixes
- #28 UI freeze with high-output scripts — Running scripts that emit heavy log streams (npm run dev + Spring Boot dual-streaming) no longer pegs the main thread and freezes the UI. Replaced the per-chunk O(N) string concatenation in
LiveOutputManagerwith an O(1) line buffer; pipe I/O is now coalesced at 50ms before crossing to the main thread; the log viewer renders viaNSTextView(TextKit fragmented layout) instead of SwiftUIText, which choked on the 512KB ceiling. Sample shows main-thread time in the live-output pipeline went from 97% → 0%. - "0秒后" stuck in task rows — Task list, Quick Launcher, and log rows no longer freeze on "0秒后" / "in 0 seconds" after a task completes. The relative-time formatter quantizes
|diff| < 1sto "0秒后" in zh-Hans, and SwiftUI didn't auto-refresh the row. AddedTimelineViewand a "just now" / "刚刚" short-circuit; rows now tick every minute. - Log truncation now keeps the suffix instead of prefix — When stdout/stderr exceeds 512KB, the last 256KB is kept (with the stack trace and exit reason) rather than the first 256KB. For build/start scripts this is the part you actually need.
✨ New Features
tasktick createCLI command — Create tasks from a script file via the command line:Supportstasktick create "stress test" --script /path/to/script.sh --manual tasktick create "daily backup" --script ~/scripts/backup.sh --repeat daily --at 08:00
--shell,--cwd,--timeout,--manual,--repeat,--at,--no-enable,--json. The GUI owns the SwiftData write — CLI generates the UUID and posts acli.createnotification, then polls the read-only store to confirm.
🔧 Internal
- New
IOBatcher(per-task pipe coalescer) andLogTextView(NSTextView wrapper for virtualized rendering). - 12 new unit tests covering
LineBufferedge cases (CR / CRLF, amortized trim, pending overflow). All 23 tests pass.
更新内容
🐛 Bug 修复
- #28 大量日志输出会卡死 UI — 跑日志输出量大的脚本(比如 npm run dev + Spring Boot 同时输出)不再把主线程占满、界面卡死。重写了
LiveOutputManager:用 O(1) 行缓冲替代之前每个 chunk 都做 O(N) 字符串拼接和截断;I/O 在 50ms 窗口内合批后再切到主线程;日志查看器从 SwiftUIText(500KB 字符串撑不住)换成了NSTextView(TextKit 分片布局)。采样显示主线程在 live output 链路上的占用 从 97% 降到 0%。 - 任务列表卡在"0秒后" — 任务列表、Quick Launcher、日志行不再卡死在 "0秒后" 上。系统的相对时间格式化器在中文 short 风格下,会把
|diff| < 1秒量化成 "0秒后",而 SwiftUI 任务完成后不会自动重画那一行。加了TimelineView+ "刚刚" 短路逻辑,每分钟自动 tick 一次。 - 日志截断改为保留末尾而不是开头 — stdout/stderr 超过 512KB 时保留最后 256KB(错误堆栈和退出原因都在那),而不是开头那 256KB。对于编译/启动脚本来说,结尾才是你真正需要的部分。
✨ 新功能
tasktick createCLI 命令 — 从命令行直接创建任务:支持tasktick create "stress test" --script /path/to/script.sh --manual tasktick create "daily backup" --script ~/scripts/backup.sh --repeat daily --at 08:00
--shell、--cwd、--timeout、--manual、--repeat、--at、--no-enable、--json。CLI 只生成 UUID 并发送cli.create通知,由 GUI 负责实际写入 SwiftData,避免多进程写库竞争。
🔧 内部改进
- 新增
IOBatcher(每任务一个的管道合批器)和LogTextView(NSTextView wrapper,虚拟化渲染)。 - 12 个新单测覆盖
LineBuffer边界情况(CR / CRLF、amortized trim、pending 溢出等),全部 23 个测试通过。
Full Changelog: v1.8.2...v1.8.3
TaskTick v1.8.2
v1.8.2 fixes a launch-blocking bug shipped in v1.8.0 (CLI/GUI binaries colliding inside
Contents/MacOS/on default case-insensitive APFS) and adds an auto-repair flow for users whosetaskticksymlink got pointed at the now-relocated CLI binary. Recommended for everyone on v1.8.0 / v1.8.1.
What's Changed
Auto-Repair Stale CLI Symlinks
v1.8.x relocated the CLI binary from Contents/MacOS/tasktick to Contents/cli/tasktick (necessary to avoid a case-insensitive APFS collision with the GUI binary TaskTick). DMG users who had previously installed the CLI symlink — /usr/local/bin/tasktick or /opt/homebrew/bin/tasktick — were left with a stale link.
On launch, TaskTick now automatically detects the broken symlink and offers a single-click in-place repair via Touch ID / admin password — no Terminal, no Settings navigation. Click "Update Now" once and you're done.
Settings → Enable CLI Path Fix
The "Enable CLI…" button in Settings → Command Line now generates the correct sudo ln -sf command targeting the new Contents/cli/tasktick path. (Previously generated a sudo command targeting the old Contents/MacOS/ path which would silently resolve to the GUI binary on case-insensitive disks.)
From v1.8.x (recap, in case you skipped earlier)
tasktickCLI bundled with the app + the new Raycast extensiontasktick eventssubcommand — NDJSON lifecycle stream for real-time integrations- Action toasts — instant system banner when you Run / Stop / Restart from any entry point
- Redesigned app icon — white squircle, centered clock, properly inset green check
- CLI hides Dock icon via
setActivationPolicy(.prohibited)— no more clock icon flashing on every CLI invocation
更新内容
v1.8.2 修复 v1.8.0 引入的启动崩溃 bug(CLI 与 GUI 二进制在 case-insensitive APFS 上的
Contents/MacOS/内同名冲突),并新增自动修复 — 用户从旧版升级时不再需要手动改 symlink。v1.8.0 / v1.8.1 用户强烈建议升级。
自动修复过期的 CLI Symlink
v1.8.x 把 CLI 二进制从 Contents/MacOS/tasktick 改到了 Contents/cli/tasktick(避免与 GUI 二进制 TaskTick 在 case-insensitive APFS 上同名冲突)。已经手动启用过 CLI(/usr/local/bin/tasktick 或 /opt/homebrew/bin/tasktick)的 DMG 用户的 symlink 会指向旧路径。
启动时 TaskTick 会自动检测过期 symlink,弹一次"立即更新"对话框,走 Touch ID / 管理员密码一键修复 —— 不用打开终端、不用进设置。点一下"立即更新"即可。
Settings → 启用 CLI 路径修正
"Enable CLI…" 按钮现在生成的 sudo 命令指向新的 Contents/cli/tasktick 路径(之前指向旧的 Contents/MacOS/,在 case-insensitive 磁盘上会被悄悄解析到 GUI 二进制)。
1.8.x 主功能(如果你之前跳过了)
tasktickCLI 内置进 app,配合新的 Raycast 扩展tasktick events子命令 —— NDJSON 流式生命周期事件,外部工具可订阅- 操作类系统通知 —— Run / Stop / Restart 任意入口都立即弹横幅
- 全新 App 图标 —— 白色圆角方形、表盘居中、绿对勾内移
- CLI 不弹 Dock 图标 ——
setActivationPolicy(.prohibited),每次 CLI 调用不再蹦时钟
Full Changelog: v1.7.1...v1.8.2
TaskTick v1.8.1
Note: v1.8.0 had a launch-blocking bug (case-insensitive APFS collision between the GUI and CLI binaries inside
Contents/MacOS/). v1.8.1 ships the same features with the CLI relocated toContents/cli/tasktick. Please skip v1.8.0.
What's Changed
Raycast Extension Support
TaskTick now ships with a tasktick CLI binary inside the app bundle, enabling control from terminals, scripts, and the new TaskTick Raycast extension. The CLI lives at /Applications/TaskTick.app/Contents/cli/tasktick and is auto-symlinked to /opt/homebrew/bin/tasktick (Apple Silicon) or /usr/local/bin/tasktick (Intel) when installed via Homebrew Cask.
New tasktick events Subcommand
Streams task lifecycle events as NDJSON for real-time integrations. Lets external tools subscribe to taskStarted / taskCompleted events without polling.
Action Toasts
Run / Stop / Restart from any entry point (CLI, Raycast, GUI buttons, menu bar, Quick Launcher) now emits an instant system banner so you know the action was received — independent of the existing per-task completion notifications. Honors the global "Enable Notifications" preference.
Redesigned App Icon
White rounded-square background, centered & enlarged clock face, properly inset green check badge. Cleaner at small sizes (Dock, Spotlight, list views).
Other Improvements
- CLI hides its Dock icon (
NSApplication.setActivationPolicy(.prohibited)) —tasktick list/eventsno longer flash a clock icon in the Dock on every invocation - All 11 supported locales now include the new toast strings
更新内容
注意: v1.8.0 因为 macOS 默认 case-insensitive APFS 下 GUI 与 CLI 二进制在
Contents/MacOS/里同名冲突,导致启动失败。v1.8.1 修复了这个 bug(CLI 改放Contents/cli/tasktick),功能与 v1.8.0 一致。请直接跳过 v1.8.0。
支持 Raycast 扩展
TaskTick 现在内置 tasktick CLI(在 .app bundle 内的 Contents/cli/),可从终端、脚本以及全新的 TaskTick Raycast 扩展 控制任务。Homebrew 安装会自动 symlink 到 /opt/homebrew/bin/tasktick(Apple Silicon)或 /usr/local/bin/tasktick(Intel)。
新增 tasktick events 子命令
以 NDJSON 流式输出任务生命周期事件(taskStarted / taskCompleted),外部工具可订阅而无需轮询。
操作类系统通知
通过任何入口(CLI、Raycast、GUI 按钮、菜单栏、快速启动)触发 Run / Stop / Restart 时,立即弹出系统横幅,告诉你操作已被接收 —— 与原本的任务完成通知互不替代。受全局"启用通知"开关控制。
全新 App 图标
白色圆角方形背景,表盘居中且更显眼,绿色对勾徽章位置内移。在 Dock、Spotlight、列表视图等小尺寸下更清爽。
其他改进
- CLI 隐藏 Dock 图标(
NSApplication.setActivationPolicy(.prohibited))——tasktick list/events不再每次调用都在 Dock 闪一下时钟 - 全部 11 种支持的语言新增本次的 toast 字符串
Full Changelog: v1.7.1...v1.8.1
TaskTick v1.7.1
What's Changed
Quick Launcher
- Cold-start flash fixed. The "white card" that briefly appeared under the search field on first open is gone — pre-warmed the system text-input service at app launch + tightened the reveal timing.
- ⌘O opens the selected task in the main window.
- ⌘, opens Settings.
- Three-way "Show tasks" filter: All / Scheduled only / Manual only.
- Quick Launcher gets its own Settings tab.
Menu Bar
- Status item icon now indicates running state — outline checkmark badge → filled checkmark when scripts are running. Same SF Symbol family means zero icon drift on state change.
- Icon size bumped slightly for better visual weight.
- Scheduled tasks: max 3 shown. Manual scripts: max 5 shown.
- Footer: dividers replaced with hover backgrounds matching the task rows. Whole row clickable to start/stop with pointer cursor.
- Manually-executed tasks bump to the top of the lists in sidebar / Quick Launcher / menu bar. Long-running dev servers surface immediately on play. Scheduled cron runs don't churn the order.
- Live "已运行 5m 23s" indicator in Quick Launcher row + detail-page schedule card while a task is running.
- Sidebar "X days ago" timestamp now follows actual run activity (was stuck on creation date).
Log Streaming (Manual Tasks)
- Manual task output streams to
~/Library/Logs/TaskTick/<task-name>.log(truncate per run).tail -Fit from a terminal or drop it into Console.app for live monitoring. - ANSI color codes stripped before writing for clean output.
- Toggleable from Settings → Logs. Detail page exposes Reveal-in-Finder / Open-in-Console / Copy-Path actions.
Lifecycle Hardening
- No more orphan processes. Quitting TaskTick (or
pkill, Ctrl+C) now cleanly terminates every running script and its descendants. Confirmation dialog warns before killing in-flight work. - Each spawned script gets its own process group — per-task stop and global quit both reach grandchildren (npm → node, make → cc, etc.).
- Signal handlers (SIGTERM / SIGINT / SIGHUP) added so
pkilland Ctrl+C trigger the same graceful shutdown as the menu bar Quit button.
更新内容
快速访问(Quick Launcher)
- 修复冷启动闪屏。 第一次打开时搜索框下面那张"白卡片"已消除 —— 提前在 App 启动时唤醒系统文本输入服务,配合显示时序优化。
- ⌘O 在主窗口中打开选中任务。
- ⌘, 打开设置。
- 任务范围三选一过滤器:全部 / 仅自动 / 仅手动。
- 快速访问独立成 Settings 一个 tab。
菜单栏
- 状态栏图标会随运行状态变化 —— 运行时角标从描线变为实心。同系列 SF Symbol,切换时图标位置完全不动。
- 图标尺寸稍微放大,视觉权重更协调。
- 列表上限:自动任务最多 3 个,手动脚本最多 5 个。
- 底部按钮去除分割线,改用悬浮高亮(和任务行风格一致)。整行可点击启动/停止,鼠标悬浮时显示小手光标。
- 手动执行的任务自动排到第一位(侧边栏、快速访问、菜单栏三处一致)。长跑 dev server 一点运行就立刻冒到顶。自动调度任务不会扰乱顺序。
- 任务运行时显示"已运行 5m 23s"实时计时(快速访问行 + 详情页调度配置)。
- 侧边栏"X 天前"时间戳现在跟随实际运行活动(之前一直显示创建时间)。
日志流式写文件(手动任务)
- 手动任务输出流式写入
~/Library/Logs/TaskTick/<任务名>.log(每次运行覆盖)。可在终端tail -F实时查看,也可拖进控制台 (Console.app) 监听。 - 写入前自动剥离 ANSI 颜色码,输出干净。
- 在 设置 → 日志 中可关闭。详情页提供"在 Finder 显示"/"在控制台打开"/"复制路径"按钮。
生命周期加固
- 不再产生孤儿进程。 退出 TaskTick(或
pkill/ Ctrl+C)时会干净地终止所有运行中的脚本及其子进程。如有正在运行的任务会弹出确认对话框。 - 每个脚本启动时独立进程组 —— 单任务停止和全局退出都能触达孙进程(npm → node, make → cc 等)。
- 添加 SIGTERM / SIGINT / SIGHUP 信号处理 ——
pkill和 Ctrl+C 与菜单栏退出按钮走同样的优雅关闭流程。
Full Changelog: v1.7.0...v1.7.1
TaskTick v1.7.0
✨ The Quick Launcher (⌘⌥T)
Trigger any script from anywhere — no need to open the main window.
Press ⌘⌥T (customizable) from any app and a Spotlight-style panel drops in. Type a few characters of the task name, hit Enter, done. The whole flow is keyboard-first.
What it can do
| Shortcut | Action |
|---|---|
↑ / ↓ |
Navigate the result list |
↵ |
Smart: starts an idle task, stops a running one |
⌘R |
Restart (kill running + start fresh) |
esc |
Dismiss panel |
Highlights
- Fuzzy search — typing
dlbkmatchesdaily-backup. No need to remember exact names. - Live state — running tasks pin to the top with a green spinner and "Running…" indicator.
- MRU sort — your most-recently-launched scripts rise to the top automatically.
- Toast feedback — every action surfaces a confirmation pill at the bottom of the screen.
- Doesn't disturb your flow — the launcher doesn't activate the app or pop up the main window.
- Chinese IME-safe — composing pinyin won't accidentally trigger task execution.
🆕 Other Major Features
Manual-only Tasks
A new "Manual trigger only" toggle at the top of the Schedule tab. Manual tasks skip the scheduler entirely — they only run when you click ▶ or trigger them from the quick launcher. The main window list and menu bar now group tasks into Scheduled and Manual sections.
Unlimited Timeout (-1)
Set timeout to -1 (or any negative value) for no timeout — useful for dev servers, file watchers, and other long-running processes. Unlimited tasks bypass the concurrency semaphore so they can't starve the scheduler.
Other Improvements
- Notification permission alert — when notifications are disabled at the OS level, the app surfaces a friendly prompt with a deep link to System Settings.
- Stop button on hover for stale "running" log entries in the task detail view.
- Centralized running state — start/stop indicators are now consistent across menu bar, list, detail view, and quick launcher.
- App launch cleanup — logs left in
runningstate by a previous session are auto-finalized.
✨ 快速访问(⌘⌥T)
在任何 App 中一键唤起,立即执行脚本——再也不用切回主窗口。
按下 ⌘⌥T(可自定义),Spotlight 风格的面板瞬间弹出。输入几个字搜索,按回车执行,搞定。整个流程纯键盘操作,不打断你正在做的事。
全部快捷键
| 按键 | 操作 |
|---|---|
↑ / ↓ |
在结果列表中选择 |
↵ |
智能:空闲任务执行、运行中任务停止 |
⌘R |
重启(停止后重新启动) |
esc |
关闭面板 |
亮点
- 模糊搜索 —— 输入
dlbk命中daily-backup,不用记完整名字 - 实时状态 —— 运行中的任务自动置顶,绿色 spinner + "执行中…"提示
- MRU 排序 —— 最近用过的脚本自动靠前
- Toast 提示 —— 每次操作底部弹出反馈,知道发生了什么
- 不打扰当前工作 —— 不切换 App、不弹主窗口
- 中文输入安全 —— 输入法选字时按回车不会误触发
🆕 其他重磅功能
手动触发任务
调度 tab 顶部新增"仅手动触发"开关。打开后任务不进入定时调度,只通过 ▶、右键运行或快速访问触发。主窗口列表、菜单栏自动按 自动调度 和 手动脚本 分组展示。
永不超时(-1)
把超时时间设为 -1(或任意负数)即可让脚本无限运行——适合 dev server、文件监听等常驻进程。无超时任务不占并发槽位,不会饿死调度器。
其他改进
- 通知权限提示 —— 通知被系统禁用时,自动弹出对话框 + 一键跳转系统设置
- 悬停停止按钮 —— 任务详情页"最近执行"中残留的"运行中"条目悬停可清理
- 运行状态统一 —— 菜单栏、列表、详情页、快速访问的开始/停止指示完全同步
- 启动自动清理 —— 上次会话留下的"运行中"日志在 App 启动时自动收尾
Full Changelog: v1.6.0...v1.7.0
TaskTick v1.6.0
What's Changed
New Features
- Run on Launch: New per-task toggle that runs the task once each time the app launches (3 seconds after the scheduler starts), independent of any time-based schedule. Useful for maintenance scripts or environment setup that should fire on every app start. (#25)
Bug Fixes
- Date / Time toggles in the Schedule editor now persist correctly. Previously, disabling them and saving had no effect — they would silently reset to enabled on the next edit. (#24)
Improvements
- Execution log "Trigger" field now shows
Launchwhen a task fires from the new on-launch flow, alongside the existingManualandScheduledvalues. - Backup / restore now preserves the
Run on Launchflag.
更新内容
新功能
- 启动时执行一次:每个任务新增可选开关,App 每次启动后(scheduler 初始化 3 秒后)自动执行一次任务,独立于定时计划。适合维护脚本、环境初始化等需要在每次 App 启动时跑的场景。(#25)
Bug 修复
- 编辑器调度页的「日期」「时间」开关现在能正确保存。之前关闭并保存后,再次打开会自动回到开启状态。(#24)
优化
- 执行日志的「触发方式」字段现在能显示「启动」,与原有的「手动」「定时」并列。
- 备份/恢复现在会保留「启动时执行」开关。
Full Changelog: v1.5.1...v1.6.0
TaskTick v1.5.1
What's Changed
New Features
- Run on Launch: New per-task toggle that runs the task once each time the app launches (3 seconds after the scheduler starts), independent of any time-based schedule. Useful for maintenance scripts or environment setup that should fire on every app start. (#25)
Bug Fixes
- Date / Time toggles in the Schedule editor now persist correctly. Previously, disabling them and saving had no effect — they would silently reset to enabled on the next edit. (#24)
Improvements
- Execution log "Trigger" field now shows
Launchwhen a task fires from the new on-launch flow, alongside the existingManualandScheduledvalues. - Backup / restore now preserves the
Run on Launchflag.
更新内容
新功能
- 启动时执行一次:每个任务新增可选开关,App 每次启动后(scheduler 初始化 3 秒后)自动执行一次任务,独立于定时计划。适合维护脚本、环境初始化等需要在每次 App 启动时跑的场景。(#25)
Bug 修复
- 编辑器调度页的「日期」「时间」开关现在能正确保存。之前关闭并保存后,再次打开会自动回到开启状态。(#24)
优化
- 执行日志的「触发方式」字段现在能显示「启动」,与原有的「手动」「定时」并列。
- 备份/恢复现在会保留「启动时执行」开关。
Full Changelog: v1.5.0...v1.5.1
TaskTick v1.5.0
What's Changed
Features
- Notify only when output exists — new per-task toggle in the Notification tab (#23). When enabled, a successful run that prints nothing to stdout stays silent; only
echo'd content fires a notification (and becomes the body). Lets polling-style scripts skip the no-op chatter and only chirp on real business events. - Smarter automatic backups — backup snapshots are now content-deduplicated (#22). The rolling backup window no longer fills with identical copies during long quiet periods; nothing is written if your tasks haven't changed since the last backup.
Bug Fixes
- Foreground notifications now work — TaskTick was missing a
UNUserNotificationCenterDelegate, which caused macOS to silently drop notifications submitted while TaskTick was the active app. Notifications now appear regardless of whether TaskTick is in the foreground.
Compatibility
- New
notifyOnlyWhenOutputfield defaults tofalse, so existing tasks keep their original behavior. - Older backup files (without the dedup hash) are still readable.
更新内容
新功能
- 「仅在有输出时通知」开关(#23)—— 任务编辑器的通知 tab 新增此开关。开启后,脚本执行成功但没打印任何 stdout(典型的轮询空跑)就不弹通知;只在脚本通过
echo主动输出业务信息时才通知,正文就是 echo 的内容。 - 自动备份去重(#22)—— 备份机制不再覆盖相同内容。如果数据自上次备份以来没有变化,本次定时备份会跳过写盘;最大 N 份的滚动窗口里不会再被一模一样的副本占满。
Bug 修复
- 前台通知不再被吞 —— 修复
UNUserNotificationCenterDelegate缺失导致的问题:之前当 TaskTick 处于前台时,macOS 会静默丢掉通知,用户看不到任何提示。现在无论 TaskTick 是否在前台,通知都会正常弹出。
兼容性
- 新增的
notifyOnlyWhenOutput字段默认为false,老任务行为不变。 - 旧备份文件(没有去重哈希字段)仍然能正常读取和恢复。
Full Changelog: v1.4.2...v1.5.0
TaskTick v1.4.2
What's Changed
- Fix the root cause of silent data loss on macOS. Your tasks are now stored in a location other apps can never touch. Existing data is migrated automatically on first launch.
- Backup & restore rewritten to be reliable. Old backups from v1.4.0/v1.4.1 still work.
- Restore no longer freezes the UI on databases with long execution history.
- "Clean Up Old Logs" button now actually works.
- Assorted small fixes.
更新内容
- 修复 macOS 上数据静默丢失的根因,任务存储位置改为其他应用无法访问的专属目录。已有数据在升级后首次启动自动迁移。
- 重写备份与恢复,备份出来一定能恢复。v1.4.0 / v1.4.1 的旧备份依然可用。
- 恢复不再卡 UI,日志多也丝滑。
- "清理历史日志" 按钮真正能用了。
- 若干小修小补。
Full Changelog: v1.4.1...v1.4.2
