热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何解决ERR_QUIC_PROTOCOL_ERROR问题

本文主要分享【如何解决ERR_QUIC_PROTOCOL_ERROR问题】,技术文章【reactnative(Error:UnableToFindUtility“Instruments“

本文主要分享【如何解决ERR_QUIC_PROTOCOL_ERROR问题】,技术文章【react native (Error: Unable To Find Utility “Instruments“, Not A Developer Tool)】为【-阿布-】投稿,如果你遇到相关问题,本文相关知识或能到你。

如何解决ERR_QUIC_PROTOCOL_ERROR问题

问题原因

在使用 yarn ios --device 'xxx的iPhone' 或者 react-native run-ios --device 'xxx的iPhone' 时,出现 (Error: Unable To Find Utility "Instruments", Not A Developer Tool) 等等关键字信息的错误提示,

正如错误提示的,因为没有 Instruments 这个工具了,在xcode12的版本,Instruments已经被废弃,但是老版本的React Native库里使用的还是 Instruments 这个命令用于查找当前电脑可用设备

所以这是RN的版本和XCode的版本不兼容了,但是此时又不想升级RN的版本,担心或者已经遇到很多兼容性的问题,那么可以通过修改 @react-native-community 包中代码,修改使用这个命令的地方,换成新版本的查找设备的命令即可。

修改1: node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/index.js

在这个js中,我们找到名为runIOS的方法,

然后我们可以找到如下这么一行关键代码:

const devices = (0, _parseIOSDevicesList.default)(_child_process().default.execFileSync('xcrun', ['instruments', '-s'], {
  encoding: 'utf8'
}));

也就是说,在低版本的RN里,查找设备列表是用的 xcrun instruments -s,我们直接在命令行输入这行看看会出现什么:

即出现了RN命令运行时的错误,也就是说当前的系统已经不支持这个命令了(笔者此时的XCode是14版本),

那我们看一下高版本的RN,可以正常运行的,它的库中使用的查找设备列表的命令代码是什么:

同样的路径同样的方法,我们可以看到查找设备列表的命令已经变成了:xcrun xctrace list devices

然后在控制执行该命令发现可以列出当前设备列表。

也就是说,RN其实只是用JS代表帮我们调用XCode提供的命令,找到了这个问题我们对低版本的RN代码进行微调即可,此时我们现将查找设备的命令更改成可以正常运行的,

也就是说我们将,

const devices = (0, _parseIOSDevicesList.default)(_child_process().default.execFileSync('xcrun', ['instruments', '-s'], {
  encoding: 'utf8'
}));

改为

const devices = (0, _parseIOSDevicesList.default)(_child_process().default.execFileSync('xcrun', ['xctrace', 'list', 'devices'], {
  encoding: 'utf8'
}));

是不是就可以了,笔者试了一下这么直接用不行,在新版本的代码中使用了 execa 这个库执行命令:

const out = execa.sync('xcrun', ['xctrace', 'list', 'devices']);

因此我们需要在老版本的代码中引入 execa 去执行命令:

我们参考 _child_process 的定义,再定义一个 _execa,然后使用 _execa 执行命令:

const devices = (0, _parseIOSDevicesList.default)(_execa().default.sync('xcrun', ['xctrace', 'list', 'devices']));

到了这一步,查找设备的命令可以正常执行了,但是还有一个问题,就是对设备列表的结果解析,笔者试了一下直接用老版本的解析代码,也就是 _parseIOSDevicesList.default 对新版本命令的结果输出是不行的,因此还需要修改一下 _parseIOSDevicesList 方法,如何修改看下一步。

修改2: node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/parseIOSDevicesList.js

这一步的修改比较简单,主要是将正则表达式换一下就可以了:

(老版本的代码):

(改过后的代码):

function parseIOSDevicesList(text) {
  const devices = [];
  text.stdout.split('\n').forEach(line => {
    const device = line.match(
        /(.*?) ((([0-9.]+)) )?(([0-9A-F-]+))( (Simulator))?/i,
    )
    if (device) {
      const [, name,, version, udid, isSimulator] = device;
      const metadata = {
        name,
        udid
      };

      if (version) {
        metadata.version = version;
        metadata.type = isSimulator ? 'simulator' : 'device';
      } else {
        metadata.type = 'catalyst';
      }

      devices.push(metadata);
    }
  });
  return devices;
}
收工

最后就可以直接通过 yarn ios --device 'xxx的iPhone' 或者 react-native run-ios --device 'xxx的iPhone' 直接运行了,如果提示找不到设备就多运行几次,因为新命令不知道是因为我的硬件问题还是怎么回事,一会输出有我的iphone一会没有,所以提示找不到就在xcode中判断是不是连上了,如果连上了,就多试几次命令就可以了。

两个文件的完整代码我上传到了github上:github.com/qiaomengnan…

感谢这两篇文章给的提示:

gankrin.org/how-to-fix-…

github.com/react-nativ…

本文《react native (Error: Unable To Find Utility “Instruments“, Not A Developer Tool)》版权归-阿布-所有,引用react native (Error: Unable To Find Utility “Instruments“, Not A Developer Tool)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
author-avatar
大盗哈喽小马甲_943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有