macOS 11+
现在,苹果提供了API来确定您的应用程序是否具有屏幕录制访问权限,可以使用CGPreflightScreenCaptureAccess()
查看是否有该权限,并使用CGRequestScreenCaptureAccess()
请求该权限。请求访问将呈现系统提示并自动将您的应用程序添加到列表中,以便用户只需启用访问即可。系统提示每个应用程序会话仅出现一次。例如,如果他们在第一个提示中点击拒绝,则如果您的应用再次请求访问,则不会出现该提示。但是,如果他们退出并重新启动您的应用程序,则您的应用程序可能会再次请求访问,然后该提示将出现。
原始回答:
屏幕录制提示仅会出现一次-当您调用尝试记录用户屏幕的API时,例如:
CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
});
if (stream) {
CFRelease(stream);
}
正如您指出的那样,在触发系统提示之前,您的应用程序不会在“屏幕录制”下出现在“系统偏好设置”中。
如果触发提示并且用户拒绝了它,您将无法再次弹出该提示 - 用户必须在“系统偏好设置”中手动启用它。
有用的测试信息:
在构建和测试过程中,您可以通过 tccutil reset ScreenCapture com.company.appname
重置应用程序的权限,就好像您从未调用过屏幕录制API一样。或者使用 All
而不是 ScreenCapture
为您的应用程序重置所有权限。