症状:React Native 0.88 项目在 Windows 上能写代码,却无法完成 iOS 模拟器构建。
最快解法:iOS 原生构建需要配备 Xcode 的 macOS 环境;新项目按 0.88 模板开始,旧项目先备份并比较升级差异。React Native 官方于 2026 年 10 月 19 日发布 0.88,并加入 iOS SceneDelegate 生命周期支持。(React Native 0.88 发布说明)

适合你:刚开始学 React Native,想把第一个项目跑进 iOS 模拟器的学生。
已有课程项目、准备升级到 0.88 的学习者,也能按这里的步骤检查原生工程。
如果你主要使用 Windows 或学校电脑,可以据此确认课程验收在哪一步需要 Mac 与 Xcode。

最后更新于 2026 年 10 月 20 日;版本与工具要求已复核 React Native 官方发布说明、环境设置文档,以及 Apple 的场景生命周期说明。

先判断是新建项目还是升级项目

你先看手里的项目属于哪一种,不要把两种操作混成一套:

  • 刚开始课程、还没有项目:按 0.88 社区模板新建,优先使用模板已经准备好的 iOS 工程入口。
  • 已经有课程项目:先确认当前 React Native 版本、依赖管理方式和原生文件改动,再决定是否升级。升级前留好可以恢复的副本。

React Native 项目不只有 JavaScript。可以把它想成两层:JavaScript 是你写页面和交互的部分;ios 目录则是与 Apple 平台打交道的原生工程。模拟器运行要把这两层连起来,因此 Metro 能启动,不等于 iOS 应用已经构建成功。

对课程作业来说,先问清验收目标:只检查 JavaScript 页面,还是必须在 iOS 模拟器中打开?如果老师要求模拟器截图或原生功能测试,单靠 Windows 上的代码编辑无法代替 iOS 构建。

准备 macOS 与 Xcode 环境

React Native 官方环境设置文档要求使用 Xcode 配置 iOS 构建工具;安装 Xcode 时也会提供 iOS 模拟器所需工具。不同版本的系统和 Xcode 可能对应不同模拟器平台版本,安装前先对照官方环境设置步骤,不要仅凭旧课程视频判断当前要求。

动手前核对这几项:

  • macOS 与 Xcode:当前机器能否安装并启动 Xcode?打开 Xcode 后,确认 Command Line Tools 已选定。
  • 模拟器平台:在 Xcode 设置中检查是否已安装课程要用的 iOS Simulator 平台。
  • 项目版本:打开 package.json,查看 react-native、react 及项目实际使用的依赖管理器。
  • 原生依赖:看 ios 目录是否有 Podfile、锁定文件或课程指定的安装步骤。不要随意更换工具链,也不要同时用不同方式改动同一批依赖。
  • Node 环境:按当前 React Native 文档和课程要求核对 Node 版本。若 Xcode 构建脚本找不到 Node,再检查项目的 .xcode.env 等环境配置;Xcode 脚本使用 Node 路径时也要留意环境差异。

⚠️ “我能打开模拟器”只说明模拟器可用,不代表课程项目已经编译通过。构建结果、应用启动和页面内容要分开确认。

新建项目时使用 0.88 模板入口

新项目不必照抄旧教程里的 AppDelegate 配置。React Native 0.88 官方说明称,社区模板已更新为 SceneDelegate 入口;创建完成后,先检查生成的 ios 工程,再决定是否需要课程要求之外的自定义改动。官方给出的创建命令使用当前 CLI,并通过 --version latest 选择最新版本。

npx @react-native-community/cli@latest init MyProject --version latest

这条命令面向新建项目。运行时要看清终端输出,并在 package.json 确认最终生成的 React Native 版本;如果课程明确要求 0.88,别只看命令成功就默认版本符合要求。版本选择或安装失败时,先按项目文档确认 CLI 和依赖,再处理报错,不要先删掉模板里的 iOS 文件。

新项目生成后,打开 ios 目录,检查工程是否包含 SceneDelegate 相关入口,以及 Info.plist 是否有对应场景配置。这里的重点是理解模板已经准备了什么,而不是手动把旧项目配置粘贴进来。

升级旧项目时检查 SceneDelegate

React Native 0.88 发布说明将该版本描述为“没有面向用户的破坏性变更”,但这句话不能理解成所有旧工程和第三方原生库都可以不检查。升级前用 Upgrade Helper 选择原版本与 0.88,逐项查看模板差异;升级可能涉及 package.json 以外的生成文件。

建议按这个顺序处理:

  1. 保存可回退副本。先提交当前代码,或复制一份项目目录。确认 ios 里的手动改动已经记录。
  2. 比较版本差异。重点看 AppDelegate、Info.plist、Podfile、项目工程文件,以及课程或第三方库要求的原生配置。
  3. 判断是否采用 iOS 27 SDK。Apple 的说明指出,使用 iOS 27 SDK 构建的应用需要采用基于 UIScene 的生命周期,否则可能无法启动。若你的课程目标或构建环境没有使用该 SDK,不要仅因为升级到 React Native 0.88 就盲目迁移。(Apple 场景生命周期说明)
  4. 需要迁移时再改入口。按 0.88 模板和差异说明将 React Native 启动入口迁到 SceneDelegate,检查 Info.plist 的 UIApplicationSceneManifest 声明,并确认 URL 与用户活动回调按项目需要转发。(Apple 场景配置文档)
  5. 核对单场景限制。React Native 0.88 的该项支持限于单场景;官方要求保持 UIApplicationSupportsMultipleScenes 为 false。如果项目依赖多个窗口或场景,先不要照搬单场景模板,需要额外验证适配范围。
  6. 重新安装原生依赖并构建。按项目锁定文件与课程文档执行依赖安装,再启动模拟器验证。不要把“依赖安装成功”当成“升级验收完成”。

提醒:即使你从 0.87 升级,官方也只是说明通常无需更改应用代码;你的原生工程可能有课程改动、第三方库或定制入口,仍要逐项比对并实际构建。

在模拟器完成首次启动与排错

下面按实际操作顺序验收。每完成一项都记录结果,这样遇到问题时能分清是依赖、构建还是页面逻辑。

  1. 确认项目根目录。检查目录里有 package.json,并确认你使用的是项目原有的 npm、Yarn 或其他锁定方式。不要在有锁文件的项目里随意混用安装器。
  2. 安装项目依赖。按课程说明和项目锁文件执行安装。若项目使用 CocoaPods,就按官方环境文档和项目现有设置处理 iOS 原生依赖;不要因为网络教程中的旧命令与本项目不符而直接覆盖配置。
  3. 启动或选择模拟器。在 Xcode 启动已安装的平台与设备,也可以用 xcrun simctl list devices 检查可用设备。React Native 官方模拟器文档说明,启动命令可指定设备名称;设备名称必须来自你本机 Xcode 的可用列表。(iOS 模拟器运行文档)
  4. 从项目根目录启动 iOS 应用。先看模板 package.json 中的脚本。官方模拟器文档示例为 npm run ios;需要指定设备时,可按文档格式传入 --simulator 参数。
npm run ios
  1. 单独检查 Metro。如果项目终端显示 Metro 已运行,但 Xcode 构建失败,问题仍在原生构建链路;如果应用已打开但画面空白或报错,再检查 Metro 连接、JavaScript 错误和应用日志。不要用 Metro 输出代替 iOS 构建结果。
  2. 记录验收证据。保存 React Native、Xcode 和模拟器平台版本,记录启动命令、构建结果、应用是否打开,以及课程页面是否显示正常。出现失败时附上完整报错与相关原生文件差异,方便课程助教定位。

常见失败现象的排查方向

  • 项目没有构建出来:先看 Xcode 版本与命令行工具选择,再检查原生依赖安装是否完成、Podfile 或工程文件是否有未解决冲突。
  • 模拟器打开了,应用没启动:检查构建日志中最先出现的错误,而不是只看最后一行;若使用 iOS 27 SDK,核对项目是否完成所需的场景生命周期配置。
  • 应用启动了,页面异常:确认 Metro 是否连接到当前项目,检查 JavaScript 控制台和课程入口组件。原生构建成功与业务页面正确是两项不同的验收结果。

用可勾选清单决定下一步

把课程目标和设备条件逐项勾上。全部满足后再提交验收;有关键项未完成,就先解决对应缺口。

  • [ ] 我确认项目是新建还是从旧版本升级,并记录了当前 React Native 版本。
  • [ ] 我有可用的 macOS 与 Xcode 环境,并确认所需模拟器平台已安装。
  • [ ] 新项目使用 0.88 模板;旧项目已备份,并通过 Upgrade Helper 对照原生工程差异。
  • [ ] 我已判断构建是否使用 iOS 27 SDK;只有需要时才按要求迁移 SceneDelegate。
  • [ ] 应用确实在模拟器构建并启动,课程页面也通过检查;我没有把 Metro 启动误当作验收成功。
你的情况 建议路线 需要特别留意
刚开始课程,没有旧工程 用 0.88 模板新建,再按课程页面要求运行 检查生成版本和模板入口,不叠加旧教程配置
已有 React Native 项目 先备份,再比较原版本到 0.88 的工程差异 核对原生改动、依赖和课程插件,不能只看 JavaScript
主要使用 Windows,没有可用 Mac 先完成通用代码练习;涉及 iOS 构建时安排 macOS 与 Xcode Windows 编辑代码不等于能够本地完成 iOS 模拟器验收
构建使用 iOS 27 SDK 按官方要求检查 UIScene 与 SceneDelegate 迁移 0.88 的 SceneDelegate 支持范围为单场景

常见问题

React Native 0.88 项目怎样启动 iOS 模拟器?

先在配备 Xcode 的 macOS 环境准备依赖,再从项目根目录运行模板提供的 iOS 脚本。构建失败时排查 Xcode 与原生依赖;页面异常时再检查 Metro 和 JavaScript。模拟器打开、应用启动、课程页面正常是不同的验收节点,建议分别记录。

新建的 React Native 0.88 应用还要自己加 SceneDelegate 吗?

0.88 社区模板已经包含 SceneDelegate 路径,一般不必重复手动添加旧教程中的 AppDelegate 配置。若模板被课程修改,或你使用 iOS 27 SDK,则应核对场景声明、入口和 URL 回调。官方说明该实现目前限于单场景。

把旧版 React Native 升到 0.88 前要检查哪些文件?

先备份项目,用 Upgrade Helper 比较原版本与 0.88,再核对 package.json、AppDelegate、Info.plist 和 iOS 工程文件。官方所说的“没有面向用户的破坏性变更”不代表第三方原生依赖和课程定制都无需测试;升级后要重新构建并运行自己的项目。

没有自己的 Mac,React Native iOS 项目还能验收吗?

你可以在 Windows 上继续编辑 JavaScript 和完成不依赖 iOS 构建的练习,但 iOS 原生构建与模拟器验收需要 macOS 和 Xcode。若课程明确要求模拟器运行,就要安排可用的 Mac 环境;先确认课程目标、项目依赖和工具要求,再选择适合的环境。

课程验收缺少 Mac 时的选择

如果你现在用 Windows 完成课程,继续本地开发通常更方便:编辑器和现有项目都在手边,日常 JavaScript 调试也不必迁移。但当验收卡在 iOS 原生构建时,Windows 不能替代 macOS 与 Xcode;自行准备 Mac 又意味着购买和维护实体设备;在未核实课程依赖的情况下换用其他构建路线,也可能无法满足老师指定的模拟器验收方式。

所以先把“是否必须在 iOS 模拟器验收”问清楚。若确有这项要求、但你暂时没有 Mac,可以了解 MACCOME 的远程 Mac 学习环境;开始前核对可用工具版本、连接方式和课程项目的环境要求,不把未经确认的配置或运行结果当成承诺。你也可以先查看 MACCOME 的 Mac 算力方案说明,再决定短期测试环境是否比自行购买更适合当前课程。