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:
- 找到项目里的
node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js文件 - 找到里面调用
xcrun instruments -s的代码块,替换成xcrun xctrace list devices - 还要调整输出解析逻辑,因为
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(/\)$/, '') : '' }; }); - 保存修改后,再重新运行run-ios命令就可以了。
3. 创建软链接临时绕过(应急用)
要是赶时间想快速解决,可以给xctrace创建一个叫instruments的软链接,让系统误以为旧工具还存在:
打开终端执行:
sudo ln -s /usr/bin/xctrace /usr/bin/instruments
⚠️ 注意:这只是临时 workaround,可能会有潜在的兼容性问题,不建议长期用,还是优先考虑前两个方案。
内容的提问来源于stack exchange,提问作者Capella
相关产品推荐
相关产品推荐

