ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

浏览器里操控iOS模拟器:Baguette serve实时画面与交互控制完全指南

浏览器里操控iOS模拟器:Baguette serve实时画面与交互控制完全指南 浏览器里操控iOS模拟器Baguette serve实时画面与交互控制完全指南【免费下载链接】baguetteHeadless control for Apples Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm项目地址: https://gitcode.com/gh_mirrors/baguette/baguetteBaguette 是一款 macOS 上的 iOS 模拟器无头控制工具其中的baguette serve命令只需一行就能在浏览器里打开一个本地 Web 服务实时画面以最高 60 fps 推送到页面你用鼠标点击、拖拽、双指捏合手势就会真实地注入到 iOS 模拟器中——全程无需打开 Xcode 或 Simulator.app。为什么需要 Baguette serve传统上驱动 iOS 模拟器要么打开 Simulator.app 手动点点点要么写simctl脚本却无法看到画面。Baguette 把两件事合二为一️一个自包含的 Web UI内置 HTML JS 页面无前端构建依赖⚡主机侧手势注入直接调用私有 SimulatorKit / CoreSimulator 框架tap、swipe、多指手势、硬件按键、键盘输入全部可下发实时画面流模拟器帧缓冲编码后通过 WebSocket 推给浏览器最高 60 fps。它专门面向 iOS 26 及以上系统——在这些版本上idb和AXe依赖的旧 HID 调用已经失效而 Baguette 换用了新的 5 参数 HID 调用。一键安装与启动前提Apple Silicon 的 Mac安装 Xcode 26macOS 15。brew install baguette然后启动 Web 服务baguette serve # 默认监听 http://127.0.0.1:8421/simulators浏览器打开http://127.0.0.1:8421/simulators即可看到设备列表页。全部启动参数如下来源 commands.md参数默认值作用--port8421监听端口--host127.0.0.1绑定网卡--allowed-hosts无额外信任的 Host/Origin可重复*.example.com可匹配子域--plugin-dir无附加插件目录可重复--no-plugins关忽略所有已安装插件命令实现非常薄全部逻辑在 ServeCommand.swift 中启动后就是常驻的 HTTP WebSocket 服务器。认识三个核心页面baguette serve提供三个最实用的页面对应不同使用场景1. 设备列表页/simulators打开的默认页面。列出所有可运行的模拟器每台设备旁有Boot / Shutdown按钮一键开机关机。也提供/simulators.json返回与baguette list --json相同的结构化数据方便脚本消费。2. 焦点模式页/simulators/UDID单台设备的驾驶舱带真机边框bezel的实时画面、工具栏和按钮行。鼠标操作直接映射为模拟器手势页面还集成了外观、对比度、状态栏等控制。这一页由浏览器端的Baguette JS SDK驱动详见 baguette-sdk 文档。3. 设备农场页/farmopen http://127.0.0.1:8421/farm多设备仪表盘所有已启动的模拟器同屏展示支持Grid / Wall / List三种视图、按平台/运行时/状态/关键字过滤、批量开机与关机。点击任意瓦片即可将其聚焦右侧焦点面板切换到全画质预览并可继续交互。这是多设备 QA 巡检和分享一个 URL 给同事挑设备测的理想入口完整设计见 device-farm 文档。实时画面60 fps 流是怎么实现的每台被观看的设备对应一条 WebSocket/simulators/UDID/stream。它同时承担两个方向服务器 → 浏览器每条二进制消息是一帧编码画面支持mjpeg原始 JPEG与avccH.264含 avcC 配置、关键帧、增量帧、JPEG 种子帧四种标签浏览器 → 服务器文本 JSON 消息用于流控set_fps、set_bitrate、set_scale、force_idr、snapshot和下发手势。设备农场页用这套机制做出了很聪明的带宽分配未聚焦的瓦片跑8 fps / 600 kbps缩略档被聚焦的设备升到60 fps / 6 Mbps全画质档——切换只需通过该设备的 WebSocket 发送普通的流控消息即可。两个值得了解的特性连接即会话没有额外的事件通道或注册表WebSocket 存活期间独占流与模拟器句柄关闭连接即停止采集天然防止资源泄漏⚙️热调参帧率、码率、缩放比都可以流式运行中随时改无需重建编码器或重连set_fps甚至会同步更新 H.264 的期望帧率。协议细节完整记录在 wire.md路由总表见 serve.md。鼠标如何变成手指在焦点模式页或农场页的焦点面板中输入只发给预览画面本身映射关系如下鼠标操作模拟器手势单击单指 tap点击并拖拽单指 swipe / 跟手拖动⌥ Option 拖拽双指捏合以屏幕中心镜像⌥ Option⇧ Shift 拖拽双指平行 pan⌃ Ctrl 滚轮 / 触控板捏合流式捏合页面还渲染了硬件按键Home、Lock、电源、音量键等按住可控制按压时长。在 CLI 侧同样的手势走baguette tap/baguette input坐标一律使用设备点device points可从baguette describe-ui --udid UDID或/simulators/UDID/screenshot.jpg配套接口获取。安全设计默认只信本机baguette serve默认只信任 loopback 来源的Host/Origin因此本机浏览器直接访问畅通无阻经由反向代理访问时请求会收到403 forbidden origin解决办法是用--allowed-hosts sim.example.com可重复支持*.example.com通配子域信任代理主机名被允许的 Origin 同时会获得 CORS 头与预检响应。插件调用不走这套 Origin 信任而是使用每次运行独立签发的授权per-run grant见 plugins 文档。进阶把模拟器嵌进你自己的页面如果不想用 Baguette 自带的页面官方 JS SDK 只有两行核心 APIconst sim await Baguette.use({ host, udid, send, log }); sim.mount(document.getElementById(host));SDK 会拉取/simulators/UDID/definition.json设备身份、屏幕矩形、边框图、按键布局自动装配出边框、屏幕、按键等部件。之后你可以直接sim.screen.tap({x, y})、sim.screen.swipe({...})、sim.button(powerButton).press({hold: 1.5})全部走与页面相同的手势协议。注意SDK 不自己开 WebSocket传输生命周期归页面所有。除了页面服务器还暴露了一棵扁平的 REST 资源树无/api/前缀UDID 恒在路径中格式即扩展名例如screenshot.jpg、input、logsWebSocket 实时日志、hingeiPhone Duo 折角等完整路由表见 serve.md。常见问题速查端口被占用换--port 9000。想从局域网访问用--host 0.0.0.0 --allowed-hosts 你的主机名并确保理解信任边界。改了 UI 不想重编译把BAGUETTE_WEB_DIR指向Sources/Baguette/Resources/Web/后重载浏览器即可热更新。Simulator.app 被别处打开后关窗被serve驱动的设备会随窗口关闭而失联启动时 Baguette 会给出警告。参考文档服务路由总表docs/serve.md手势与流控协议docs/wire.md全部命令参考docs/commands.md设备农场docs/features/device-farm/README.md浏览器 JS SDKdocs/features/baguette-sdk/README.md命令行帧流docs/features/stream/README.md架构说明docs/ARCHITECTURE.md【免费下载链接】baguetteHeadless control for Apples Simulators — 3D models, taps, swipes, multi-finger gestures, 60 fps streaming, and a multi-device farm项目地址: https://gitcode.com/gh_mirrors/baguette/baguette创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表