CGPreflightScreenCaptureAccess 在开发版本中始终返回 false

Sal*_*lem 1 cocoa screen-recording swift macos-monterey

我正在 Xcode 13.2.1 中为 macOS(本地 12.1)编写一个应用程序。我需要屏幕截图访问权限,似乎获得此权限的最简单方法(在 macOS 11 及更高版本中)是使用CGRequestScreenCaptureAccess,并使用以下命令检查资格CGPreflightScreenCaptureAccess

/sf/answers/4579668411/

我的代码基本上是这样的:

let hasScreenAccess = CGPreflightScreenCaptureAccess();
if (!hasScreenAccess) {
    CGRequestScreenCaptureAccess()
}
Run Code Online (Sandbox Code Playgroud)

当我运行新构建时,模式会按预期显示: 请求录音权限的应用程序的屏幕截图

我可以看到我的应用程序出现在系统偏好设置中,也符合预期: 系统偏好设置的屏幕录制权限部分中的应用程序屏幕截图

启用我的应用程序的权限会提示我退出我的应用程序并重新启动它。这将从应用程序商店重新启动我的应用程序的生产副本。但是,如果我退出并在 XCode 中重新运行相同的构建,我的构建仍然没有被授予录制屏幕的权限(即使它在系统偏好设置中显示为已启用)。如何允许我的应用程序有权在本地录制我的屏幕?

Ale*_*ens 5

在重命名我们的一个使用/usr/sbin/screencapture命令行工具的应用程序后,我们遇到了类似的问题。无论系统偏好设置中的激活状态如何,每次触发屏幕捕获时都会出现安全提示。

在开发过程中,该tccutil reset ScreenCapture {bundle identifier}命令有助于保持权限干净,以便进行后续测试。