告别 Xcode 模拟器卡顿与繁琐:Baguette 无头 iOS 模拟器管理器与 Web UI 深度体验
在 iOS 开发与自动化测试领域,官方的 Simulator.app 长期以来让开发者又爱又恨:它必须占用沉重的桌面图形窗口、多设备并发性能消耗巨大、无法原生透传 Mac 摄像头、且在远程协作或 CI/CD 无头(Headless)环境下极难管理。此外,随着 AI Agent(如 Claude Code、Cursor 等)在编程与自动化测试中的普及,如何让 AI 高效、低延迟地感知并操作 iOS 界面,成为了一个迫切的需求。
今天介绍一个堪称“降维打击”的开源极客神器 —— Baguette(法棍 🥖)。它是一个完全无需打开 Xcode 或 Simulator.app 的 无头(Headless)iOS 模拟器管理器 + 独立 Web UI。
先上一段官方实操与多端流式推流演示:
1. Baguette 是什么?
Baguette(tddworks/baguette)由纯 Swift 编写,专为 Apple Silicon 和 macOS 打造。它直接链接 Xcode 的私有框架(SimulatorKit、CoreSimulator、IOSurface、VideoToolbox 等),实现对 iOS 模拟器的底层直控。
通过一个轻量的 CLI 工具(baguette)和一个内嵌的高性能 Web 服务器,你可以在纯终端或任何现代浏览器中,获得完整的 iOS 模拟器控制体验。

2. 核心硬核特性剖析
2.1 60 FPS 极速低延迟画面串流(Frame Streaming)
- 支持 MJPEG 与 H.264 / AVCC 流式输出,通过 WebSocket 或 stdout 传输;
- 支持动态调节分辨率、帧率与码率;
- 在 Web 端实时渲染 iOS 设备外壳(Bezel)与手势轨迹,甚至支持在浏览器中一键录制生成带设备外壳的高清 MP4 演示视频。
2.2 原生 Host-HID 物理触控与按键注入
Baguette 绕过了传统的 UI 窗口,直接调用 SimulatorKit 的私有符号和 IOHIDDigitizerDispatch:
- 全面手势支持:单指轻点、双击、滑动、双指捏合(Pinch)、旋转与拖拽;
- 系统级手势:支持底部 Home 条上滑、多任务切换器(App Switcher)、锁屏与通知中心下拉;
- 实体物理按键:音量加减、锁屏/电源键、Action Button,甚至 Apple Watch 的数码表冠与侧边按键;
- 免 Dylib 注入:无需复杂的
DYLD_INSERT_LIBRARIES注入即可原生触发 iOS 真实的手势识别器。
2.3 黑科技:Mac 摄像头直通模拟器(Webcam Pipe)
在以往,模拟器里调试相机相关功能(如二维码扫描、身份证识别、AR 或实时滤镜)极为痛苦。
- Baguette 引入了虚拟相机管道,将 Mac 物理摄像头(或外接相机)采集的 BGRA 帧通过共享内存环形缓冲区(Ring Buffer)直接泵入模拟器;
- 模拟器内的
AVCaptureVideoPreviewLayer、AVCapturePhotoOutput和UIImagePickerController能够像真实设备一样接收实时相机画面!
2.4 设备农场(Device Farm)多开并行管理
访问 http://localhost:8421/farm,你可以以网格墙(Grid / Wall)的形式在一屏中同时监控并操控多台不同型号、不同 iOS 版本的模拟器。点击任意一台设备即可进入低延迟全功能控制页。
2.5 AI Agent 友好的 UI 树解析(Accessibility Tree)
运行 baguette describe-ui --udid <UDID>,它能通过私有 AccessibilityPlatformTranslation 框架,秒级导出当前界面的无障碍 JSON 树:
- 输出每个 UI 元素的
role、label、value、identifier以及精确的点坐标(Frame); - 导出的坐标可以直接无缝管道输入到
baguette tap执行点击; - 这意味着 AI Agent 可以闭环执行“截屏 -> 解析 UI 树 -> 思考判定 -> 派发物理手势”的全自动化 App 交互与回归测试!
3. 快速上手与 CLI 常用指南
3.1 一键安装(Homebrew)
# 需要在 Apple Silicon Mac 原生终端下执行
brew install baguette
3.2 启动 Web 控制台
# 启动本地 Web 服务器
baguette serve
# 浏览器访问单设备管理与流式面板
open http://localhost:8421/simulators
# 浏览器访问多设备农场
open http://localhost:8421/farm
3.3 终端无头自动化命令示例
# 1. 列出当前所有模拟器
baguette list
# 2. 无头冷启动指定设备
baguette boot --udid <UDID>
# 3. 点击指定坐标 (点坐标,支持任意屏幕缩放)
baguette tap --udid <UDID> --x 219 --y 478 --width 438 --height 954
# 4. 旋转设备方向
baguette orientation --udid <UDID> landscape-left
# 5. 生成 App Store 提交规范尺寸的截图与 10 秒高清视频
baguette screenshot --udid <UDID> --size appstore-6.9 -o hero.png
baguette record --udid <UDID> --size appstore-6.9 --duration 10 -o demo.mp4
# 6. 导出当前界面的无障碍元素结构 (JSON)
baguette describe-ui --udid <UDID>
4. 架构设计与工程之美
Baguette 仓库有着极其严格的工程素养:
- TDD 领域驱动设计:严格将 Domain、Infrastructure 与 App 分层;
- 460+ Swift 自动化测试用例:对输入、屏幕流、无障碍、相机管道等全部外部端口设计了完整的 Mock 抽象,
swift test在不需要任何真实模拟器的情况下即可跑完全部自动化测试套件; - 现代化技术栈:采用 Swift 6.1+、Hummingbird 高性能异步 Web 框架与 Metal / VideoToolbox 硬件加速。
5. 总结
无论是用于日常摆脱臃肿的 Xcode 模拟器、搭建多设备 CI/CD 自动化流水线,还是配合 AI Agent(如 Claude Code / Cursor)打造自主探索与测试 App 的智能体,Baguette 都是目前 Apple 生态中极具创新力与实用价值的开源神器。
项目链接
- GitHub 开源仓库:tddworks/baguette