电脑能写 Expo 代码,却在打开 iOS 模拟器时被系统拦住。
最快解法:先用 Windows 加真实 iPhone 学基础,再按课程要求补上云端构建或远程 Mac,不必一开始买 Mac。

01

谁适合按这条路线开始

这篇文章适合只有 Windows 电脑、准备使用 Expo 学习 iOS 应用开发的零基础学生。
如果你正在上移动开发课程,需要完成 iOS 演示、模拟器截图,或已经被原生依赖和 Xcode 报错卡住,下面的分流判断会更有用。

先记住一个边界:Windows 可以完成 Expo 项目的代码编写、基础预览和云端 iOS 构建,但不能在本机运行 iOS 模拟器,也不适合处理依赖 Xcode 的本地原生调试。Expo 官方的创建项目说明确认,macOS、Windows 和 Linux 都支持 Expo 项目开发。

02

先把“写代码、预览、构建”分成三件事

很多新手问“Expo 开发 iOS 需要什么电脑”,其实把三个环节混在了一起。

你可以把它们理解成上课写作业、拿实验设备试运行、最后打包交作业:

  • 写代码:在 Windows 上编辑 JavaScript 或 TypeScript,安装依赖,启动开发服务器。
  • 基础预览:通过 Expo Go 或真实设备查看页面和交互。
  • 原生构建与调试:生成包含自定义原生代码的应用,检查 iOS 编译日志,使用模拟器或 Xcode。

第一件事对电脑要求最低。第二件事取决于你有没有真实设备。第三件事才会明显依赖 macOS 环境。

例如,你写了一个登录页面、列表页和简单导航。只要项目使用 Expo Go 已经包含的能力,就可以在 Windows 上开发,再用真实 iPhone 扫描二维码预览。这个阶段不应该因为“目标是 iOS”就立刻购买 Mac。

Windows 能完成什么

✅ 创建 Expo 项目并修改页面布局。
✅ 安装常见 JavaScript 依赖。
✅ 使用 Expo Go 查看支持范围内的功能。
✅ 通过云端服务发起 iOS 开发构建或生产构建。
✅ 使用 Android 真机或模拟器完成大量通用交互测试。

Windows 不能直接完成什么

❌ 安装并运行本地 iOS 模拟器。
❌ 使用本机 Xcode 检查 iOS 原生编译错误。
❌ 通过 npx expo run:ios 在本机编译并启动 iOS 工程。
❌ 在没有 iPhone 的情况下,独立完成所有真实 iOS 设备验证。

Expo 的官方 iOS 模拟器文档明确写出,iOS 模拟器只能安装在 macOS 上;如果使用 Windows 或 Linux 开发 iOS 应用,需要准备真实 iOS 设备。

03

基础预览阶段:Expo Go 足够吗?

如果你目前只是学习页面、状态管理、路由、表单和基础网络请求,Expo Go 通常是最快的起点。它更像一个已经装好许多常用实验器材的“公共实验盒”,你把 JavaScript 代码放进去,就能快速看到结果。

在 Windows 上,常见流程是:

  1. 安装 Node.js、代码编辑器和项目依赖。
  2. 在项目目录启动开发服务器。
  3. 将 Windows 电脑和 iPhone 连接到同一局域网。
  4. 在 iPhone 安装 Expo Go。
  5. 扫描终端或浏览器显示的二维码。
  6. 修改代码,观察页面热更新。

同一网络并不只是形式要求。电脑负责提供开发服务器,手机需要访问电脑的地址。如果电脑连接校园网、手机使用移动数据,或者校园网络隔离了设备之间的访问,二维码可能能扫开,但项目加载失败。

这时可以先检查:

  • Windows 防火墙是否拦截了开发服务器。
  • 电脑和手机是否连接同一个 Wi-Fi。
  • 校园网是否禁止设备互相访问。
  • 是否需要切换连接模式或使用可访问的隧道方式。
  • 项目终端是否仍在运行。

提醒:二维码能打开,只说明手机找到了开发服务器,不代表项目中的每个原生功能都被 Expo Go 支持。看到页面运行,不等于已经完成 iOS 真机验收。

真实 iPhone 还有一个优势:它能告诉你触摸、相机、键盘、权限弹窗和实际屏幕显示是否正常。但它不能模拟所有设备尺寸,也不能替代 Xcode 对原生错误的诊断。

04

什么时候会从 Expo Go 卡到开发构建?

最常见的转折点是安装了一个需要原生代码的库。

可以把 Expo Go 想成学校统一发放的实验盒。盒子里只有固定器材。你在 JavaScript 中调用一个没有装进盒子的原生功能,代码可能能够安装,页面也可能启动,但运行到具体功能时就报错。

Expo 官方的开发构建 FAQ说明,Expo Go 只包含固定的原生库;如果项目使用未被包含的原生库,就需要创建自己的开发构建。相关的第三方库兼容说明也建议,正式项目使用开发构建,而不是把 Expo Go 当成完整生产开发环境。

典型触发条件包括:

  • 安装需要自定义原生代码的第三方库。
  • 修改应用名称、图标、启动页等原生配置。
  • 使用需要 iOS 原生权限或工程配置的功能。
  • 课程要求生成自己的 iOS 应用,而不是在公共 Expo Go 中预览。
  • 需要查看某个原生模块在 iOS 上的真实行为。

开发构建就像给你的项目单独定制一个实验盒。它可以包含项目所需的原生库,也能使用更接近正式应用的配置。Expo 的开发构建入门文档说明,开发构建可以在本地编译,也可以使用云端构建;使用云端构建时,不需要在本机安装原生构建工具,并且可以从任意操作系统发起 iOS 构建。

但要注意:能生成开发构建,不等于能在 Windows 上查看所有 iOS 原生问题。

如果云端构建失败,你通常可以根据构建日志修正配置。如果应用已经生成,但在某个 iOS 原生功能上崩溃,Windows 仍然缺少本地 Xcode 工具链,排查效率会明显下降。

05

iOS 模拟器、真实 iPhone 和远程 Mac怎么选?

iOS 模拟器主要解决三个问题:没有真机时先运行应用、检查不同设备尺寸、配合 Xcode 查看调试信息。它并不完全等同于真实 iPhone。官方的设备运行说明提醒,模拟器运行在 Mac 上,不能完整复制真实设备的性能和硬件特征,最终仍应使用真实设备验证。

Apple 的Xcode 系统要求页面则提供了 Xcode 与 macOS、iOS SDK、模拟器之间的对应关系。也就是说,不能简单地把“安装一个模拟器”理解为下载普通软件;它依赖 macOS、Xcode 和匹配的系统组件。

你的学习任务 Windows 加真实设备 云端构建 远程 Mac
编写页面和业务逻辑 ✅ 适合 ❌ 不是主要用途 ✅ 适合
Expo Go 基础预览 ✅ 有 iPhone 时方便 ❌ 不能替代实时预览 ✅ 可辅助
没有 iPhone 时查看 iOS 页面 ❌ 受限 ⚠️ 只能生成构建结果 ✅ 可使用 iOS 模拟器
检查多种屏幕尺寸 ⚠️ 设备数量有限 ❌ 不负责模拟器操作 ✅ 适合
处理原生库构建错误 ❌ 缺少本地 Xcode ⚠️ 可看云端日志 ✅ 可在 macOS 中排查
课程要求模拟器截图 ❌ 无法本机完成 ❌ 通常不能直接操作 ✅ 更匹配
发布前生成 iOS 构建 ✅ 可发起任务 ✅ 适合 ✅ 可本地处理

这张表的关键不是“哪种方式最好”,而是看课程要求卡在哪一格。

如果老师只要求展示一个页面和基本交互,Windows 加真机通常已经够用。如果课程要求模拟器截图、指定设备尺寸,或者要你提交 Xcode 日志,远程 Mac 的价值就不在“电脑配置更高”,而在于它提供了 Windows 缺少的 macOS 工具链。

你可以先查看远程 Mac 学习环境的连接方式,再根据课程周期判断是否需要临时使用,而不是把一次短期作业变成长期购机。

06

云端构建能替代 Mac 到什么程度?

云端构建解决的是“在哪里编译应用”的问题,不会自动解决“在哪里观察和调试应用”的问题。

EAS Build 的官方构建说明确认,iOS 构建运行在云端的 macOS 构建环境中。你可以在 Windows 上提交项目,等待云端生成 iOS 构建产物。EAS Submit 的iOS 提交流程也说明,提交命令可以在 Windows、Linux 和 macOS 上运行。

因此,Windows 用户可以按照下面的方式推进:

  1. 在 Windows 上创建并运行 Expo 项目。
  2. 先用 Expo Go 或 Android 环境检查页面逻辑。
  3. 安装原生库前,确认它是否支持 Expo Go。
  4. 如果不支持,创建开发构建配置。
  5. 使用云端服务发起 iOS 构建。
  6. 将构建安装到可用的 iPhone,或交给课程测试人员。
  7. 如果仍有 iOS 原生错误,再转到远程 Mac 查看模拟器和 Xcode 日志。

云端构建比较适合“我要得到一个 iOS 安装包”或“我要验证项目能否完成构建”。它不适合完全替代以下工作:

  • 在不同 iPhone 模拟器尺寸之间快速切换。
  • 观察 Xcode 中具体的编译阶段和原生堆栈。
  • 修改 iOS 原生目录后立即反复编译。
  • 复现只在模拟器或某个 iOS 系统版本出现的问题。
  • 完成本地原生代码学习。

如果只是课程项目,建议先问清楚老师验收的是“能安装运行”,还是“必须在模拟器中演示”。这两个要求会直接改变你的电脑路线。

07

给新手的 5 步判断法

第 1 步:先确认课程交付物

把老师的要求拆成具体动作:

  • 是否只需要展示页面?
  • 是否必须提供 iOS 模拟器截图?
  • 是否要提交 iOS 安装包?
  • 是否要求使用 Xcode 日志?
  • 是否包含原生模块或指定 iOS 功能?

不要只看课程名称。真正决定设备需求的是最后要交什么。

第 2 步:检查项目是否停留在 Expo Go 范围内

查看项目安装的库。若功能只使用 Expo SDK 中已经支持的能力,先用 Expo Go 验证。若加入需要自定义原生代码的库,就不要继续反复扫描二维码,而应切换到开发构建思路。

Expo 的自定义原生代码说明指出,Expo Go 只能访问已包含在 Expo SDK 中的原生库,开发构建则可以加入项目需要的原生代码或配置。

第 3 步:确认你有没有真实 iPhone

有 iPhone:可以在 Windows 上完成大量基础测试。
没有 iPhone:你仍然能写代码和发起云端构建,但 iOS 运行结果需要模拟器、远程设备或其他测试者协助确认。

不要因为 Android 模拟器运行正常,就直接推断 iOS 页面也完全正常。字体、权限、返回手势和系统弹窗都可能存在差异。

第 4 步:判断问题属于代码层还是原生层

如果按钮没有反应、列表数据错误、页面布局错位,通常先检查 JavaScript 或 TypeScript 代码。
如果出现 Pod、签名、原生模块、编译阶段或 Xcode 日志相关错误,就已经进入原生层。

前者可以继续留在 Windows。后者更适合使用 macOS 环境处理。

第 5 步:只为阻塞点补设备

你可以按下面的条件做决定:

  • 只学基础页面和交互:继续使用 Windows,加 Expo Go 和真实 iPhone。
  • 课程短期要求模拟器:按课程周期使用远程 Mac。
  • 需要云端生成 iOS 构建:先用 Windows 发起云端构建。
  • 长期写原生代码和排查 Xcode 错误:再考虑固定使用 Mac。
  • 需要物理接口、持续高负载或长期每天开发:租赁不一定适合,应评估自购设备。

如果你准备使用远程环境完成课程,建议先看远程 Mac 课程验收相关方案,重点确认连接方式、文件保存和模拟器操作是否符合你的作业要求。

08

新手常见问题

上面的判断可以覆盖大多数入门场景,但以下几个问题经常决定你是否需要额外设备。

没有 iPhone,能不能只靠 Windows 学完 Expo?

可以学完基础部分,但不能独立证明所有 iOS 真机行为都正常。你可以完成页面、导航、数据请求和部分交互,再通过云端构建生成 iOS 版本。若课程要求真实设备演示,仍需要借用 iPhone、请同学测试,或使用可操作的远程 Mac 环境。

Expo Go 是不是一个完整的 iOS 开发环境?

不是。它适合学生快速入门,优点是启动快、配置少。限制是原生能力固定,不能随意加入所有第三方原生库,也不能替代开发构建、iOS 模拟器和 Xcode 调试。

Windows 能不能安装 Xcode?

不能把 Xcode 当作普通 Windows 软件安装。Xcode 依赖 macOS,用于 iOS 模拟器、本地 iOS 工程编译和原生调试。Windows 用户可以使用云端构建完成部分任务,但这不等于在 Windows 上拥有完整 Xcode 环境。

云端构建成功,是否说明项目已经没有问题?

不能。它只说明某次构建流程完成,不能覆盖所有设备、系统版本和真实交互。你还需要检查安装、启动、权限、网络、推送、相机和页面布局等实际行为。

学生应该买 Mac,还是先租远程 Mac?

如果你只是完成一门短期课程,先按需使用远程 Mac通常更稳妥,避免设备长期闲置。如果你之后要持续学习原生 iOS、每天调试 Xcode,固定 Mac 会更方便。判断标准应是未来使用频率和课程验收要求,而不是“学 iOS 就必须马上买电脑”。

09

当前电脑方案与 Mac 方案的取舍

继续使用 Windows 的优点是不用改变现有学习环境,也能完成代码编写、Expo Go 基础预览和云端构建。但它有几个真实缺点:本机没有 iOS 模拟器,缺少 Xcode 原生日志,不能独立完成所有 iOS 设备验证,遇到原生库报错时往往需要额外寻找测试环境。

直接购买 Mac 的问题则是成本集中、设备可能闲置,而且一门课程未必会长期用到本地 macOS。如果你只是需要模拟器截图、短期检查开发构建,按周或按月使用 KVMNODE 的远程 Mac,通常更接近“为当前作业补齐缺少的工具”,不用过早承担长期设备成本。

真正进入原生开发阶段后,再决定是否购买自己的 Mac。对大多数刚开始学 Expo 的学生,先用 Windows 把能完成的部分做完,等课程出现模拟器、Xcode 日志或原生模块阻塞时再补环境,才是更稳妥的路线。