我有一个具有屏幕共享功能的应用程序。在macOS Catalina beta8(19A558d)上,您必须授予权限屏幕录制权限才能共享屏幕(没有权限,仅背景和菜单栏将与另一端共享)。不幸的是,我真的不知道哪个事件或调用会触发系统模式对话框,有时会出现该对话框,有时却没有(系统模式对话框显示在第75页:https://devstreaming-cdn.apple.com/videos/wwdc/2019/701ngx868rfo8jlj/701/701_advances_in_macos_security.pdf?dl=1)。因此,这绝对是不确定的。如果不与该模式对话框进行交互,则我的应用程序将不会在“安全和隐私/屏幕录制”下注册,因此我无法授予其许可。有人有什么想法,我该如何解决这个问题?
答案 0 :(得分:5)
屏幕录制提示将仅出现一次-首次调用试图记录用户屏幕的API时,例如:
cv2.bitwise_not(mask_black)
如您所述,您的应用程序只有在调用屏幕录像API从而触发系统提示后,才会出现在“屏幕录像”下的“系统偏好设置”中。
如果触发了提示而用户拒绝了该提示,则无法再次显示该提示-用户必须在系统偏好设置中手动启用它。
在进行构建和测试时,您可以通过CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
});
if (stream) {
CFRelease(stream);
}
重置应用程序的权限,就像从未调用过屏幕录制API一样,也可以使用tccutil reset ScreenCapture com.company.appname.
而非All
重置所有权限为您的应用程序
答案 1 :(得分:4)
我在Ask Different.SE上回答了相同的问题。您需要tccutil
才能重置这些权限。
重置“屏幕录制”应用程序的隐私数据库:
tccutil reset ScreenCapture
或者,如果您知道应用包标识符,则可以重置单个应用。
tccutil reset ScreenCapture [com.WHATEVERBUNDLE.YOURAPPID]
重置了隐私权限后,必须退出应用程序,更改才能生效。然后,您可以重新启动应用程序并尝试再次进行屏幕录制,并且提示应重新出现。
答案 2 :(得分:0)
尝试一下: 大喊Mac。 使用Cmd + R启动 打开终端 .. $ csrutil启用 重新启动Mac