unseal
v0.3.0
Published
Scan macOS /Applications for quarantined apps and batch-remove the quarantine attribute
Readme
这是什么
macOS Gatekeeper 通过 com.apple.quarantine 扩展属性标记从互联网下载的应用。unseal 扫描 /Applications 目录,检测每个 app 的隔离状态,并提供交互式界面批量移除隔离属性。
对于已签名但仍保留隔离属性的应用,unseal 会额外调用 spctl 进行 Gatekeeper 评估,区分"真正被隔离"和"虽有属性但已被系统信任"两种情况,避免误报。
功能
- 三态检测 — 区分隔离(quarantined)、已解封(unsealed)和不可读(unknown)三种状态
- Gatekeeper 二次验证 — 对有隔离属性的应用额外调用
spctl --assess,已签名应用不会被误报 - 扫描进度回显 — 扫描过程中实时显示当前正在检测的应用名
- 交互式多选 — checkbox UI 选择需要解封的应用(默认全部选中,回车即确认解封)
- 延迟提权 — 仅在用户回车确认后才请求 sudo 权限
安装
npm install -g unseal命令一览
| 命令 | 说明 |
|------|------|
| unseal | 交互式扫描 + 解封流程 |
| unseal --help | 显示帮助信息 |
| unseal --version | 显示版本号 |
项目结构
src/
├── index.ts # CLI 入口,流程编排
├── debug.ts # 开发用场景演示(不打入 dist)
├── exec.ts # 命令执行器抽象(child_process.execFile 封装)
├── scanner.ts # 应用发现 + 隔离检测
├── prompt.ts # TUI 多选 + 确认交互
├── unseal.ts # 移除隔离属性
├── sudo.ts # 权限检查
└── types.ts # 共享类型定义
tests/
├── scanner.test.ts # 扫描器单元测试
├── prompt.test.ts # 交互提示测试
├── unseal.test.ts # 解封逻辑测试
├── sudo.test.ts # sudo 检测测试
├── index.test.ts # CLI 集成测试
├── exec.test.ts # exec 子进程往返测试
└── exec.branches.test.ts # exec 兜底分支测试(mock 版)技术栈
| 层 | 技术 |
|----|------|
| 语言 | TypeScript(strict 模式) |
| 运行时 | Bun(开发、测试、构建) |
| TUI | @inquirer/prompts(checkbox + confirm) |
| 终端着色 | chalk |
| 目标平台 | Node.js ^20.19 || ^22.13 || >=24(ESM bundle,bun build --target=node) |
开发
环境要求:Bun >= 1.0
bun install # 安装依赖
bun run dev # 开发模式运行
bun run build # 构建 npm 发布包| 命令 | 说明 |
|------|------|
| bun run test | 运行全部测试 |
| bun run test:coverage | 运行测试并生成覆盖率报告 |
| bun run lint | 使用 Biome 检查 lint、格式和 import 顺序(warning 也会失败) |
| bun run lint:fix | 使用 Biome 自动修复可安全修复的问题 |
| bun run format | 使用 Biome 格式化支持的文件 |
| bun run typecheck | TypeScript 严格类型检查(src + tests 双 project) |
测试
| 层 | 内容 | 触发时机 |
|----|------|----------|
| L1 | 单元测试(100% 覆盖率) | pre-commit |
| G1 | Biome(0 error / 0 warning)+ tsc --noEmit(strict) | pre-commit、CI |
| L2 | 集成 + 冒烟测试 | pre-push |
| G2 | gitleaks + osv-scanner | pre-push |
bun run test # 运行全部测试
bun run typecheck # 类型检查文档
| # | 文档 | 说明 | |---|------|------| | 01 | Architecture | 系统设计 | | 02 | Testing Strategy | 测试策略与提交规范 |
License
MIT © 2026
