macOS:当隐私列表“隐身”时,手动为App注入摄像头权限

macOS:当隐私列表“隐身”时,手动为App注入摄像头权限
1. 为什么你的App在隐私列表里隐身了最近有不少朋友跟我吐槽说在macOS系统里想给微信、Chrome或者飞书这些应用开启摄像头权限时发现隐私与安全性设置里根本找不到这些应用。这事儿我去年就遇到过当时为了开个视频会议折腾了一下午。其实这个问题背后有几个常见原因首先可能是TCCTransparency, Consent, and Control数据库出了问题。这个数据库专门记录应用权限状态就像个严格的保安记录着每个App能干什么不能干什么。有时候系统升级或者异常关机这个保安的记录本就可能出乱子。其次系统完整性保护SIP机制也可能在作祟。这是macOS的一道安全防线防止关键系统文件被修改。但有时候它太尽责了连我们正常的权限修改也给拦住了。还有一种情况是应用标识符Bundle Identifier对不上号。每个Mac应用都有个独一无二的ID就像身份证号。如果系统认不出这个ID自然就不会在权限列表里显示这个应用。2. 诊断问题的三个关键步骤遇到这种情况先别急着重装系统按照我说的这三步来排查第一步检查应用是否真的请求过权限。有些应用第一次使用摄像头时会弹窗询问如果你当时点了拒绝或者没等弹窗出来就关了它可能就默默进了黑名单。可以试试完全退出应用不是简单关闭窗口要右键Dock图标选退出然后重新打开尝试使用摄像头功能。第二步查看TCC数据库状态。打开终端Terminal输入以下命令ls -l ~/Library/Application\ Support/com.apple.TCC/如果看到TCC.db文件且大小正常通常几百KB说明数据库文件存在。如果报错说找不到文件那问题就严重些。第三步确认SIP状态。在终端运行csrutil status如果显示System Integrity Protection status: enabled说明SIP是开启状态。这会影响我们后续的手动修改操作。3. 获取应用标识符的两种方法要给隐身的应用手动添加权限首先得知道它的身份证号——Bundle Identifier。这里分享两个我常用的方法图形界面法打开访达Finder进入应用程序文件夹找到目标应用比如微信右键点击选择显示包内容进入Contents文件夹找到Info.plist文件用文本编辑器打开搜索CFBundleIdentifier字段终端命令法更快捷defaults read /Applications/WeChat.app/Contents/Info.plist CFBundleIdentifier把WeChat.app换成你要查的应用名称就行。比如查Chrome就是defaults read /Applications/Google\ Chrome.app/Contents/Info.plist CFBundleIdentifier记下这串com.xxx.xxx的标识符后面修改权限要用到。4. 手动注入摄像头权限的完整指南终于到重头戏了这里我会分版本详细说明操作步骤。重要提示操作前建议先备份TCC.db文件cp ~/Library/Application\ Support/com.apple.TCC/TCC.db ~/Desktop/TCC_backup.db4.1 macOS 10.15.x (Catalina)操作步骤先完全退出目标应用打开终端输入以下命令以微信为例/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db REPLACE INTO access VALUES(kTCCServiceCamera,com.tencent.xinWeChat,0,1,1,NULL,NULL,NULL,UNUSED,NULL,0,1602129687);这里有几个关键参数要解释kTCCServiceCamera表示这是摄像头权限com.tencent.xinWeChat微信的Bundle Identifier倒数第二个数字0表示未授权1表示已授权最后那个长数字是时间戳可以按当前时间修改4.2 macOS 11.x (Big Sur)及更新版本新系统的TCC数据库结构变了命令也得相应调整/usr/bin/sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db REPLACE INTO access VALUES(kTCCServiceCamera,com.tencent.xinWeChat,0,2,0,1,NULL,NULL,NULL,UNUSED,NULL,0,1608354323);主要区别在于多了几个字段。如果你看到报错说列数不匹配很可能是系统版本和命令不配套。4.3 遇到SIP阻拦怎么办如果执行命令后没效果可能是SIP在搞鬼。这时候需要重启Mac听到启动音时按住CommandR进入恢复模式顶部菜单栏选择实用工具 终端输入命令关闭SIPcsrutil disable重启后再次尝试权限注入操作操作完成后记得重新启用SIP同样的方法进入恢复模式csrutil enable5. 验证权限是否生效的正确姿势很多朋友反馈说改了权限还是用不了其实可能是验证方法不对。正确的验证步骤应该是完全退出目标应用重要执行权限注入命令重新启动应用尝试使用摄像头功能如果还不行可以检查系统日志看有没有线索log stream --predicate subsystem com.apple.TCC --info这个命令会实时显示TCC相关的权限检查记录帮你定位问题。6. 其他常见问题解决方案问题一执行sqlite3命令报错database is locked 这说明有进程正在使用TCC数据库。可以尝试关闭所有可能使用摄像头的应用重启Mac后立即尝试如果还不行可以临时进入安全模式启动时按住Shift问题二修改后应用出现在权限列表但依然无法使用摄像头 这种情况可能是应用的Info.plist缺少摄像头使用声明。需要修改应用包内容建议普通用户不要尝试可以考虑重新安装应用。问题三误操作导致其他应用权限异常 这时候之前备份的TCC.db就派上用场了。可以退出所有应用在终端执行mv ~/Desktop/TCC_backup.db ~/Library/Application\ Support/com.apple.TCC/TCC.db重启Mac最后提醒下这些操作涉及到系统底层数据库一定要仔细核对命令。如果对终端操作不熟悉建议找有经验的朋友帮忙。我上次帮同事处理这个问题时就因为他输错了一个字母结果把Safari的权限搞乱了又得重头来过。

最新新闻

日新闻

周新闻

月新闻