Repository navigation
Releases
v0.3.0 — 下载更新,不用再等 GitHub 了
下载更新,不用再等 GitHub 了
这版给「检查更新」加了双源:GitHub 主源 + Gitee 备源(gitee.com/Micestark/openly)。GitHub 抽风或国内网络差的时候,还有 Gitee 那条路。
换个下载源
- 检查更新时并发查两个源、都等到结果再比较,取版本更高者——Gitee 晚传了附件也漏不掉新版
- 一个源挂了自动用另一个,全挂才报「检查失败」
- 设置页 › 更新区新增**「换个下载源…」**菜单:每个源两条路——直接下载安装,或打开它的 Release 页自己拖
- 主按钮(一键更新)始终走首选源(GitHub),行为不变
发布侧(对使用者透明)
每次 GitHub Release 发出后,tag、说明与 dmg 会同步到 Gitee(sync-gitee-release.sh,幂等)。README 安装节新增 Gitee 镜像入口。
顺带修的
- 版本比较在段数不同(
0.4vs0.4.0)时不再有越界风险 - 更新测试体系换到 Swift Testing:新增 21 个双源用例(同版本带全源、高版本胜出哪怕来自备源、单源失败回退、全失败报错、Gitee 载荷宽容解码 + 模板拼页、换源装配守卫),全部注入式 fetch,不碰真网;「取更高版本」做过反向验证(故意取更低时用例当场变红)
升级
DMG 拖进「应用程序」覆盖安装即可;装好后应用内就能检查更新,下载源可挑。仍然未公证,Gatekeeper 放行方式同前:系统设置 › 隐私与安全性 › 仍要打开,或 xattr -cr /Applications/Openly.app。
sha256: 832d5bfefd32a82f73c2a700a92000c6bfffab5fd9ceda994f7d0f33b9ba9dcd
v0.2.0 — 能撤销,也能自己更新了
这次可以撤销,也能自己更新了
v0.1.0 是「第一次能用了」,v0.2.0 补上的是敢用——改错了能退回去,出新版不用再回来找下载页。
⌘Z 撤销 + 恢复系统默认
改错一个默认应用,以前只能凭记忆改回去。现在:
- ⌘Z 逐条回退最近修改(单条、批量都记,栈深 50)
- 编辑面板里新增恢复系统默认——只对「你显式设置过」的类型出现,点了就把那条记录从 Launch Services 摘掉,交还系统固有默认
- 恢复这个动作本身也能 ⌘Z 撤回
实现上绕开了一个坑:macOS 没有「取消默认设置」的公开 API,唯一可行的路是从 com.apple.launchservices.secure.plist 摘记录,而且必须走 CFPreferences——直接改文件会被 cfprefsd 的缓存静默覆盖回去。
设置窗口(⌘, 或工具栏齿轮)
- 语言:English / 简体中文 / 跟随系统(重启后生效)
- 更新:自动检查开关、当前版本与系统版本、状态一句话
- 关于:简介、仓库入口、MIT 许可证
应用内更新
有新版时「立即检查」旁出现「更新…」,一路走完:下载(带进度)→ 挂载 → 校验版本 → 旧版进废纸篓 → 原子换装 → 自动重启。
任何一步失败,已装的旧版一个字节不动,最终退路是在 Finder 里亮出 dmg 让你自己拖。检查更新 24 小时节流,失败 1 小时后重试,启动时自动查一次(可关),离线时完全静默。
修复
- 关掉主窗口后点 Dock 图标没反应 —— SwiftUI 的 reopen 只认「上一次那扇窗」,那扇窗关了就什么都不做。现在有窗举窗、缩在 Dock 里交给系统做神灯动画、一扇不剩就开新的
- 主界面工具栏重新排布:搜索框居中、按钮全部归右,点搜索不会再让导出/导入/刷新折叠进溢出菜单;⌘F 仍然可用
升级
DMG 拖进「应用程序」覆盖安装即可,配置和所有关联不受影响。装好之后打开设置 › 更新,以后就能在应用内升级了。
系统要求
macOS 14 及以上。
安装提示
本版未做公证(没有 Developer ID 证书),首次打开会被 Gatekeeper 拦。放行方式:系统设置 › 隐私与安全性 › 仍要打开,或执行 xattr -cr /Applications/Openly.app。
sha256: 27eb0df1efbd5c9654274e654435eea6c83a04c97abceaa3b2118567df65ceab
v0.1.0 — 第一次能用了
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。