☰
OpenOats完整部署发布指南:从构建、代码签名、DMG打包到Homebrew Cask上架
2026/10/3 17:01:43 网站建设 项目流程

OpenOats完整部署发布指南:从构建、代码签名、DMG打包到Homebrew Cask上架

【免费下载链接】OpenOatsA meeting note-taker that talks back.项目地址: https://gitcode.com/gh_mirrors/op/OpenOats

OpenOats是一款 macOS 实时会议转录应用("能开口回应的会议记录员"),它在通话旁实时转写双方对话,并基于你的笔记给出即时建议。本文是一份面向新手的完整部署发布指南:带你走完 OpenOats 从 Swift 源码构建、代码签名(Code Signing)、公证(Notarization)、DMG 打包,到最终上架 Homebrew Cask 的全部 6 个步骤。跟着做,你也能发布自己的 macOS 应用。

发布流程总览:5 个脚本搞定一切

OpenOats 把整套发布流水线封装在了scripts/目录下的几个脚本中,这是它最容易上手的地方:

脚本作用
build_swift_app.sh构建 Release 版.app、签名、安装到/Applications
make_dmg.sh生成带"拖入 Applications"布局的 DMG 并公证
package_smoke_check.sh校验产物完整性(冒烟检查)
select_xcode_26.sh一键切换 Xcode 26 开发目录
update_homebrew_cask.sh自动更新 Cask 的版本号与 sha256

注意:第二张图并非图片文件,上面表格中已说明,此处仅保留第一张真实截图用于展示界面效果。

第 1 步:环境准备(最快配置方法)

发布 OpenOats 需要满足 Package.swift 声明的平台要求:

  • 🖥️Apple Silicon Mac,macOS 15+(Sequoia 及以上)
  • 🛠️Xcode 26 / Swift 6.2
  • 🔑 如需发布公开版本,还需要Developer ID Application 证书(App Store Connect 中免费申请)

仓库中有一个脚本可以帮你自动选中 Xcode 26 的开发目录:

./scripts/select_xcode_26.sh

它会用xcode-select -s指向Xcode_26*.app,并打印当前的xcodebuild -version供你核对。

第 2 步:构建 macOS .app(构建 + 签名一体完成)

核心命令只有一条:

./scripts/build_swift_app.sh

build_swift_app.sh 内部依次做了这些事:

  1. Release 编译:执行swift build -c release,产出二进制文件
  2. 组装 .app 包:拷贝二进制、Info.plist、图标、Sparkle 自动更新框架,并补齐PkgInfo
  3. 版本注入:从最近的 git tag 自动推导版本号并写入CFBundleShortVersionString,避免自更新组件误判;也可用APP_VERSION=1.87.1显式指定
  4. 代码签名:从内到外依次签名 Sparkle 的 XPC 服务、Autoupdate、Updater.app 和主应用,使用 OpenOats.entitlements 权限清单
  5. 安装:拷贝到/Applications

新手常用技巧:本地调试时没有签名证书?加两个环境变量即可跳过签名和安装:

SKIP_SIGN=1 SKIP_INSTALL=1 ./scripts/build_swift_app.sh

第 3 步:代码签名与公证(Notarization)要点

签名身份脚本会自动探测:优先找Developer ID Application,找不到再回退到Apple Development,也可以显式传入:

CODESIGN_IDENTITY="Developer ID Application: 你的名字 (TEAMID)" ./scripts/build_swift_app.sh

DMG 的公证在 make_dmg.sh 中完成,需要同时设置这 3 个环境变量,脚本才会提交公证并用stapler staple装订票据:

环境变量说明
APPLE_ID开发者账号 Apple ID
APPLE_TEAM_ID团队 ID(6 位大写字母)
APPLE_APP_PASSWORDApp 专用密码(非登录密码)

💡 只有完成签名 + 公证,其他用户下载 DMG 时才不会遇到 Gatekeeper 拦截。

第 4 步:DMG 打包(一键生成可分发的安装包)

构建出dist/OpenOats.app后,执行:

./scripts/make_dmg.sh

make_dmg.sh 会生成一个带视觉设计的 DMG:Finder 窗口里左侧是 OpenOats.app 图标、右侧是 Applications 文件夹,用户拖拽即可完成安装——这是 macOS 发行版最经典的布局。脚本细节:

  • 用osascript创建 Finder别名(而不是符号链接,别名的图标显示更美观)
  • 通过 AppleScript 精确控制窗口大小(640×400)、图标位置与尺寸
  • 先创建临时 UDRW 格式,最后用hdiutil convert转为压缩只读的UDZO格式
  • 有签名身份时自动对 DMG 本体签名

产物位于dist/OpenOats.dmg,可直接上传到 Release 页面分发。

第 5 步:发布前自检(两条命令跑通全部测试)

在把 DMG 交给用户之前,强烈建议跑一遍仓库自带的验证脚本:

# 产物完整性冒烟检查:验证二进制、Info.plist、Sparkle 框架、 # tokenizer 回退配置、rpath 是否齐全 ./scripts/package_smoke_check.sh # UI 冒烟测试:xcodebuild 构建并执行 UI 测试 ./scripts/run_ui_smoke.sh

package_smoke_check.sh 会检查swift-transformers_Hub.bundle中的 GPT-2 / T5 tokenizer 回退配置是否存在——这些是本地语音模型首次启动时的关键资源,漏拷贝会导致应用启动异常。

第 6 步:上架 Homebrew Cask(让用户一条命令安装)

OpenOats 的 Cask 定义文件是 Casks/openoats.rb,关键配置包括:

  • version与sha256:对应 Release 中 DMG 的版本和校验值
  • url指向OpenOats.dmg下载地址,livecheck使用:github_latest策略自动探测新版本
  • depends_on macos: :sequoia:声明最低系统要求
  • zap段:卸载时彻底清理~/Library下的缓存与偏好文件

每次发版只需两步:

# 1. 计算新 DMG 的 sha256 shasum -a 256 dist/OpenOats.dmg # 2. 一键更新 Cask 文件 ./scripts/update_homebrew_cask.sh 1.87.2 <sha256>

update_homebrew_cask.sh 会用 Ruby 正则精确替换 Cask 文件中的version和sha256两行,其余配置保持不动,避免手工编辑出错。用户侧的安装体验:

brew tap yazinsai/openoats brew install --cask yazinsai/openoats/openoats

常见问题(FAQ)

Q1:构建报 "no git tag found" 警告?版本号是从 git tag 推导的。请给当前发布提交打上 tag(如v1.87.2),或用APP_VERSION环境变量手动指定。

Q2:security find-identity找不到签名身份?说明本机没有 Developer ID 证书。个人开发者可在 Apple Developer 计划中创建;临时调试请用SKIP_SIGN=1跳过。

Q3:Sparkle.framework 找不到?它是通过 Package.swift 中的依赖拉取的,确认构建日志中没有依赖解析错误即可。

写在最后

回顾整条流水线:环境准备 →build_swift_app.sh构建签名 →make_dmg.sh打包公证 → 冒烟自检 → 更新 Cask 发版。得益于仓库把签名顺序、版本注入、DMG 布局这些繁琐细节全部脚本化,即使是第一次发布 macOS 应用的开发者,也能在 10 分钟内走完整个流程。祝你的第一个 Release 顺利发布!🎉

【免费下载链接】OpenOatsA meeting note-taker that talks back.项目地址: https://gitcode.com/gh_mirrors/op/OpenOats

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询