开发 iOS 应用,不一定非要一台 Mac
认识 EAS Simulator——Expo 推出的新服务,让每位开发者和每个编码 agent 都能在云端拥有一台 iPhone。
中文
复制

全世界近四分之三的桌面设备都不是 Mac。借助 Expo,你本来就可以通过 EAS Build 在任意一台设备上构建 iOS 应用。但在 agentic 开发时代,我们遇到了另一个瓶颈:agent 需要即时反馈,才能持续迭代代码改动。iOS Simulator 只随 Xcode 提供,而 Xcode 只能在 macOS 上运行,所以没有 Mac,你或你的 agent 做的每一次改动都只能拿到真机 iPhone 上验证。EAS Simulator 让这一切不再必要。
从功能上说,EAS Simulator 在云端运行一个模拟器会话,并将其串流到浏览器标签页。这项服务所解锁的东西将改变移动软件的构建方式:任何一台笔记本都能变成 iOS 开发机,任何编码 agent 都能拿到一台真实设备来验证自己的工作,而任何拿到 URL 的人都能和你一起操控同一部手机。
我们的工程师 Keith Kurak 把 EAS Simulator 带到了一个我们谁都没试过的地方:在一台 Windows on ARM 笔记本上运行带 Fast Refresh 的 iOS Simulator。本文介绍 Keith 演示的内容,以及我一直在用来开发应用的五项能力。
更想看视频?精简版在这里:
Keith 演示了什么:在 Windows 机器上做 iOS 开发
以下是 Keith 发布的内容:
Windows on ARM 跑不了 Android Studio,而微软在 Snapdragon X 上砍掉了 Windows Subsystem for Android。那台笔记本上没有任何模拟器或仿真器。现在它有了一个浏览器标签页里的 iPhone,VS Code 里的改动通过 Fast Refresh 直接落到上面。
只需要两条命令。你需要一个面向模拟器的开发构建,因为 release 构建不会热重载:它的 JavaScript 在构建时就固定了。然后用隧道启动 Metro,再启动指向它的会话:
EXPO_UNSTABLE_TUNNEL_V2=1 npx expo start --tunnel
eas simulator:start --platform ios --type agent-device \
--build-id <your-build-id> \
--open-url "<your-scheme>://expo-development-client/?url=<encoded-metro-url>" \
--name "windows hot reload" --non-interactive
这条命令会给你一个 webPreviewUrl。打开它,你的应用就跑在云端 iPhone 上了。改一个文件、保存,改动就出现在设备上。Keith 是在 WSL 里跑的。完整的操作步骤,包括 Expo Go 的版本,都在运行与控制文档里。
光这一点就改变了你能从 Windows 或 Linux 机器上构建什么。但 EAS Simulator 还有五件事你应该知道:
1. 在模拟器上测试相机应用
我正在做一个叫 OpenMulticam 的相机应用。它同时从多个 iPhone 摄像头录制,而测试它一直需要真机,因为模拟器从来没有摄像头。EAS Simulator 的网页预览改变了这一点。它的工具面板里有一个 Camera 区域,打开之后,应用就会收到模拟的摄像头画面。

按下录制、停止,然后打开这条素材。整条相机采集流水线都跑在云端的一台设备上,而你只需在浏览器标签页里操作它。


有两点需要注意。默认画面源是一段动画测试图案,你也可以把电脑里的视频或照片拖进面板当作画面源。你的 app 必须使用标准的 AVFoundation 采集 API,注入才能生效,大多数相机库都是这么做的。
有一个限制需要说明:目前相机面板还是要在浏览器里点击操作,尚未开放给 agent,所以 agent 无法自行注入相机。本文提到的其他功能,agent 都能做。
2. 让 agent 自己验证工作成果
云端 agent 或你本地的编码 agent 可以通过 agent-device 驱动模拟器。Argent 也可以,如果你更习惯 computer use,同样能用。
最快的配置方式是 eas-simulator skill。把它装进 Claude Code、Cursor 或 Codex,告诉 agent 要检查什么,剩下的它全包了:构建 app、启动云端会话、逐个点击页面,然后把截图发回来。完成后你只需查看会话回放,不必自己拉分支再测一遍。
3. 用 URL 把手机分享给团队
预览本身就是一个网站。把 URL 发给同事,他们就能实时看到你在做什么,也能操作模拟器。你、你的同事、你的云端 agent 和本地 agent 可以同时操作同一台设备。
如果你只需要可分享的视图、不需要 agent 控制,有一种会话类型正好满足:
eas simulator:start --platform ios --type web-preview-only --name "design review"
预览还有一个全屏按钮,点开后只留下设备本身。
4. 回放每一次会话,包括 agent 的操作
每次会话都会出现在 expo.dev 上你项目的页面里。

打开一个已完成的会话,你就能看到设备上发生的一切的完整视频,以及每一次交互的时间线。在视频对应的会话里,你可以看到 agent 点击操作 app、测试我要求它测试的功能,每一步都有截图。

我已经开始在 pull request 里用这些链接作为证据。“这是 bug,这是修复,这是回放”,比“相信我,我跑过了”要有说服力得多。
5. 任何框架的应用都能带进来
你的应用不必用 Expo 或 React Native。设备启动时是空白的,你可以上传任何 iOS Simulator 构建产物或 Android APK:SwiftUI、Kotlin、Flutter,任何能在模拟器上跑的东西都行。
eas simulator:exec npx agent-device@latest install com.example.app ./path/to/MyApp.app --platform ios
从哪里开始
EAS Simulator 目前是限量预览,我们正按批次从 waitlist 中放行。
-
加入 waitlist:expo.dev/services/simulators。
-
读文档。Get started 介绍了会话类型,Run and control an app 里有本文提到的 Fast Refresh 配方。
-
交给你的 agent。 安装 eas-simulator skill,让它在一个真实的设备运行时上验证点东西。
如果你想看一篇在自己机器上完整搭建这套流程的教程,告诉我们。我们也很好奇你会怎么用云端模拟器。欢迎在 我们的 Discord 社区的 #eas-simulator 频道里分享你的用例。
常见问题
EAS Simulator 是什么? 这是 Expo 提供的一项服务,在 EAS 基础设施上运行远程 iOS Simulator 或 Android Emulator。你可以通过 CLI、REST API、coding agent 或浏览器来控制它。支持的 iOS 会话包含实时网页预览。目前处于限量预览阶段。
用 Expo 能在 Windows 上构建 iOS 应用吗? 可以。EAS Build 在 Expo 的 Mac 基础设施上编译应用,EAS Simulator 也在那里运行 iOS Simulator。开发构建通过隧道连接 Metro,就能在浏览器里获得 Fast Refresh。CLI 在 WSL 里运行。
能在 iOS Simulator 里测试相机功能吗? 用 EAS Simulator 的网页预览可以。工具面板的 Camera 部分会给应用一路模拟的摄像头画面:默认是动态测试图案,也可以是你拖进去的照片或视频。应用必须使用标准的 AVFoundation 采集 API。
AI agent 能用 EAS Simulator 吗? 可以。Agent 通过 agent-device 或 Argent 来操作设备。eas-simulator skill 会把完整流程教给 Claude Code、Cursor 和 Codex:检查访问权限、构建、开会话、控制设备、取证、清理。
我的应用必须用 Expo 或 React Native 吗? 不必。任何 iOS Simulator 构建或 Android APK 都能用。
EAS Simulator 会话能分享给别人吗? 可以。网页预览就是一个 URL,拿到链接的人都能同时观看并操作同一台设备。不需要 agent 控制的话,用 web-preview-only 类型的会话即可。
相关链接
-
EAS Simulator 文档:https://docs.expo.dev/preview/eas-simulator/introduction/
-
运行并控制应用:https://docs.expo.dev/preview/eas-simulator/run-and-control/
-
eas-simulator skill:https://github.com/expo/skills/tree/main/plugins/expo/skills/eas-simulator
-
agent-device:https://docs.expo.dev/agents/agent-device/
-
serve-sim,网页预览背后的工具:https://github.com/expo/serve-sim
-
Keith 的文章:https://x.com/llamaluvr/status/2094414188181332015
-
OpenMulticam:https://github.com/rami-maalouf/open-multicam