从零构建OpenSuperWhisper:CMake编译whisper.cpp、Cargo构建Rust自动纠错库到xcodebuild出包的完整流程
【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper
OpenSuperWhisper 是一款开源的macOS 语音转写工具(macOS dictation app):按住快捷键说话,Whisper 模型实时把语音转成文字。它由三部分构成:Swift 编写的应用主体、C++ 的 whisper.cpp 语音识别引擎,以及 Rust 编写的自动纠错库。本文将带你从零走通完整构建流程——CMake 配置、Cargo 编译、xcodebuild 打包,一篇看懂这个语音转录项目是怎么"长"出来的。
一、先认识项目结构:三个"零件"如何拼成一个 App
打开仓库,你会看到三个关键目录,它们对应构建流程中的三步:
| 目录/文件 | 角色 | 构建工具 |
|---|---|---|
libwhisper/ | C++ 语音引擎(whisper.cpp 子模块) | CMake |
asian-autocorrect/ | Rust 亚洲语言自动纠错库(autocorrect 子模块) | Cargo |
OpenSuperWhisper/ | Swift 应用源码与 Xcode 工程 | xcodebuild |
两个第三方组件都以 Git 子模块形式引入,定义在 .gitmodules 中:
libwhisper/whisper.cpp—— 本地推理 Whisper 语音转写模型的核心引擎asian-autocorrect—— 中日韩语音输入的自动纠错,转写结果更地道
理解这一点很重要:clone 仓库只是拿到"图纸",子模块里的引擎源码需要单独初始化,这也是新手最容易卡住的第一步。
二、构建前准备:一条命令装齐所有依赖
在 Apple Silicon Mac(macOS 14+)上,准备工作很简单:
git clone https://gitcode.com/gh_mirrors/op/OpenSuperWhisper cd OpenSuperWhisper git submodule update --init --recursive brew install cmake libomp rust ruby gem install xcpretty逐项说明一下:
git submodule update --init --recursive:拉取 whisper.cpp 和 Rust 纠错库源码,漏掉这步后面所有编译都会报错- cmake:用来生成 C++ 引擎的 Xcode 工程
- libomp:OpenMP 运行库,whisper.cpp 推理时需要动态链接它
- rust:编译
autocorrect-swift这个 Rust 动态库 - xcpretty:把 xcodebuild 密密麻麻的输出格式化成人类可读的日志,纯提升体验
依赖全部就绪后,其实只要运行 run.sh 一个脚本就能自动完成下面三步——但了解每一步在做什么,排错时会从容得多。
三、第一步:CMake 编译 whisper.cpp 引擎
run.sh 首先执行的配置命令是:
cmake -G Xcode -B libwhisper/build -S libwhisper含义很简单:以 libwhisper/CMakeLists.txt 为输入,用 Xcode 生成器把 C++ 工程输出到libwhisper/build目录。
这个 CMakeLists 文件里藏着几个精心设计的细节:
cmake_minimum_required(VERSION 3.30):锁定特定版本是为了保证每次生成的 Xcode GUID 一致,避免工程文件反复出现无意义 diffCMAKE_OSX_DEPLOYMENT_TARGET 14.0:与 App 的最低系统要求(macOS Sonoma)对齐GGML_MATMUL_INT8=0编译宏:显式关闭 i8mm 矩阵指令优化——较新的 Xcode 工具链下,特性检测会通过但实际编译会失败,这个宏就是为规避该问题而设
CMake 配置成功后,whisper.cpp 会作为 Xcode target 参与 App 的统一构建,无需单独执行 make。
四、第二步:Cargo 构建 Rust 自动纠错库
Rust 库 asian-autocorrect 需要单独编译,产物是一个动态库。run.sh 中的构建命令如下:
CARGO_PROFILE_RELEASE_LTO=true \ CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 \ CARGO_PROFILE_RELEASE_STRIP=symbols \ CARGO_PROFILE_RELEASE_PANIC=abort \ cargo build -p autocorrect-swift --release \ --target aarch64-apple-darwin \ --manifest-path=asian-autocorrect/Cargo.toml四个环境变量都是"瘦身优化",最终产出的 dylib 更小:
| 参数 | 作用 |
|---|---|
LTO=true | 链接期优化,跨模块消除冗余代码 |
CODEGEN_UNITS=1 | 单代码生成单元,换取更优的编译结果 |
STRIP=symbols | 剥离符号表,减小体积 |
PANIC=abort | panic 直接终止进程,省略展开栈逻辑 |
编译完成后还有两个"关键收尾":
- 用
install_name_tool把动态库的 ID 改成@rpath/libautocorrect_swift.dylib,让 App 能通过 rpath 稳定找到它; - 用
codesign --force --sign -做 ad-hoc 签名,否则 macOS 会拒绝加载未签名的第三方动态库。
另外,libomp.dylib也会从 Homebrew 复制到构建目录并做同样的改 ID + 签名处理——这解释了为什么依赖里必须有brew install libomp。
五、第三步:xcodebuild 打包出 App
最后一步由 xcodebuild 完成(run.sh 中已封装好完整参数):
xcodebuild -scheme OpenSuperWhisper \ -configuration Debug -jobs 8 \ -derivedDataPath build \ -destination 'platform=macOS,arch=arm64' \ CODE_SIGNING_ALLOWED=NO build几个值得注意的参数:
-destination 'platform=macOS,arch=arm64':当前版本仅支持 Apple Silicon,指定 arm64 避免 Intel 目标下 whisper.cpp 编译失败CODE_SIGNING_ALLOWED=NO:本地构建跳过签名,省去证书配置;正式发行才需要签名-derivedDataPath build:把产物统一放到build/目录,方便定位
配置run.sh build只构建不启动;直接运行./run.sh则构建成功后自动去掉隔离属性(quarantine)并启动 App,可以立刻按住快捷键体验语音转写。
六、发行级构建:签名、公证与出 DMG
本地跑通只是起点。若要发布正式版,项目提供了两条清晰的脚本链路:
- notarize_app.sh:Release 构建 + 代码签名 + Apple 公证,一条命令完成,用法见 docs/release_build.md
- make_release.sh:一键发布流水线——更新 Xcode 工程版本号、调用公证脚本、生成
OpenSuperWhisper.dmg及其 SHA256 校验和、打包 dSYM 符号文件、打 git tag,最后输出可直接提交 Homebrew 的 cask 片段
也就是说,从./run.sh的日常开发到make_release.sh <版本> <签名身份>的正式发版,整条工具链在仓库内是完整闭环的。
七、常见问题速查
1. CMake 配置失败,提示找不到 whisper.cpp?十有八九是子模块没初始化,回到仓库根目录执行git submodule update --init --recursive。
2. 链接时报libomp.dylib缺失?执行brew install libomp,run.sh 会从其 Homebrew 路径拷贝到构建目录。
3. xcodebuild 在 Intel Mac 上失败?这是预期行为:whisper.cpp 的优化编译目标限定 arm64,请在 Apple Silicon 机器上构建。
4. 想看 CI 是怎么构建的?参考 .github/workflows/build.yml,CI 与本地脚本使用同一套流程,是排障时最好的对照答案。
结语
回顾整条链路:CMake 负责 C++ 引擎,Cargo 负责 Rust 纠错库,xcodebuild 负责 Swift 应用本体,三者通过run.sh串成一条顺滑的开发体验。理解了这条"混合语言"构建流水线,你不仅能为 OpenSuperWhisper 贡献代码,也能把同样的思路迁移到任何 C/C++/Rust/Swift 混合架构的 macOS 项目中。
【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考