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

bem*_*l12 2 screen-recording xcode11 macos-catalina

我有一个具有屏幕共享功能的应用程序。在macOS Catalina beta8(19A558d)上,您必须授予权限屏幕录制权限才能共享屏幕(没有权限,仅背景和菜单栏将与另一端共享)。不幸的是,我真的不知道哪个事件或调用会触发系统模式对话框,有时会出现该对话框,有时却没有(系统模式对话框显示在第75页:https : //devstreaming-cdn.apple.com/videos /wwdc/2019/701ngx868rfo8jlj/701/701_advances_in_macos_security.pdf?dl=1)。因此,这绝对是不确定的。如果不与该模式对话框进行交互,则我的应用程序将不会在“安全和隐私/屏幕录制”下注册,因此我无法授予其许可。有人有什么想法,我该如何解决这个问题?

Nic*_*Nic 7

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

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

tccutil reset ScreenCapture
Run Code Online (Sandbox Code Playgroud)

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

tccutil reset ScreenCapture [com.WHATEVERBUNDLE.YOURAPPID]
Run Code Online (Sandbox Code Playgroud)

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

  • 我希望它也允许添加条目。由于某种原因,我正在使用的应用程序不再请求权限,因此我无法进行屏幕共享。真是一团糟至少这个解决方案确实明确了权限值。谢谢 (3认同)

Jor*_*n H 5

屏幕录制提示将仅出现一次-首次调用试图记录用户屏幕的API时,例如:

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

如您所述,您的应用程序将不会出现在“屏幕录像”下的“系统偏好设置”中,直到您调用屏幕录像API从而触发系统提示。

如果触发了提示而用户拒绝了该提示,则无法再次显示该提示-用户必须在系统偏好设置中手动启用它。

在构建和测试此应用程序时,可以通过tccutil reset ScreenCapture com.company.appname.Or使用All代替重置应用程序的所有权限,就像从未使用过屏幕录制API一样重置应用程序的权限ScreenCapture

  • 不要使用“全部”,而使用“ScreenCapture”。一切都会重置许多其他事情。 (2认同)