React Native 0.87 没有 Mac 怎么开发?2026 交付方案

Windows 或 Linux 可以继续承担 React Native 0.87 的 JavaScript、TypeScript、Android 和部分测试工作,但苹果端模拟器、原生依赖、Xcode 构建、签名与发布必须接入 Mac。本文按开发场景划分任务边界,并用真实交付证据帮助你决定采用远程 Mac、本地 Mac,还是混合 CI。

React Native 0.87 没有 Mac 怎么开发?2026 交付方案

目录

Windows 上业务代码和 Android 都正常,但首次生成苹果端制品时,Metro 能启动,JavaScript 也能编译,链路却在 Xcode、Simulator 或签名环节中断。

最快的解决方式是:把编码和通用测试留在 Windows 或 Linux,把模拟器调试、原生依赖验证、Xcode 构建、签名与发布交给 Mac;短期项目优先使用远程 Mac,高频图形调试再考虑本地 Mac,团队通常采用混合 CI。

时间表:第 1 天确认项目在主力系统上的 JavaScript 与 Android 状态;第 2 天准备远程 Mac 并复现 iOS 工程;第 3 天完成 Simulator、原生依赖和 Archive 验收;之后再决定长期租用、购买本地设备,还是建设固定 Mac CI 节点。

本周建议动作:选一个真实的 React Native 0.87 提交,固定 Bundle IdentifierTeam ID、依赖锁文件和构建脚本,在一台可短期使用的远程 Mac 上完成一次从全新克隆到 Archive 的闭环,不要先根据感觉采购硬件。

最后更新于 2026 年 9 月 20 日,版本与提交要求核实自 React Native 0.87 发布说明Apple 官方提交要求

这篇文章适合哪些开发者

如果你以 Windows 或 Linux 为主力机、暂时没有 Mac,这篇文章可以帮你划分哪些任务继续在本地完成,哪些任务必须转移到远程 Mac。

如果你负责团队 CI/CD,本文可以帮助你确定 Mac 节点的职责、权限和验收证据;如果你正在比较购买、租用或共享 Mac,也可以用真实项目的交付闭环,而不是单纯看硬件参数来做决定。

先把 React Native 0.87 的任务边界划清

React Native 0.87 并不要求你把所有开发工作都搬到 Mac。JavaScript、TypeScript、业务逻辑、接口联调、代码检查、部分单元测试,以及 Android 工作流,仍然可以留在 Windows 或 Linux。

React Native 官方环境文档明确区分了开发操作系统和目标操作系统:你可以在 Windows 或 Linux 上进行开发,但要构建 iOS 应用,仍然需要 Xcode 及其配套工具链。官方环境配置文档还列出了 Node、Watchman、Xcode 和 CocoaPods 等依赖。

React Native 0.87 的发布说明要求 Node.js 至少为 22.13.0,并将 Swift Package Manager 支持标记为实验性路径;CocoaPods 仍是默认且受支持的路径。0.87 发布说明中的工具链要求,应当直接写入你的项目构建记录,而不是只依赖开发者个人电脑上的版本。

主力电脑是 Windows,苹果端还能继续开发吗?

可以,但要区分“开发代码”和“完成苹果端交付”。你可以在 Windows 上写页面、调试业务逻辑、运行 Metro、执行 Android 构建,也可以提前完成绝大多数 JavaScript 层工作;但 iOS Simulator、Xcode 工程构建、苹果端原生模块验证、Archive、签名和上传仍需要 Mac。

哪些苹果端工作必须放到 Mac 上?

只要任务依赖 Xcode、iOS SDK、Simulator、苹果签名工具或 App Store Connect 上传链路,就应当转入 Mac。若只是修改 TypeScript、运行 ESLint、执行与 Apple 工具链无关的测试,则没有必要强制占用 Mac 节点。

按场景决定任务放在哪里

下面这张表用于做第一轮判断。它不是把所有任务简单分成“本地”或“远程”,而是要求每个阶段都留下可复核的证据。

开发场景 Windows/Linux 远程 Mac 本地 Mac 必须留下的证据
JavaScript、TypeScript 和业务逻辑 ✅ 适合 可选 可选 测试结果、提交记录、代码检查结果
Metro、接口联调和 Android ✅ 适合 可选 可选 Android 构建产物和测试日志
iOS Simulator 交互调试 ❌ 不完整 ✅ 适合短期或团队共享 ✅ 低延迟体验更好 图形会话截图、运行日志、复现步骤
CocoaPods、原生模块和 Xcode 工程 ❌ 无法完成完整验证 ✅ 必须 ✅ 必须 全新克隆后的安装与构建结果
Archive、导出和上传 ❌ 不适合 ✅ 可执行,但需收紧权限 ✅ 可执行 Archive、导出制品、上传记录
高频真机联调 ❌ 受限 ⚠️ 取决于设备连接方式 ✅ 通常更合适 真机安装结果、设备日志、兼容性记录
CI 自动构建 仅承担通用任务 ✅ 适合作为 Mac Runner ✅ 适合作为固定节点 同一提交的构建日志与制品哈希

远程 Mac 是否适合运行 React Native Simulator?

可以。只要远程 Mac 安装了匹配的 Xcode、iOS Simulator 运行时和项目依赖,就能通过远程桌面进行图形交互,也能通过 SSH 执行 xcodebuild、测试脚本和构建命令。

但 Simulator 不能替代真机。Apple 文档明确说明,模拟器运行在 Mac 上,不能完整复制真实设备的性能和硬件特性;需要验证相机、蓝牙、推送、传感器、性能和设备专属行为时,仍然要在实体设备上测试。Apple 的模拟器与真机运行说明给出了这一边界。

第一步:保留主力环境,只把苹果端执行层接入 Mac

先不要把整个仓库迁移到远程 Mac。你可以继续在 Windows 或 Linux 上完成以下工作:

然后在 Mac 上只接手 iOS 相关目录和命令。建议把 NODE_BINARY、Node 版本、Ruby、CocoaPods、Xcode 路径和构建参数写进脚本或 .xcode.env,不要依赖某位开发者的交互式 Shell 配置。React Native 官方环境文档也建议通过 .xcode.env 解耦 Xcode 构建阶段与系统 Node 路径。

这样做的好处是:Mac 节点负责可交付结果,主力电脑负责高频编辑。两者通过同一个提交号连接,而不是通过“我本地能跑”连接。

第二步:用远程桌面和 SSH 分工验证

远程 Mac 的图形会话和命令行会话要分别验收。

图形会话用于:

  1. 打开 Xcode;
  2. 确认 iOS 平台组件和 Simulator 已安装;
  3. 选择目标模拟器;
  4. 启动应用并进行页面交互;
  5. 查看 Xcode 的 Issue Navigator、控制台和调试信息。

SSH 会话用于:

  1. 安装依赖;
  2. 执行 CocoaPods 或项目指定的原生依赖命令;
  3. 运行 xcodebuild、测试脚本和打包脚本;
  4. 保存构建日志;
  5. 为 CI Runner 或自动化任务提供非交互入口。

不要只验证 SSH 能登录,就认定远程环境可用;也不要只看到 Simulator 窗口,就认定它可以进入 CI。你至少要分别确认“能看见并操作模拟器”和“能从干净 Shell 无人值守完成构建”。

如果团队准备把节点交给多人使用,可以先参考 VPSMAC 的远程 Mac 节点选择页面,再按项目对延迟、登录方式和持续在线时间的要求选择节点,而不是只比较 CPU 名称。

第三步:原生依赖必须通过全新克隆验证

加入原生模块、修改 Swift 或 Objective-C、调整 ios/ 工程、处理 CocoaPods,都会把项目从“跨平台 JavaScript 工程”变成“需要 Mac 验证的原生工程”。

建议按照下面的顺序执行:

  1. 在远程 Mac 上创建新的工作目录;
  2. 使用占位仓库地址克隆项目;
  3. 检查 Node、Xcode、CocoaPods 和依赖管理工具版本;
  4. 安装 JavaScript 依赖;
  5. 进入 ios/,按项目当前路径安装原生依赖;
  6. 生成或更新 iOS 工程;
  7. 在 Simulator 上执行 Debug 构建;
  8. 使用命令行执行一次干净构建;
  9. 保存日志、提交号和生成的工程差异。

React Native 0.87 的 SwiftPM 路径仍是实验性支持,并且官方说明社区库需要提供 Package.swift,全新克隆和 CI 中还要额外运行对应初始化命令;如果项目依赖尚未适配,不能因为 SwiftPM 能初始化就认为生产链路已经迁移完成。发布说明中的 SwiftPM 限制应当作为项目验收边界。

你需要明确区分三种状态:

前两种成功,不能自动推导出第三种成功。

第四步:把 CI 拆成通用节点和 Mac 节点

团队不应让 Mac 节点承担所有流水线任务。更合理的路由方式是:

Mac Runner 至少需要具备独立账户、固定工具链、明确工作目录和可观察的清理机制。每个任务完成后,应清理派生数据、临时密钥、缓存目录和工作区中的敏感文件;如果多个项目共用同一节点,还要避免一个项目的 Keychain、Provisioning Profile 或环境变量被下一个任务读取。

验收时使用同一个提交号,收集三份证据:

  1. Windows 或 Linux 上的代码检查和通用测试结果;
  2. Mac 节点上的 iOS 构建和 Simulator 测试结果;
  3. CI 保存的 Archive、导出制品或上传结果。

如果三者对应的提交号不同,或者只有本地开发者机器成功,不能把结果标记为交付成功。

第五步:签名、Archive 和发布要单独收紧

没有本地 Mac 时,苹果端打包和签名应该怎样完成?

你可以通过远程 Mac 完成,但不能把“构建通过”当成“发布完成”。Mac 节点需要准备 Bundle IdentifierTeam ID、签名身份、Provisioning Profile、App Store Connect 权限和发布脚本;这些值应使用占位符管理,真实凭据则放在受控的 CI Secret 或独立 Keychain 中。

Apple 的发布流程要求先创建 Archive,再在 Xcode Organizer 中进行验证、导出或上传。Apple 的 Archive 与分发文档明确区分了导出、TestFlight 和 App Store 发布路径。Simulator 只能运行应用,不能替代面向设备的发布 Archive。

建议将发布拆成以下 5 个检查点

  1. 身份检查:确认目标、Bundle IdentifierTeam ID 与项目一致;
  2. 签名检查:确认使用的是开发、测试还是分发身份;
  3. Archive 检查:确认 Product > Archive 能生成归档;
  4. 导出检查:确认导出的制品可安装、结构完整并通过验证;
  5. 上传检查:确认上传账户、构建号、日志和 App Store Connect 记录匹配。

Apple 的项目分发准备文档还要求项目配置唯一 Bundle ID、版本号、构建号、图标和团队信息。分发前项目配置说明可作为发布前检查清单。

截至 2026 年 4 月 28 日,提交到 App Store Connect 的应用必须使用 Xcode 26 或更高版本,并使用相应的 iOS 26 等 SDK 构建。Apple 官方要求已经生效。因此,如果你的项目记录中写的是 Xcode 27,不要只记录名称,还要保存具体版本、SDK、macOS、React Native 0.87 提交号和构建入口,避免后续无法复现。

证书和私钥也不应默认放在共享开发会话里。Apple 提供了在 Mac 的 Keychain Access 中生成证书签名请求的流程;生产发布时则应进一步限制登录账户、Secret 读取范围和人工审批权限。

远程 Mac、购买 Mac 与混合方案的评分

租用还是购买 Mac,更适合 React Native 团队?

可以用四项指标评分,而不是只比较一次性硬件价格:

如果你每周只需要几次苹果端构建,先用远程 Mac 验证完整闭环,通常比先购买设备更容易控制试错成本。若你每天都要进行长时间 Simulator 交互、真机联调,或者需要本地连接专用硬件,则应把本地 Mac 纳入方案,并保留远程 Mac 作为 CI 和发布节点。

你也可以先通过 VPSMAC 的 M4 节点页面了解可用的远程 Mac 访问方式,再根据实际项目验证 SSH、远程桌面、Xcode 和重启后的恢复情况。选择节点时,优先看任务能否稳定完成,而不是只看宣传规格。

Windows 或 Linux 方案的真实缺点在于:它无法独立完成 Xcode 构建,无法直接提供完整 iOS Simulator,原生依赖和签名问题往往要等到最后阶段才暴露;纯本地 Mac 方案则容易在低频项目中闲置,还可能把所有 CI、开发和发布权限集中到一台机器。对多数没有现成 Mac、但需要完成 React Native 0.87 苹果端交付的团队,先租用 VPSMAC 的远程 Mac 做一次全链路验收,再决定长期租用、本地采购或混合部署,会比直接押注单一方案更稳妥。

本周只需选定一个真实提交,依次验证依赖安装、Simulator 测试、原生工程构建和 Archive。闭环通过后,你才有足够证据决定后续的设备与 CI 投入。

延伸阅读