You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除Expo后iOS真机Live Reloading失效问题求助

React Native 移除Expo后iOS真机Live Reloading失效解决方案

针对你移除Expo后iOS真机无法连接Metro、Live Reloading失效的问题,可按以下步骤排查修复:

1. 配置Metro监听所有网络IP

默认Metro仅监听localhost,需修改配置让其允许局域网设备连接:

  • 在项目根目录的metro.config.js中添加服务器监听配置(若文件不存在则新建):
const { getDefaultConfig } = require('@react-native/metro-config');

const config = getDefaultConfig(__dirname);

config.server = {
  port: 8081,
  host: '0.0.0.0',
};

module.exports = config;
  • 重启Metro服务器,启动时可显式指定参数:npx react-native start --host 0.0.0.0

2. 修正iOS Debug模式的Bundle加载逻辑

你生成的main.jsbundle是Release环境的,Debug模式下应直接从Metro加载,而非使用预打包文件:

  • 打开Xcode,进入项目的Build Phases,检查Bundle React Native code and images阶段是否启用(Debug模式下需勾选)。
  • 打开AppDelegate.m(或AppDelegate.swift),确保Debug模式下的Bundle URL逻辑正确:
#ifdef DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif

若之前残留Expo相关代码,需完全替换为上述原生RN的加载逻辑。

3. 排查网络与防火墙限制

  • 验证手机能否访问Mac的Metro服务:在手机Safari中输入http://[你的Mac局域网IP]:8081,若能显示Metro的欢迎页面则网络连通正常,否则检查Mac防火墙设置:
    进入系统设置 > 网络 > 防火墙,确保node进程(Metro的运行进程)被允许接收传入连接。
  • 用ping [你的Mac局域网IP]在手机终端(或第三方工具)测试网络连通性,排除路由或网络隔离问题。

4. 检查端口占用情况

  • 执行lsof -i :8081查看8081端口是否被其他进程占用,若有则用kill -9 [进程PID]终止占用进程,再重启Metro。
  • 若端口被占用无法释放,可换端口启动Metro:npx react-native start --port 8082,然后在手机的开发者菜单中选择Change Bundle Location,输入http://[MacIP]:8082/index.bundle?platform=ios。

5. 重置缓存与构建

  • 清除Metro缓存:npx react-native start --reset-cache
  • 在Xcode中执行Product > Clean Build Folder,然后重新编译安装到真机。

内容的提问来源于stack exchange,提问作者Carl Edwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:45:32