hostflip:一个不会静默覆盖外部改动的 macOS 原生 hosts 切换器(开源免费)

Koru 2026-08-26 10:53 1

开发时经常要在本地、测试、预发几套 hosts 之间来回切换。我一直不太放心让多个工具同时修改 /etc/hosts:Docker Desktop 、VPN 客户端刚写进去的内容,或者自己手动添加的行,下一次切换时都可能被覆盖,而且事前没有任何提醒。


所以我用 Swift 写了一个 macOS 原生工具:hostflip。MIT 开源,免费使用。


https://github.com/heronapp/hostflip


它的核心思路只有一条:hosts 文件是你的,不是工具的。
hostflip 主窗口:左侧管理独立方案与分组,右侧编辑 hosts 内容
主要能力



  • 外部改动先审后写。其他工具或你手动修改 hosts 后,hostflip 会检测差异并停止写入,在应用内显示 diff ;只有明确处理完差异后才会继续,不会默默覆盖。

  • 基线保留,方案集中管理。首次启动时将 /etc/hosts 导入为只读的 Base Hosts ,合并时始终放在最前;激活方案集中放在文件末尾,并用 hostflip:begin / hostflip:end 标出起止位置,卸载后也容易识别和手工删除。

  • 保留原始备份。首次启动时读取的原文件还会另存为 hosts.orig,hostflip 不会重写这份备份。

  • 组内互斥,跨组叠加。方案可以分组,每组最多激活一个(例如 staging / production 二选一);不同组的激活方案和独立方案可以同时生效,最终合并为一份 hosts 。

  • 菜单栏一键切换,不弹密码。首次切换时按系统提示批准 helper ,之后切换无需再输入密码。

  • 总开关。一键暂停后,hosts 恢复为基线内容;各方案的激活状态仍会保留,重新开启后恢复原来的组合。

  • 命令行 + JSON 输出hostflip activate staging/api 用于切换方案;hostflip doctor dev.example.com 会一次检查从方案、合并结果、系统文件到解析器的整条链路,排查“为什么切了还是老地址”很省事;--json 便于接入脚本和 CI 。

  • 远程方案。从 HTTPS 地址获取内容并按计划自动刷新。

  • 顺手的编辑器。⌘⇧F 可跨所有方案搜索 hostname / IP 并跳到对应行,⌘/ 可一键注释或取消注释;只写了 IP 、缺少 hostname 的不完整行会在行号栏标出。即使远程方案有几万行,打开和滚动也不卡。

  • 原生实现。使用 Swift + SwiftUI ,常驻菜单栏,不依赖 web 运行时。


如果你正在用 SwitchHosts:可以一键导入现有配置(不导入开关状态),详细说明见 迁移指南。


限制:目前仅支持 macOS ( 14+,Apple silicon )。


欢迎试用,有问题或建议,提 issue 或在楼下留言都可以。

最新回复 (0)
    没有回复
* 帖子来源V2EX
返回