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)的解决方法相关推荐

  1. 编译原理实验二 macos系统 itoa方法报错解决方法

    编译原理实验二 生成符号表的前期准备中使用itoa函数报错问题 执行 gcc -o parser lex.yy.c parser.tab.c ast.c 显示: itoa 函数是一个广泛应用的,从非标 ...

  2. 1909升级卡64_苹果最新系统 macOS Catalina 10.15正式版更新,有哪些升级注意事项

    苹果最新系统 macOS Catalina 10.15 正式版上线啦,此次更新带来了许多重大改变,包括 iTunes 正式被拆分为播客.电视.音乐 3 款独立应用.新系统新增「屏幕时间」.「查找」.「 ...

  3. 升级mac最新系统macOS Catalina 10.15

    升级mac最新系统macOS Catalina 10.15 不少人会遇到升级不了最新max系统的情况 比如:此版本的macOS 10.15.1不能按照在这台电脑上 我是10.12升级上去的,普通的从a ...

  4. 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. ...

  5. Mac系统怎么升级到macOS Catalina 10.15 beta版

    Mac系统怎么升级到macOS Catalina 10.15 beta版 具体的操作方法,可以参考文章: 如何将Mac OS更新到Catalina beta版本? 但是升级的过程中,却遇到了一个问题. ...

  6. Windows下VMware Workstations Pro15.5.0安装dmg镜像(macOS Catalina 10.15虚拟机)

    喜闻乐见.大快人心.普天同庆.奔走相告\color{red}喜闻乐见.大快人心.普天同庆.奔走相告喜闻乐见.大快人心.普天同庆.奔走相告 喜闻乐见.大快人心.普天同庆.奔走相告\color{red}喜 ...

  7. macOS软件打不开的解决方法

    升级到最新的macOS系统后,有一些破解软件可能会出现打不开的情况,并弹出如下几种提示: 1."Sketch.app"已损坏,无法打开. 您应该推出磁盘映像. 2.打不开" ...

  8. 再见 iTunes!苹果macOS Catalina 10.15正式版更新

    10月8日,苹果今日推送了了适用于Mac的大型新系统更新macOS Catalina 10.15 正式版升级.取消对Mac上所有32位应用和游戏的支持,同时iTunes也不再存在,被三款独立应用取代. ...

  9. 【macOS Catalina 10.15.X(19xx)原版镜像合集】

    macOS Catalina 10.15.X(19xx)原版镜像合集 Mac 的本领,突飞猛进. 音乐.播客,联袂登台 iTunes 曾深刻影响了人们的视听娱乐方式.如今,音乐和播客这两款全新 app ...

最新文章

  1. 记selenium1.0升级到selenium2.0
  2. OpenSessionInViewFilter原理以及为什么要用OpenSessionInViewF
  3. PCIE4.0 简单介绍
  4. Android 事件分发面试题2
  5. Angular应用Base Element Href属性的设置
  6. java从入门到精通_Java---开发从入门到精通,分享视频学习教程
  7. adb shell 是这个啥东东
  8. 【转】Git代码行统计命令集
  9. DORADO实现动态拼装查询条件
  10. 因文件包含病毒或潜在的垃圾软件导致被防火墙拦截的解决方法
  11. FTPS服务器搭建流程
  12. Google Hack 最新版
  13. 网络工程师有什么发展?
  14. 二维动画毕业论文参考文献精选
  15. Excel下拉菜单如何制作?
  16. 【DKN】(四)train.py
  17. A4纸的像素和分辨率
  18. QQ 空间日志批量导出到CSDN
  19. 假期,推荐豆瓣评分 9.0 以上的 100 部必看电影
  20. 基于stm32c8t6的两轮平衡小车 第一篇——物料选购

热门文章

  1. 记录每天学习的新知识:MotionEvent
  2. 以“最大化”的方式打开资源管理器
  3. DockerKubernetes ❀ Docker Datavolume 数据卷的使用与原理说明
  4. linux环境下如何部署war包及常用命令
  5. php程序yii是什么意思,Yii框架是什么
  6. ORACLE RAC ONE NODE技术介绍
  7. 知途云大学本地实验台迎来重大更新
  8. 速卖通双11大促期间如何让商品爆单,这些运营技巧一定要知道
  9. 什么是防火墙的入站规则和出站规则.如何新建入站规则
  10. eclipse怎么导入压缩包_eclipse压缩包安装教程