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

Xcode 13中instruments已被移除,使用xctrace替代后如何解决React-Native项目运行报错问题?

解决Xcode 13+下React Native run-ios找不到instruments的问题

我之前也踩过这个坑!Xcode 13开始官方彻底移除了instruments命令行工具,换成xctrace了,但旧版本的React Native还在调用废弃的instruments,所以才会报这个错。给你几个实用的解决办法,按优先级推荐:


1. 升级React Native到最新稳定版(最推荐)

React Native的新版本已经适配了Xcode 13的变更,完全去掉了对instruments的依赖。你可以根据项目情况选择升级方式:

  • 用原生RN cli的话,执行:
    npx react-native upgrade
    
  • 如果是Expo项目:
    expo upgrade
    

升级完成后重新运行npx react-native run-ios --device "iPhone",应该就能正常启动项目了。

2. 手动修改RN的设备检测脚本(适合暂时不想升级的场景)

如果暂时没法升级RN,可以直接修改node_modules里的脚本,把调用instruments的地方替换成xctrace:

  1. 找到项目里的node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js文件
  2. 找到里面调用xcrun instruments -s的代码块,替换成xcrun xctrace list devices
  3. 还要调整输出解析逻辑,因为xctrace的设备列表格式和instruments不一样,比如可以改成这样:
    // 替换原有的spawnPromise调用
    const devicesOutput = await spawnPromise('xcrun', ['xctrace', 'list', 'devices']);
    // 解析设备列表
    const devices = devicesOutput.split('\n')
      .filter(line => line.trim() !== '' && !line.includes('==') && !line.includes('*'))
      .map(line => {
        const [namePart, udidPart] = line.trim().split(/\s+\(/);
        return {
          name: namePart.trim(),
          udid: udidPart ? udidPart.replace(/\)$/, '') : ''
        };
      });
    
  4. 保存修改后,再重新运行run-ios命令就可以了。

3. 创建软链接临时绕过(应急用)

要是赶时间想快速解决,可以给xctrace创建一个叫instruments的软链接,让系统误以为旧工具还存在:
打开终端执行:

sudo ln -s /usr/bin/xctrace /usr/bin/instruments

⚠️ 注意:这只是临时 workaround,可能会有潜在的兼容性问题,不建议长期用,还是优先考虑前两个方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:07:42