iOS物理设备Expo Go中Expo App代码修改不更新问题
Expo Go iOS实体机代码修改不同步更新排查方案
已排除基础网络连接问题的前提下,按以下优先级逐步排查:
- 清理客户端缓存:彻底上滑关闭iOS端后台驻留的Expo Go进程,不要保留后台挂起状态,重新打开后扫码重连开发服务器。Expo Go后台驻留超过10分钟以上时,会优先加载本地留存的旧bundle包,拦截新的更新请求。
- 全量清理Metro打包缓存:终止当前终端运行的所有Expo开发进程,执行带缓存清除参数的启动命令:
不要复用之前留存的后台打包服务,必须完全退出旧进程后再执行命令,npx expo start -c-c参数会强制清除Metro所有历史编译缓存,避免旧产物被重复推送到端侧。 - 校验iOS端本地网络权限:打开iOS系统设置,下滑找到Expo Go应用配置页,确认本地网络权限处于开启状态。iOS系统升级、首次安装应用时如果误拒绝了该权限,即使设备连入同一WiFi,客户端也无法正常拉取更新包,此时终端显示打包完成仅代表服务端编译成功,不代表客户端成功接收到新产物。
- 校验客户端Fast Refresh实际状态:摇一摇手机调出Expo Go开发菜单,查看Fast Refresh选项状态,确认未被设置为Disable。应用崩溃、手动重载操作后,客户端可能自动重置Fast Refresh状态,覆盖项目内的全局配置。
- 排查文件监听失效问题:修改项目入口文件(通常是App.js/App.tsx)里的可见文本,观察终端是否自动触发增量编译日志,如果无任何编译输出,说明Metro未监听到文件变更,常见于WSL2环境、项目文件存放在外接硬盘/系统挂载盘的场景。此时启动服务追加轮询监听参数:
WSL2环境需将项目文件存放在WSL自身文件系统内,不要放在Windows挂载的盘符下,否则文件监听会默认失效。npx expo start -c --watch - 校验版本匹配性:对照终端启动时输出的Expo SDK版本号,和Expo Go首页显示的支持SDK版本号,确认两者大版本一致。大版本不匹配时Expo Go不会弹出明确报错,会静默加载本地缓存的兼容bundle,表现为代码修改完全不生效。
- 排查代码错误拦截更新:查看终端打包完成后的输出日志,如果存在语法错误、导入路径错误、模块缺失错误,Metro会自动fallback到上一次可正常运行的旧bundle,不会推送错误产物到端侧。可以故意在入口文件写一个明显的语法错误,观察端侧是否弹出红屏报错,如果无红屏提示,说明客户端始终未拉取到最新编译产物。
内容的提问来源于stack exchange,提问作者HotSurfSpot
相关产品推荐
相关产品推荐

