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

React Native run-ios构建成功但Metro无法连接iOS模拟器

React Native 0.66 + Xcode 13 iOS模拟器无法连接Metro、启动闪退修复方案

该问题为React Native 0.66版本与Xcode 13.0、iOS 15模拟器的已知兼容问题,常规清缓存、重装依赖、重装环境无法解决,核心诱因有三点:

  • Xcode 13默认将iOS 15模拟器的localhost解析为IPv6地址::1,但Metro默认仅监听IPv4的127.0.0.1,连接直接被拒绝
  • Xcode 13默认在Debug构建中开启死代码剥离,会误删RN初始化Metro连接的相关逻辑,导致app启动无入口直接闪退
  • RN 0.66内置的Xcode构建脚本未适配iOS 15模拟器的bundle路径规则,app启动时找不到js入口资源直接崩溃
分步修复操作

1. 清理残留进程

先执行命令彻底关闭所有相关进程,避免旧配置缓存干扰:

killall -9 node Metro Simulator Xcode
rm -rf ~/Library/Developer/Xcode/DerivedData/*

2. 修正Metro监听配置

在项目根目录找到metro.config.js(不存在则新建),添加server配置强制监听IPv4地址,原有配置全部保留:

module.exports = {
  // 原有其他配置项保持不变
  server: {
    port: 8081,
    host: '127.0.0.1',
  },
};

3. 配置iOS本地网络权限

打开iOS项目下的ios/[你的项目名]/Info.plist文件,在NSAppTransportSecurity节点下添加本地网络例外配置,原有配置不要删除:

<key>NSAppTransportSecurity</key>
<dict>
  <!-- 原有ATS配置保留 -->
  <key>NSAllowsLocalNetworking</key>
  <true/>
  <key>NSExceptionDomains</key>
  <dict>
    <key>localhost</key>
    <dict>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

4. 修改Xcode Debug构建设置

  • 用Xcode打开ios/[你的项目名].xcworkspace,选中左侧项目根节点,选择对应Debug环境的Target,切换到Build Settings标签页
  • 搜索Dead Code Stripping,将Debug模式下的配置值从Yes改为No(该配置是闪退核心原因,Xcode 13默认给Debug开启该选项,会误删RN的Metro连接初始化代码)
  • 搜索Other Linker Flags,确认Debug模式下存在-ObjC、-lc++两个参数,缺失则手动补充

5. 修正RN构建脚本的iOS15路径兼容问题

打开项目下的node_modules/react-native/scripts/react-native-xcode.sh文件,找到模拟器环境下设置bundle路径的代码块:

if [[ "$PLATFORM_NAME" == *simulator ]]; then
  BUNDLE_FILE="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}/main.jsbundle"
fi

替换为适配iOS15模拟器路径的逻辑:

if [[ "$PLATFORM_NAME" == *simulator ]]; then
  # iOS15模拟器修改了.app包的路径层级,原有逻辑会找不到bundle
  if xcrun simctl list devices | grep "iOS 15.0" | grep -q "Booted"; then
    BUNDLE_FILE="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_NAME}.app/main.jsbundle"
  else
    BUNDLE_FILE="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_FOLDER_PATH}/main.jsbundle"
  fi
fi
验证流程
  1. 项目根目录执行yarn start --reset-cache,等待Metro完全启动显示欢迎界面,不要关闭该窗口
  2. 新开一个终端窗口,执行react-native run-ios --no-packager,等待构建完成
  3. 构建完成后模拟器会自动启动app,第一次启动如果弹出本地网络权限申请,必须点击“允许”
  4. 观察Metro窗口,出现Bundling complete日志即代表连接正常
补充排查

如果完成上述操作后依然闪退,打开Mac自带的Console应用,选中左侧当前启动的模拟器设备,筛选你的app包名查看闪退日志:

  • 日志报Connection refused:检查Metro是否正常监听127.0.0.1:8081,确认没有其他程序占用8081端口
  • 日志报Code signature invalid:回到Xcode的Build Settings,将Debug模式的签名团队修改为你自己的Apple ID,开启自动签名
  • 日志报dyld: Library not loaded:进入ios目录执行pod install --repo-update重新安装依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:37:01