Skip to content

v0.1.0 — 第一次能用了

Choose a tag to compare

@TonyMistark TonyMistark released this 23 Oct 02:31
· 10 commits to main since this release

v0.1.0 — 第一次能用了

Openly 的第一个版本。

它只做一件事:把 macOS 里「什么文件用什么打开」这张散落在各处的表,收进一个能看、能搜、能批改、能带走的窗口。

能看

  • 首屏一张表:Launch Services 里你设过的关联,加上一份常用扩展名清单——.md、.pdf、.html、mailto:、plain-text 都在里面。每行是类型徽标、底层 UTI、默认应用的真实图标、注册应用数量
  • 左栏两个智能列表:无默认应用(红色徽标,一眼看到哪些类型没人管)、最近修改(每次「原为 X → Y」都记着,重启还在)
  • 七个文件类别按 UTType 的继承关系推导,不是硬编码映射表

能改

  • 点任意一行弹出锚定面板,列出注册过这个类型的全部应用,选一个即生效;行内图标当场更新
  • 列表里没有的应用走「浏览其他应用…」:任选一个 .app,先注册进 Launch Services 再设为默认
  • 勾选多行批量改。应用不支持的类型逐条跳过并汇总报出,不会中途断掉

能反查

  • 顶栏切「按应用」:侧栏按接管数量排出所有应用,主区列出它手里的每一个类型,还能一键「全部转移给…」。卸载或替换一个应用之前,先看清它管着什么

能带走

  • 导出 infat 兼容的 TOML([extensions] [types] [schemes] 三张表),直接进 dotfiles
  • 导入先算差异——新增 N 条、覆盖 M 条、其余一致——确认后才动手,改之前你就知道会改什么

macOS 26 上的一件事

这个版本在 macOS 26 上还能改默认应用,是因为设置路径换成了 NSWorkspace 的现代 API。旧的 LSSetDefaultRoleHandlerForContentType 在新系统上返回 noErr 但什么都写不进去——infat 的命令行在这台机器上已经改不动了。查询侧仍然走 legacy API,一切正常。

代价是:每次修改系统都会弹一次确认框,批量修改就是多次确认。这是 Apple 的机制,绕不过去,所以批量操作会提前告诉你。踩到的坑都记在 docs/LAUNCHSERVICES_NOTES.md。

还没有的

  • ⌘Z 撤销、恢复系统默认——目前只能手动改回去
  • 异常检测只做了「无默认」;「非常规占用」(比如 .html 被非浏览器接管)和「共享 UTI 联动提示」(yml / yaml 改一个影响另一个)还没做
  • 搜索不覆盖注册应用名和 bundle ID

安装

下载 Openly-0.1.0.dmg,打开后把 Openly 拖进「应用程序」。

产物是 ad-hoc 签名、未公证,新机器首次打开会被 Gatekeeper 拦下(macOS 15 起已不能用「右键 → 打开」绕过):

  • 系统设置 › 隐私与安全性 › 仍要打开;或
  • xattr -cr /Applications/Openly.app

要求 macOS 14 及以上,本版为 Apple Silicon(arm64)。27 项单元测试通过,CI 覆盖 macOS 15 与 26。