12

我有一个具有屏幕共享功能的应用程序。在 macOS Catalina beta8 (19A558d) 上,您必须授予屏幕录制权限才能共享您的屏幕(未经许可,只会与对方共享您的背景和菜单栏)。不幸的是,我真的不知道是哪个事件或调用触发了系统模态对话框,有时对话框出现,有时不出现。

系统模式对话框显示在 wwdc macos 安全文档的第 75 页:
https ://devstreaming-cdn.apple.com/videos/wwdc/2019/701ngx868rfo8jlj/701/701_advances_in_macos_security.pdf?dl=1

所以它是绝对不确定的。如果不与此模式对话框交互,我的应用程序将不会在 下注册Security & Privacy / Screen Recording,因此我无法授予它权限。有谁知道,我该如何解决这个问题?

4

3 回答 3

13

录屏提示只会出现一次——第一次调用试图录屏的API,比如:

CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
});
if (stream) {
    CFRelease(stream);
}

如您所述,在您调用屏幕录制 API 从而触发系统提示之前,您的应用不会出现在屏幕录制下的系统偏好设置中。

如果您触发提示并且用户拒绝它,您将无法再次显示提示 - 用户必须在“系统偏好设置”中手动启用它。

在构建和测试这个时,您可以重置您的应用程序的权限,就好像您从未调用屏幕录制 API 一样,通过tccutil reset ScreenCapture com.company.appname.或使用All而不是ScreenCapture重置您的应用程序的所有权限。

于 2019-09-27T23:35:58.770 回答
7

我在Ask Different.SE上回答了同样的问题。您需要tccutil重置这些权限。

重置屏幕录制应用程序的隐私数据库:

tccutil reset ScreenCapture

或者,如果您知道应用程序包标识符,则可以重置单个应用程序。

tccutil reset ScreenCapture [com.WHATEVERBUNDLE.YOURAPPID]

重置隐私权限后,您必须退出应用程序,更改才会生效。然后您可以重新启动您的应用程序并再次尝试屏幕录制,提示应该会再次出现。

于 2020-03-12T23:47:42.047 回答
-1

试试这个:大声喊出你的 Mac。使用 Cmd+R 启动 打开终端 ..$ csrutil enable Reboot Mac

于 2020-09-10T14:21:26.813 回答