前言
作为一名macOS系统下APP开发人员,最近几年一直在使用Qt做跨平台的APP开发.
某一天,在无任何征兆的情况下,QtCreater启动的调试程序突然就再也无法启动设备的摄像头和麦克风了,然后就一拖再拖没有处理
解决
目标
首先我知道权限修改是macOS系统下的数据库文件设置的,所以目标就比较明确了,只需要手动修改数据库文件
在进行下面的操作之前,你可以尝试一下重置权限,有可能就好了,不需要进行下面繁琐的操作了
//重置所有APP权限
tccutil reset All
//重置某一种权限,下面是麦克风和摄像头
tccutil reset Camera
tccutil reset Microphone
//重置某一个APP权限
tccutil reset SERVICE BUNDLE_ID
eg: // 重置Chrome权限
tccutil reset Camera com.google.Chrome
tccutil reset Microphone com.google.Chrome
权限
找到了macOS Monterey终端添加App权限——以QQ、腾讯会议屏幕录制为例,里面提到了需要关闭SIP,然后就需要查找如何进入macOS系统的更新界面(一般重启系统后长按command+R,直到出现相关界面为止,M2是关机之后长按开机键,出现设置图标之后选择设置图标进入),然后在实用工具中打开终端输入
csrutil disable
reboot
修改
不同的系统肯能对应的~/Library/Application\ Support/com.apple.TCC/
路径下TCC.db
文件的表结构不同,所以我们可以使用相关的SQL软件打开,或者使用sqlite3命令打开数据库文件
sqlite> select * from access where service in ('kTCCServiceCamera', 'kTCCServiceMicrophone');
kTCCServiceCamera|com.vmware.fusion|0|2|4|1|??||0|UNUSED||0|1711697594|||UNUSED|0
kTCCServiceMicrophone|com.vmware.fusion|0|2|4|1|??||0|UNUSED||0|1711699918|||UNUSED|0
根据你自己系统的表结构来修改下面的参数
//终端输入sqlite3
.open TCC.db
//第一步查看对应表结构,
select * from access;
//注意!!!,不同系统的表结构字段数目不尽相同,所以下面的命令需要做相应修改
#摄像头权限
INSERT or REPLACE INTO access VALUES('kTCCServiceCamera','app.uubox.QUVCView',0,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1577993260,NULL,NULL,'UNUSED',0);
#麦克风权限
INSERT or REPLACE INTO access VALUES('kTCCServiceMicrophone','app.uubox.QUVCView',0,2,4,1,NULL,NULL,0,'UNUSED',NULL,0,1577993260,NULL,NULL,'UNUSED',0);