下面为你整理一份 《Homebrew Cask 代码审查指南:遵循 Ruby 风格和最佳实践》,适合开发者在提交 Cask PR 或审核他人代码时作为速查表使用。内容清晰、实用、贴合 Homebrew 官方规范(包括 Cask DSL、Rubocop 要求和常见审查问题)。
🧭 Homebrew Cask 代码审查指南
——遵循 Ruby 风格与最佳实践(最新版)
1️⃣ 基本原则:保持 Cask 简洁、可维护、符合 DSL
Homebrew Cask 的设计理念是:简单、明确、最少逻辑。
在代码审查时,所有判断的根本标准是:是否能保证 Cask 可读、可复用、可自动化维护。
2️⃣ Ruby 风格规范(符合 RuboCop + Homebrew Style Guide)
✔ 使用 2 空格缩进
cask "appname" do
version "1.2.3"
sha256 "abc..."
end
✔ 使用单引号 ',除非必须使用字符串插值
url "https://example.com/#{version}/App.zip"
✔ 不允许多余空行、尾随空格
Cask 文件通常非常短,结构应紧凑整齐。
✔ 关键字段应按固定顺序排列(官方强制)
顺序如下:
cask "identifier"versionsha256urlnamedeschomepage- 其他字段(如: depends_on、app、zap)
示例:
cask "google-chrome" do
version "131.0.0000"
sha256 :no_check
url "https://..."
name "Google Chrome"
desc "Fast and secure web browser"
homepage "https://www.google.com/chrome/"
app "Google Chrome.app"
zap trash: "~/Library/Application Support/Google/Chrome"
end
3️⃣ URL、版本、sha256 的最佳实践
✔ 能使用 version 变量的必须使用
避免硬编码:
❌ 不符合规范:
url "https://example.com/app-1.2.3.zip"
✔ 正确写法:
url "https://example.com/app-#{version}.zip"
✔ sha256 必须对应每个 version
除非是升级非常频繁的应用 → 使用 sha256 :no_check
典型场景:Chrome、VS Code、WeChat 更新都是自动刷新。
⚠ 审查规则:
- 如文件名包含 version → 应提供固定 sha256
- 如下载 URL 永远指向最新 → 用
:no_check
4️⃣ 不要写 Ruby 逻辑(Homebrew 禁止复杂逻辑)
❌ 不允许添加 Ruby 判断语句,比如:
if MacOS.version > :big_sur
url ...
end
✔ 改为条件 DSL:
on_catalina :or_older do
url ...
end
on_big_sur :or_newer do
url ...
end
5️⃣ app、pkg、installer 的规范
✔ app 使用相对路径(简洁)
❌ 错误
app "/Applications/MyApp.app"
✔ 正确
app "MyApp.app"
✔ 安装 pkg 时必须加卸载逻辑
pkg "Installer.pkg"
uninstall pkgutil: "com.example.pkg"
6️⃣ zap 清理规则(最常见审查点)
✔ 优先写最关键的用户数据路径
如:
~/Library/Application Support/xxx~/Library/Preferences/xxx.plist~/Library/Caches/xxx
✔ 不要写系统级路径(会被拒绝)
如:
/Library/System
7️⃣ LICENSE、desc、homepage 的规范
✔ desc 要简短、非营销、非夸张
❌ 不允许的描述:
- “最强大的 AI 工具!”
- “革命性应用!”
✔ 合规:
desc "AI-based text analysis tool"
8️⃣ 常见审查 Checklist(PR 必备)
🔍 核心检查点:
- 文件名必须与 Cask token 规范一致(例如:
visual-studio-code) - 字段顺序正确
- 使用单引号
- URL 可稳定下载
- sha256 对应 version
- no_check 是否合理
- app/pkg 安装路径正确
- zap 项目必须精准、不侵犯系统路径
- 没有复杂 Ruby 逻辑或函数
- RuboCop 检查通过
9️⃣ 最佳示例 Cask(官方风格)
cask "example-app" do
version "1.0.5"
sha256 "56eb34cd2c21ad..."
url "https://download.example.com/app-#{version}.dmg"
name "Example App"
desc "Simple demo application"
homepage "https://example.com/app"
app "Example.app"
zap trash: [
"~/Library/Application Support/Example",
"~/Library/Preferences/com.example.app.plist",
]
end