| | |
| | | |
| | | ## Done |
| | | |
| | | - [2026-05-18] 重做 VoiceSnap macOS 图标为 SVG 矢量母版。 |
| | | - 目标: 白色圆角方形底、蓝色麦克风,风格参考 TagLauncher,避免毛边、截图白边和尺寸忽大忽小。 |
| | | - 最终选择: B 版白底蓝色麦克风,并为中间麦克风加入轻微层次阴影。 |
| | | - SVG 母版: `VoiceSnapGo/design/icon-candidates/voicesnap_icon_B_thin-blue-glyph.svg` |
| | | - 当前打包图标: `VoiceSnapGo/build/darwin/icon.icns` |
| | | - 备用 ICNS: `VoiceSnapGo/build/darwin/VoiceSnap-selected-B-shadow.icns` |
| | | - 版本: `2.1.4` |
| | | - build: `20260518.1748` |
| | | - [2026-05-18] 增加语音输入交互方式设置。 |
| | | - 新增配置 `HotkeyMode`,默认 `hold`。 |
| | | - 设置页新增“语音输入方式”分段控件,支持“点按”和“长按”。 |
| | | - 点按: 点一下快捷键开始说话,再点一下结束并识别输入。 |
| | | - 长按: 长按快捷键开始录音,松开后结束并识别输入。 |
| | | - 版本: `2.1.3` |
| | | - build: `20260518.1651` |
| | | - [2026-05-18] 修复全屏窗口下语音输入悬浮指示器不显示。 |
| | | - 根因: macOS 全屏 Space 下普通 `NSWindow` + `NSFloatingWindowLevel` 不稳定,容易被全屏 App 压在下层。 |
| | | - 修复: 悬浮指示器改为非激活 `NSPanel`,窗口层级提升到 `kCGStatusWindowLevelKey`,并补充 `Transient`、`IgnoresCycle`、`FullScreenAuxiliary`、`CanJoinAllSpaces` 行为。 |
| | | - 版本: `2.1.2` |
| | | - build: `20260518.1623` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.2-build20260518.1623-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.2-arm64-local.dmg` |
| | | - 已安装到 `/Applications/VoiceSnap.app`;签名验证为 `VoiceSnap Local Code Signing`。 |
| | | - [2026-05-18] 将 macOS 后台活动/登录项纳入权限检查面板。 |
| | | - 说明: 系统设置里的 “VoiceSnap Local” 是本地稳定签名证书的开发者名,下面挂着 VoiceSnap 的登录项/后台活动。 |
| | | - 它不是右 Alt、录音、自动上屏的必需隐私权限,但会影响登录后是否自动在后台运行。 |
| | | - 面板新增“后台活动 / 登录项”,标为“可选”,不影响核心权限总绿灯。 |
| | | - build: `20260518.1604` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.1604-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`;启动日志验证 build `20260518.1604`。 |
| | | - [2026-05-18] 修复右 Alt 事件进入但被 macOS 物理状态查询误判为未按下的问题。 |
| | | - 日志显示 R-Alt `flagsChanged` 事件正常进入,`flags=0x80140`,但 `physicalDown=false` 导致 `pollDown=false`。 |
| | | - 修复: 按事件 keyCode 区分左右 Alt,并用该事件的 modifier flags 判定按下/释放。 |
| | | - 验证: 重新打包安装后模拟右 Alt,日志显示 `eventDown=true`、`pollDown=true`,并成功触发录音流程。 |
| | | - build: `20260518.1554` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.1554-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`;启动日志验证 build `20260518.1554`。 |
| | | - [2026-05-18] 增加权限检查设置面板。 |
| | | - 新增“权限”设置页,清晰列出麦克风、辅助功能、输入监控三个权限。 |
| | | - 权限状态由后端调用 macOS 原生 API 检查;已授权显示绿灯,未授权显示红灯。 |
| | | - 支持刷新状态和“去授权”按钮,点击后请求系统授权并打开对应系统设置页。 |
| | | - build: `20260518.1541` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.1541-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`;启动日志验证 build `20260518.1541`。 |
| | | - [2026-05-18] 修复 VoiceSnap 设置窗口不可见时右 Alt 全局热键无法触发的问题。 |
| | | - 观察: 设置窗口在前台可触发,窗口隐藏或被遮挡后按右 Alt 没有热键日志。 |
| | | - 修复: macOS 热键监听改为专用线程运行,并在 event tap 未启动时自动重试。 |
| | | - 修复: 右/左修饰键检测增加物理按键状态轮询兜底,避免只依赖窗口前台状态下的 event tap;同时去掉 Option 组 flags 对左右 Alt 的兜底混用,继续保持右 Alt/左 Alt 严格区分。 |
| | | - 修复: 启动时开启系统 activity,降低隐藏窗口后被 App Nap 影响的概率。 |
| | | - 日志增强: 右 Alt 诊断日志现在记录 `source`、`physicalDown`、`trackedDown`、`recentDown`、event tap 启动尝试/失败/禁用次数。 |
| | | - build: `20260518.0230` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.0230-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`;启动日志验证 build `20260518.0230`,辅助功能权限已通过,event tap 已启动。 |
| | | - [2026-05-18] 将本地 macOS 打包从 ad-hoc 签名改为固定本地 Code Signing 身份,减少辅助功能权限失效。 |
| | | - 新增 `VoiceSnapGo/scripts/build-local-macos.sh`,用于本地构建、稳定签名、生成 DMG,可选安装到 `/Applications`。 |
| | | - 自动创建/复用钥匙串身份 `VoiceSnap Local Code Signing`,签名 `.app`、内部 dylib 和 `.dmg`。 |
| | | - 当前安装包签名已验证: `Authority=VoiceSnap Local Code Signing`。 |
| | | - build: `20260518.0211` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.0211-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`;本次签名身份变化后需要在系统设置里重新添加一次辅助功能权限。 |
| | | - [2026-05-18] 修复停止录音时 `ma_device_stop` 与音频回调互等导致 App 假死的问题。 |
| | | - 根因: `Recorder.StopAndGetSamples()` 持有录音互斥锁调用 `device.Stop()`;底层 `ma_device_stop` 等待音频回调结束,而音频回调同时等待同一把锁,形成互等。 |
| | | - 修复: 停止录音时先在锁内摘除设备并标记非录音,释放锁后再调用 `Stop/Uninit`,避免底层停止设备时阻塞音频回调。 |
| | | - 增加停止设备过程日志: `Stopping audio device`、`Audio device stopped`、`Audio device uninitialized`。 |
| | | - build: `20260518.0125` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260518.0125-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`,并在日志中验证一次完整停止链路。 |
| | | - [2026-05-17] 放大菜单栏图标的有效绘制区域,改善深色菜单栏里图标过小的问题。 |
| | | - `VoiceSnapGo/build/darwin/tray_icon.png` 的有效内容区域从约 `156x156` 放大到约 `220x220`。 |
| | | - build: `20260517.2306` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap.app` |
| | | - 输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-build20260517.2306-arm64-local.dmg` |
| | | - 兼容输出: `VoiceSnapGo/build/local/arm64/VoiceSnap-2.1.1-arm64-local.dmg` 已替换为同一份新包。 |
| | | - 已安装到 `/Applications/VoiceSnap.app`。 |
| | | - [2026-05-17] 使用重新生成并已确认满意的 macOS 26 风格麦克风图标,制作透明边缘 icns 并重新打包。 |
| | | - 图标来源: `/Users/ar/.codex/generated_images/019e2f69-755a-74a2-9a61-0e390fda0463/ig_0a6e87fd2c8e3f65016a09c4c865688191ade9691cb608b2e4.png` |
| | | - 透明 PNG: `VoiceSnapGo/build/darwin/macos26_mic_app_icon.png` |