如何在SwiftUI中通过代码触发Mac的屏幕录制权限请求?
Mac屏幕录制权限仅首次触发的解决方案
macOS的隐私权限机制默认会记住用户对应用的权限选择,所以首次调用CGRequestScreenCaptureAccess()弹出请求后,后续再调用就只会直接返回之前的允许/拒绝状态,不会再弹框。以下是解决办法:
手动重置应用权限
- 打开系统设置(旧版叫系统偏好设置)
- 进入「隐私与安全性」面板
- 找到「屏幕录制」分类
- 在应用列表里找到你的App,先取消勾选,再重新勾选
改完记得重启App,新权限才会生效
代码里做权限预检查
在调用请求之前,先判断当前权限状态,避免无效调用,还能引导用户去设置里开启:
import CoreGraphics func handleScreenCapturePermission() { // 先预检查权限状态,不会弹框 guard !CGPreflightScreenCaptureAccess() else { print("权限已获取") return } // 尝试请求权限(仅当用户还没做过选择时才会弹框) let granted = CGRequestScreenCaptureAccess() if granted { print("权限已授予") } else { print("权限未授予,请前往系统设置 > 隐私与安全性 > 屏幕录制 开启权限") // 这里可以加个自定义弹窗提示用户去设置 } } // 调用处理函数 handleScreenCapturePermission()
极端情况:重置整个屏幕录制权限数据库
如果上面的方法都没用,可以用终端命令重置所有App的屏幕录制权限:
tccutil reset ScreenCapture
执行完重启Mac,App再次调用权限请求时就会重新弹框了。
内容的提问来源于stack exchange,提问作者Salman Developer
相关产品推荐
相关产品推荐

