如何在 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
我有一个具有屏幕共享功能的应用程序。在 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