macOS 端基于 SwiftUI,核心逻辑通过 Rust FFI 提供,覆盖:
- 嵌入页(输入源、嵌入设置、队列、日志)
- 检测页(检测信息、队列、日志、结果联动)
- 标签/数据库页(映射 + 证据管理)
- 密钥页(槽位、生成/删除、导入/导出、Hex 导入、标签、摘要)
- 人类可读 UI 文本属于展示层契约,可在版本间调整。
- 机器接口不受影响(FFI 结构与 CLI JSON 仍保持兼容目标)。
- 默认 UI 仅展示用户层消息,技术诊断通过“显示诊断”开关查看。
- 术语统一基线见
../ui/terminology.md。
# 1) 构建 Rust 动态库
cargo build --lib --features ffi,app,bundled --release
# 2) 生成 Xcode 工程
cd macos-app
xcodegen generate
# 3) 构建 App
xcodebuild \
-project AWMKit.xcodeproj \
-scheme AWMKit \
-configuration Debug \
-sdk macosx \
build- bundled 模式依赖仓库内
bundled/audiowmark-macos-arm64.zip - 数据库路径:
~/.awmkit/awmkit.db - 密钥存储与槽位管理由 Rust 层统一处理(UI 通过 FFI 调用)
- 预发布/本地构建通常未签名,若提示“已损坏”可执行:
xattr -dr com.apple.quarantine /path/to/AWMKit.app
- 无密钥时,嵌入按钮禁用;检测允许执行但会产生未校验结果警告
- 切换槽位后,状态图标悬浮摘要立即更新
- 密钥导入支持 32 字节
.bin与 64 位 Hex(可带0x前缀),槽位已有密钥时禁止覆盖 - 嵌入成功后自动写入证据,检测页 clone-check 可读取证据比对
- macOS 钥匙串按“条目”授权;当前 AWMKit 采用“每槽位一个密钥条目”,因此首次访问多个已配置槽位时可能需要多次认证。
- 在系统认证弹窗中选择
始终允许后,通常不会再对同一“应用身份 + 条目”重复询问。 - CLI 与 App 共用同一密钥后端,因此两者都受上述授权策略影响。
- 如果应用身份发生变化(例如未签名/临时签名构建、重装、更新后签名变化),系统可能将其视为新应用并重新请求授权。
- 以上均为系统安全机制行为,不表示 AWMKit 的密钥逻辑异常。