这里每天分享一个 iOS 的新知识,快来关注我吧
前言
用 Claude Code 或者 Cursor 改 UI,每次都要自己盯着模拟器看效果、再描述给 AI——AI 看不见模拟器,只能靠你转述。
serve-sim[1] 解决的就是这个问题:把 iOS 模拟器的画面直接串流到浏览器,同时暴露控制接口,让 AI 工具能直接"看见"并操控模拟器,不再需要你中间传话。
serve-sim 是什么
Evan Bacon(Expo[2] 框架核心开发者)写的一个命令行工具,定位是"模拟器版的 npx serve"。
# → Preview at http://localhost:3200
一行命令,自动检测当前已启动的模拟器,在浏览器里打开一个实时预览页面。

底层原理:用 Swift 写的小帮手进程通过 xcrun simctl io 抓取模拟器帧缓冲,转成 MJPEG 流 + WebSocket 控制通道,再套一层 React 写的预览 UI 暴露出来。不需要给 App 打额外的插桩代码,任何 iOS 项目都能用。
主要功能
实时画面:60 FPS MJPEG 流,延迟低,在浏览器里看和本地看基本一致。
手势控制:在浏览器里可以直接滑动、点击,从底部上滑回 Home。按住 Option 键可以模拟双指捏合缩放。键盘输入也会转发给模拟器,包括 CMD+SHIFT+H 这种快捷键。
文件拖放:直接把视频或图片拖到浏览器窗口,就能把文件丢进模拟器。
日志转发:模拟器日志实时显示在浏览器里,方便 AI 工具读取,不用另开终端看 Console。
多设备支持:iPhone、iPad、Apple Watch 都能连,启动多个模拟器的话可以同时监控。

和 AI 工具集成
Claude Code Desktop:在项目里创建 .claude/launch.json:
"version": "0.0.1",
"configurations": [
{
"name": "ios",
"runtimeExecutable": "npx",
"runtimeArgs": ["serve-sim"],
"port": 3200
}
]
}
这样 Claude Desktop 启动时会自动拉起 serve-sim,AI 就能通过 MCP browser-use 工具直接读取模拟器截图和日志,不用你手动描述 UI 状态了。
Expo 项目:可以集成进 Metro dev server,访问 http://localhost:8081/.sim 直接看模拟器画面,和热更新一个端口。
常用命令
npx serve-sim
# 指定设备
npx serve-sim "iPhone 16 Pro"
# 后台运行(daemon 模式)
npx serve-sim --detach
# 不开 web UI,只跑流
npx serve-sim --no-preview
# 查看正在跑的流
npx serve-sim --list
# 停掉所有
npx serve-sim --kill
# 发送手势(JSON 格式)
serve-sim gesture '{"type":"tap","x":200,"y":400}'
# 模拟内存警告
serve-sim memory-warning
# 切换 CoreAnimation 调试开关
serve-sim ca-debug slow-animations on
依赖
macOS + Xcode Command Line Tools(需要 xcrun simctl)+ Node.js 18+,不要求安装 bun。
最后
你会让 AI 直接"看"着模拟器帮你改 UI 吗?评论区聊聊你现在的 AI 辅助开发工作流~
参考资料
这里每天分享一个 iOS 的新知识,快来关注我吧
夜雨聆风