如何在Xcode 13上运行React Native 0.57.7项目并解决instruments报错
问题根因
Xcode 13 正式废弃并移除了旧版instruments工具,替代工具为xctrace,而React Native 0.62以下版本的iOS运行脚本硬编码调用了instruments命令,因此触发找不到工具的报错,无需升级RN版本即可修复。
不升级React Native的修复方案
方案1:全局命令映射(无需修改项目代码,重启设备后依然生效)
- 关闭所有正在运行的Xcode和终端进程
- 若为M系列芯片的Mac且
/usr/local/bin目录不存在,先执行命令创建目录:
sudo mkdir -p /usr/local/bin
- 执行终端命令创建软链接:
sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/bin/xctrace /usr/local/bin/instruments
- 执行完成后运行验证命令:
instruments -s,如果正常输出iOS设备、模拟器列表即配置生效,重新执行RN运行命令即可正常启动项目。
方案2:修改项目内RN脚本(仅当前项目生效,重装node_modules后需要重新修改)
第一步:修改runIOS.js文件
- 打开文件路径:
node_modules/react-native/local-cli/runIOS/runIOS.js - 查找所有包含
xcrun instruments的代码行,将instruments参数替换为xctrace,将-s参数替换为list devices,修改后示例:
// 修改前 const instrumentsProc = spawn('xcrun', ['instruments', '-s'], { // 修改后 const instrumentsProc = spawn('xcrun', ['xctrace', 'list', 'devices'], {
第二步:修改findMatchingSimulator.js文件
- 打开文件路径:
node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js - 查找文件内匹配模拟器版本的正则表达式,调整为适配xctrace返回格式的规则,参考修改:
// 修改前 const simulatorVersionRegex = /-- iOS (.+) --/; // 修改后 const simulatorVersionRegex = /iOS (\d+\.\d+(\.\d+)?)/;
- 同步调整模拟器名称的提取逻辑,适配新返回值的格式即可。
内容的提问来源于stack exchange,提问作者Rohit Aggarwal
相关产品推荐
相关产品推荐

