macOS:给APP增加摄像头麦克风权限

前言

作为一名macOS系统下APP开发人员,最近几年一直在使用Qt做跨平台的APP开发.
某一天,在无任何征兆的情况下,QtCreater启动的调试程序突然就再也无法启动设备的摄像头和麦克风了,然后就一拖再拖没有处理
因为之前修了近一个月的陪产假,老婆给生了一个大胖小子,😀.今天是2024年第一天上班,没什么事就解决一下吧.

解决

目标

首先我知道权限修改是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

搜索

作为一个程序员,第一步就是百度或者Google相关信息,然后就找到了macOS:给 app 添加摄像头权限文章,首先就是拿到作者提供的数据进行尝试,然后结果就是没有权限.
所以下一步就是解文件决权限问题

权限

还是搜索,然后就找到了macOS Monterey终端添加App权限——以QQ、腾讯会议屏幕录制为例,里面提到了需要关闭SIP,然后就需要查找如何进入macOS系统的更新界面(一般重启系统后长按command+R,直到出现相关界面为止,M2是关机之后长按开机键,出现设置图标之后选择设置图标进入),然后在实用工具中打开终端输入

csrutil disable
reboot

修改

不同的系统肯能对应的~/Library/Application\ Support/com.apple.TCC/ 路径下TCC.db文件的表结构不同,所以我们可以使用相关的SQL软件打开,或者使用sqlite3命令打开数据库文件
@macOS14.1.1系统下,表结构

根据你自己系统的表结构来修改下面的参数

//终端输入sqlite3
.open TCC.db
//第一步查看对应表结构,
select * from access;
//注意!!!,不同系统的表结构字段数目不尽相同,所以下面的命令需要做相应修改
REPLACE INTO access VALUES('kTCCServiceMicrophone','包名',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1608354323,NULL,NULL,'UNUSED',0);
REPLACE INTO access VALUES('kTCCServiceCamera','包名',0,2,2,1,NULL,NULL,NULL,'UNUSED',NULL,0,1608354323,NULL,NULL,'UNUSED',0);

总结

平心静气,循序渐进

引用

macOS:给 app 添加摄像头权限
macOS Monterey终端添加App权限——以QQ、腾讯会议屏幕录制为例
sqlite3 命令行查看数据内容
A deep dive into macOS TCC.db

posted @ 2024-01-02 17:15  严_青  阅读(406)  评论(0编辑  收藏  举报