入门 Zed Industries 2026-09-14 17:42:20 · 0 阅读

第144章 在 macOS 上从源码构建 Zed 编辑器

代码仓库

克隆 Zed 代码仓库

依赖项

  • 安装 rustup

  • 从 macOS App Store 或 Apple Developer 网站安装 Xcode。从 Apple Developer 网站下载需要开发者账户。

安装完成后启动 Xcode,并安装 macOS 组件(默认选项)。

sh xcode-select --install

  • 确保 Xcode 命令行工具指向新安装的 Xcode 副本:

sh sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -license accept

sh brew install cmake

从源码构建 Zed

安装好依赖项后,可使用 Cargo 构建 Zed。

进行调试构建:

cargo run

进行发布构建:

cargo run --release

运行测试:

cargo test --workspace

视觉回归测试

Zed 包含视觉回归测试,用于截取真实 Zed 窗口的屏幕截图,并与基准图像进行比对。这些测试需要在 macOS 上授予屏幕录制权限。

前置条件

必须授予终端屏幕录制权限:

  1. 运行一次视觉测试执行器 - macOS 会弹出权限请求
  2. 或手动操作:系统设置 > 隐私与安全性 > 屏幕录制
  3. 启用你的终端应用(例如 Terminal.app、iTerm2、Ghostty)
  4. 授予权限后重启终端

运行视觉测试

cargo run -p zed --bin zed_visual_test_runner --features visual-tests

基准图像

基线图片存放在 crates/zed/test_fixtures/visual_tests/ 中,但已被 gitignore,以避免仓库体积膨胀。你必须在运行测试前先在本地生成它们。

初始设置

在做任何 UI 改动之前,先从一个已知良好的状态生成基线图片:

git checkout origin/main
UPDATE_BASELINE=1 cargo run -p zed --bin zed_visual_test_runner --features visual-tests
git checkout -

这会生成反映当前预期 UI 的基线。

更新基线

当 UI 改动是有意为之时,在改动之后更新基线图片:

UPDATE_BASELINE=1 cargo run -p zed --bin zed_visual_test_runner --features visual-tests

注意:未来基线可能会存放在外部。目前它们仅保存在本地,以保持 git 仓库轻量。

对已发布构建进行采样

如何从已发布(非 dev)的 Zed 实例获取符号化后的 CPU profile。当 Zed 占用大量 CPU 时可以使用这个方法。

macOS 的发布二进制文件剥离了本地符号,因此 sample 和 Instruments 对大多数帧只会显示原始地址。每个版本的调试符号都有归档:script/bundle-mac 会在剥离符号前把 zed.dwarf 上传到 Sentry。

问题发生时

  • 运行 sample Zed 10 -f zed-sample.txt(如果使用 Preview 或 Nightly,请相应调整进程名)。
  • 获取确切的构建版本:在命令面板中输入 {#action zed::About},复制版本号和 commit。

可以把 zed-sample.txt 连同确切的版本信息一起发给 Zed 团队。

事后

这一步可以由 Zed 团队成员完成。

  • 在采样输出底部的 Binary Images 部分找到二进制文件的 UUID。
  • 用该 UUID 在 Sentry 项目的 Debug Files 页面搜索并下载对应的 zed.dwarf
  • 解析地址: atos -o zed.dwarf -l <load address> <address...> 采样输出中每个未解析的帧都会打印其 load address 和绝对地址。

若要在本机对发布版进行完整带符号的性能剖析,请下载对应的 zed.dwarf,将其转换为 Spotlight 可索引的 .dSYM 包,然后重新运行 sample

mkdir -p Zed.dSYM/Contents/Resources/DWARF
cp zed.dwarf Zed.dSYM/Contents/Resources/DWARF/zed

这样堆栈帧会自动解析,包含文件和行号信息。

故障排除

Metal shader 编译错误

error: failed to run custom build command for gpui v0.1.0 (/Users/path/to/zed)`**

xcrun: error: unable to find utility "metal", not a developer tool or in PATH

尝试运行 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

如果使用 macOS 26,请运行 xcodebuild -downloadComponent MetalToolchain。 若该命令失败,请执行 xcodebuild -runFirstLaunch 后再次尝试下载工具链。

Cargo 报错称依赖项使用了不稳定特性

尝试运行 cargo cleancargo build

错误:找不到 'dispatch/dispatch.h' 文件

如果遇到类似以下错误:

src/platform/mac/dispatch.h:1:10: fatal error: 'dispatch/dispatch.h' file not found

Caused by:
  process didn't exit successfully

  --- stdout
  cargo:rustc-link-lib=framework=System
  cargo:rerun-if-changed=src/platform/mac/dispatch.h
  cargo:rerun-if-env-changed=TARGET
  cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_aarch64-apple-darwin
  cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_aarch64_apple_darwin
  cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS

该文件属于 Xcode。请确保已安装 Xcode 命令行工具,并且路径设置正确:

xcode-select --install
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

此外,设置 BINDGEN_EXTRA_CLANG_ARGS 环境变量:

export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=$(xcrun --show-sdk-path)"

然后清理并重新构建项目:

cargo clean
cargo run

测试因 Too many open files (os error 24) 而失败

此错误可能是由操作系统资源限制引起的。安装并使用 cargo-nextest 运行测试可解决该问题。

  • cargo install cargo-nextest --locked
  • cargo nextest run --workspace --no-fail-fast

技巧与提示

避免频繁重新构建

如果 Zed 持续重新构建根 crate,可能是你在开发版本中打开了 Zed 自身的代码库。

这会导致问题,因为 cargo run 导出一系列环境变量,这些变量会被运行在 Zed 开发版本中的 rust-analyzer 捕获。这些环境变量随后传递给 cargo check,导致部分依赖 crate 的构建缓存失效。

为避免此问题,请针对其他项目运行已构建的二进制文件,例如 cargo run ~/path/to/other/project

加速验证过程

如果你频繁构建 Zed,macOS 可能会不断对新构建进行验证,从而增加每次迭代的几秒钟耗时。

要修复此问题,可以执行以下操作:

  • 运行 sudo spctl developer-mode enable-terminal 以在系统设置中启用“开发者工具”面板。
  • 在系统设置中搜索“Developer Tools”,并将你的终端(如 iTerm 或 Ghostty)添加到“允许应用使用开发者工具”列表中。
  • 重启终端。

感谢 nextest 开发团队发布了这项资源

评论 (0)