移除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
相关产品推荐
相关产品推荐

