惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

分享创造

分享 KCase 脑图测试用例生成平台(AI 辅助生成测试用例) 标签页囤积症自救:写了个插件 TabRack,主打快速检索、自动分类和 AI 摘要 [file-preview]一个比较全面的在线文件预览组件库-支持 react 和 vue 撸了个 iOS 小应用[极简水印相机],直接免费 做了一个 V2EX Skill 写了个 iOS 打码 App「遮鸭 Maskduck」,纯离线免费 35 岁前端,裁员失业后,我花 1 个月做了个 AI 生图网站 亲身经历猫咪急症,我做了一款猫狗疼痛检测工具,希望能救你家毛孩一命 如何用 AI 做比较酷炫的落地页? 求真!最近 AI 生图的能力强到可怕 开源一个查看 k8s 的菜单栏工具-kubebar Packpour:我做了个专门给 App Store Connect 填多语言元数据的小工具 面对 140 年一遇的超级厄尔尼诺,我做了个全球监测小站 做了一个自动翻译的 Hacker News 客户端 做了一个 AI 头像生成器,可以免费生成 2 次 [送码 50 个] 自己手搓了个高颜值的倒数日 App——拾光机,求 V 友们指点 一个将苹果健康 APP 数据导出的工具,然后把你的数据喂给 AI 分析 我做了一个叫「订阅斩」的 iOS App,专门对付那些悄悄扣钱的订阅 做了个草率的日麻互动漫画,听听反馈 喜欢自己洗车的朋友们,我用 ai 做了一款洗车小程序 -- 洗车志 感谢 V2EX 上各位 NAS🍆 和 Datahoarder 玩家的关注和真实反馈!作为个人开发者,能得到这么多硬核玩家们的讨论,我非常荣幸。 用 AI 开发熊孩子自律的小程序 用 OpenClaw 搭建个人运动助手 今天摸鱼给 NanaAI 也接入了 GPT-Image-2 [Video Companion]一个 chrome 插件,解决大多对视频操作的需求~欢迎使用提 bug AI 时代,做产品简单了,把产品推广出去却变的更难了~ bestskills.dev - Skills 精选和评测站点 免 ROOT 强力卸载安卓广告软件 一个 All In One 的运维工具,支持 SSH、数据库、Redis 管理 [开源] Codeg V0.10:专注于代码生成的多智能体 IDE(cc、codex、gemini、opencode……),新版本重构了工作区,飞一般的体验,支持桌面端、服务器部署
做了一个 Homebrew 外部命令:从 GitHub Release 或直接下载...
oxsean · 2026-06-04 · via 分享创造

大家好,最近做了一个小工具:ghcask

项目地址:

https://github.com/oxsean/homebrew-ghcask

网站:

https://oxsean.github.io/homebrew-ghcask-site/

它是一个 Homebrew external command ,目标是解决一个我自己经常遇到的问题:

很多 Mac 应用其实已经提供了可用的 .dmg.zip.tar.gz.tgz 安装包,尤其是一些开源项目会直接放在 GitHub Releases 里,但这些应用不一定已经进入了官方 Homebrew Cask 索引。

于是平时就会变成:

  1. 打开 GitHub 或官网
  2. 找最新 release
  3. 判断 arm64 / x64 / universal
  4. 下载 dmg 或 zip
  5. 拖到 Applications
  6. 后续更新继续手动重复

我希望把这类应用也尽量放回 Homebrew 工作流里,所以做了 ghcask

基本用法

brew tap oxsean/ghcask
brew ghcask install owner/repo

比如某个 GitHub 仓库有 macOS release asset ,ghcask 会尝试:

  • 找到合适的 release
  • 选择适合当前机器架构的 macOS 安装包
  • 下载并计算 sha256
  • 推导 .app 名称
  • 生成一个本地 Homebrew cask
  • 把下载好的包移动到 Homebrew 的 cask cache
  • 最后交给 Homebrew 安装

也支持直接 URL:

brew ghcask install cask-name --url https://example.com/download/App.dmg

这个主要是给那些不在 GitHub 上发布,但能拿到稳定下载地址的软件用。

它不做什么

这个项目不是想替代 Homebrew Cask 。

它也不会把生成的 cask 发布到官方索引,所有生成的 cask 都只保存在本地。实际安装、重装、升级、卸载还是交给 Homebrew 处理。

我的理解是:

  • 官方 Homebrew Cask 适合稳定、公开、可维护的应用索引
  • ghcask 更适合个人临时或长期使用的本地补充工作流

也就是说,它解决的不是“让所有软件进入官方 cask”,而是“我自己这台机器上想用 Homebrew 管更多软件”。

目前支持的能力

  • 从 GitHub Releases 安装
  • 从直接 package URL 安装
  • 支持 .dmg.zip.tar.gz.tgz
  • 自动计算 sha256
  • 尽量自动推导 app 名称、版本和架构
  • 支持指定版本安装
  • 支持 prerelease
  • 支持 pin / unpin
  • 支持 update / outdated / upgrade
  • 支持 reinstall ,并且 direct URL 可以通过 reinstall 换 URL
  • 支持 dump / restore ,把生成的本地 cask 状态带到新机器
  • 优先使用本地已经登录的 gh,没有的话再回退到 curl

举几个场景

1. 某个开源 Mac App 只有 GitHub Release

以前可能要自己去网页里找 dmg 。

现在可以:

brew ghcask install owner/repo

2. 想安装某个指定版本

brew ghcask install owner/repo --version v1.2.3

指定版本默认会被 pin 住,后续 update 不会自动跳到最新版。

如果以后想回到正常更新轨道:

brew ghcask unpin cask-name

3. 想用 prerelease

brew ghcask install owner/repo --prerelease

或者之后切换:

brew ghcask reinstall cask-name --prerelease
brew ghcask reinstall cask-name --stable

4. 直接从 URL 安装

brew ghcask install app-name --url https://example.com/download/App.dmg

如果 URL 方式的软件之后要升级,可以换 URL 重新安装:

brew ghcask reinstall app-name --url https://example.com/download/App-2.0.dmg

5. 新机器恢复

旧机器:

brew ghcask dump --global --force

新机器:

brew tap oxsean/ghcask
brew trust --tap oxsean/ghcask
brew ghcask restore --global
brew bundle

Brewghcask.json 只保存生成的 cask 定义和 metadata ,不包含安装包和 app 本体。

为什么不用自己写 cask ?

当然可以自己写。

但我自己的痛点是:很多时候只是想快速安装一个 GitHub Release 里的 dmg ,并不想为了一个私人使用的软件维护一份完整 cask 。

ghcask 做的是把这件事自动化一点:

  • release 选择
  • asset 选择
  • sha256
  • cask 生成
  • Homebrew cache
  • 后续 update / reinstall

最终仍然可以检查生成的 cask ,不是黑盒安装。

欢迎大家提建议,尤其是经常用 Homebrew Cask 管 Mac 应用的朋友。