如何在 macOS Catalina 上触发屏幕录制权限系统模态对话框

How to trigger screen recording permission system modal dialog on macOS Catalina

我有一个具有屏幕共享功能的应用程序。在 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 下注册,因此我无法授予它权限。有没有人知道,我该如何解决这个问题?

屏幕录制提示只会出现一次 - 第一次调用尝试录制用户屏幕的 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. 重置应用的权限,就好像您从未调用过屏幕录制 API 或使用 All 而不是 ScreenCapture 为您的应用重置所有权限。

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

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

tccutil reset ScreenCapture

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

tccutil reset ScreenCapture [com.WHATEVERBUNDLE.YOURAPPID]

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

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