蓝牙模块Noble不兼容最新的macOS系统(10.15.4)的解决方法
2020年3月底,macOS新版本的系统:catalina 10.15.4发布了,测试和产品提出问题:当更新了最新的系统后,electron的项目中的蓝牙功能不能用了。
看了一下目前正在使用的蓝牙模块的底层代码:
发现以前的同事也遇过macOS版本更新后,noble模块不能兼容的问题,解决方法主要是去把noble模块的发起蓝牙连接和写入指令等js代码改写,关键点是改写通信id。如上图,noble模块很多接口都有一个msgId,而这个msgId在不同的系统版本上是不一样的。
那我怎么知道在新的macOS系统是,对应的很多个接口(startScan接口、discover接口、stateChange、stopScan、connent、disconnect、updateRssi等很多接口),他们的msgId 是什么呢?
方法是通过循环破解的方法去找,代码如下:
思路是,在需要寻找msgId的地方,直接写代码循环,一次性提交很多个msgId的请求,监听的时候也是,直接监听很多个kCBMsgId,这样子总有一个提交的msgId会对应命中到监听的on方法上的kCBMsgId,以此类推,一个一个方法去找,就能找到对应的id,改写过来。
我用这种方法确实也能找出很多msgId在macOs系统的catalina 10.15.4版本上的兼容的id,如下:
stateChange: 6
startScanning: 53
response to startScanning: 60
scanStop: 52
connect: 56
response to connect: 63
response to disconnect: 61
discoverServices: 102
response to discover service: 107
但是当我找到response to discoverservice 这个方法的时候,107的on监听方法能够接收到硬件返回的数据,但是参数内容相比以前的版本,变了:
具体改变的内容是:
旧版本上,response to discoverservice方法返回的参数是:
macOS catalina 10.15.4上,response to discoverservice方法返回的参数是:
少了servicesUuid,而这个参数的确是导致后面连接不上蓝牙。经过调试,发现修复不了,此问题似乎是noble模块在最新的macOS10.15.4上的一个bug,然后去github上相关issue上提了问题。得到的回复是:请使用这个蓝牙模块:@abandonware/noble
看了一下,该库的底层不是js了,而是c++写的。
然后就在当前项目中引入当前@abandonware/noble模块,发现很多报错,其中就有无法编译binding.node模块的问题。这应该是在我的项目中,electron版本过低,1.4.5,在编译底层c++模块以及其引用的其他c++和node原生的模块的时候,报错了。
然后就打算升级electron版本,但是因为整个项目包括node、npm、以及其他依赖包,很多版本都是相互匹配的,升级过程中依然遇到很多版本不匹配,或者can’t resolve一些模块的问题,导致无法引入并跑起@abandonware/noble
继续寻找方法。。。
在github上找了一个新的项目demo,electron-vue,https://github.com/SimulatedGREG/electron-vue ,发现在此项目上可以引入@abandonware/noble,并且编译通过,能够被调用。
然后就在此项目框架上,改写自己的项目底层,原本自己的项目,是用electron+cooking做的,打包的cooking早就没有维护了,electron版本1.4.5也太低了。
然后就是项目迁移,electron版本也升级到2.0.4,cooking改为webpack,解决了很多模块依赖的报错,打包和编译的报错,然后终于能运行起来了,@abandonware/noble也能正常连接到蓝牙。
@abandonware/noble遇到一个小坑:
它的write方法,不能接收undefined数据了,估计跟底层语言有关,需要加个判断才行,如上图。否则write方法不能用,写入蓝牙指令功能就不能用了。
蓝牙模块Noble不兼容最新的macOS系统(10.15.4)的解决方法相关推荐
- 编译原理实验二 macos系统 itoa方法报错解决方法
编译原理实验二 生成符号表的前期准备中使用itoa函数报错问题 执行 gcc -o parser lex.yy.c parser.tab.c ast.c 显示: itoa 函数是一个广泛应用的,从非标 ...
- 1909升级卡64_苹果最新系统 macOS Catalina 10.15正式版更新,有哪些升级注意事项
苹果最新系统 macOS Catalina 10.15 正式版上线啦,此次更新带来了许多重大改变,包括 iTunes 正式被拆分为播客.电视.音乐 3 款独立应用.新系统新增「屏幕时间」.「查找」.「 ...
- 升级mac最新系统macOS Catalina 10.15
升级mac最新系统macOS Catalina 10.15 不少人会遇到升级不了最新max系统的情况 比如:此版本的macOS 10.15.1不能按照在这台电脑上 我是10.12升级上去的,普通的从a ...
- bigsur正式版clover引导_【微信首发】macOS Catalina 10.15.6 19G2021 正式版 Clover/OC/PE三分区原版镜像...
[微信首发]macOS Catalina 10.15.6 19G2021 正式版 Clover 5120/OC/PE三分区支持Intel及AMD双平台原版镜像 8月13日,苹果向macOS推送10. ...
- Mac系统怎么升级到macOS Catalina 10.15 beta版
Mac系统怎么升级到macOS Catalina 10.15 beta版 具体的操作方法,可以参考文章: 如何将Mac OS更新到Catalina beta版本? 但是升级的过程中,却遇到了一个问题. ...
- Windows下VMware Workstations Pro15.5.0安装dmg镜像(macOS Catalina 10.15虚拟机)
喜闻乐见.大快人心.普天同庆.奔走相告\color{red}喜闻乐见.大快人心.普天同庆.奔走相告喜闻乐见.大快人心.普天同庆.奔走相告 喜闻乐见.大快人心.普天同庆.奔走相告\color{red}喜 ...
- macOS软件打不开的解决方法
升级到最新的macOS系统后,有一些破解软件可能会出现打不开的情况,并弹出如下几种提示: 1."Sketch.app"已损坏,无法打开. 您应该推出磁盘映像. 2.打不开" ...
- 再见 iTunes!苹果macOS Catalina 10.15正式版更新
10月8日,苹果今日推送了了适用于Mac的大型新系统更新macOS Catalina 10.15 正式版升级.取消对Mac上所有32位应用和游戏的支持,同时iTunes也不再存在,被三款独立应用取代. ...
- 【macOS Catalina 10.15.X(19xx)原版镜像合集】
macOS Catalina 10.15.X(19xx)原版镜像合集 Mac 的本领,突飞猛进. 音乐.播客,联袂登台 iTunes 曾深刻影响了人们的视听娱乐方式.如今,音乐和播客这两款全新 app ...
最新文章
- 记selenium1.0升级到selenium2.0
- OpenSessionInViewFilter原理以及为什么要用OpenSessionInViewF
- PCIE4.0 简单介绍
- Android 事件分发面试题2
- Angular应用Base Element Href属性的设置
- java从入门到精通_Java---开发从入门到精通,分享视频学习教程
- adb shell 是这个啥东东
- 【转】Git代码行统计命令集
- DORADO实现动态拼装查询条件
- 因文件包含病毒或潜在的垃圾软件导致被防火墙拦截的解决方法
- FTPS服务器搭建流程
- Google Hack 最新版
- 网络工程师有什么发展?
- 二维动画毕业论文参考文献精选
- Excel下拉菜单如何制作?
- 【DKN】(四)train.py
- A4纸的像素和分辨率
- QQ 空间日志批量导出到CSDN
- 假期,推荐豆瓣评分 9.0 以上的 100 部必看电影
- 基于stm32c8t6的两轮平衡小车 第一篇——物料选购
热门文章
- 记录每天学习的新知识:MotionEvent
- 以“最大化”的方式打开资源管理器
- DockerKubernetes ❀ Docker Datavolume 数据卷的使用与原理说明
- linux环境下如何部署war包及常用命令
- php程序yii是什么意思,Yii框架是什么
- ORACLE RAC ONE NODE技术介绍
- 知途云大学本地实验台迎来重大更新
- 速卖通双11大促期间如何让商品爆单,这些运营技巧一定要知道
- 什么是防火墙的入站规则和出站规则.如何新建入站规则
- eclipse怎么导入压缩包_eclipse压缩包安装教程