es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CGPreflightScreenCaptureAccess siempre devuelve false en las versiones de desarrollo.

Estoy escribiendo una aplicación para macOS (12.1 localmente) en Xcode 13.2.1. Necesito acceso a capturas de pantalla, y parece que la forma más fácil de obtener permisos para eso (en macOS 11 o posterior) es utilizar CGRequestScreenCaptureAccess, y verificar la elegibilidad utilizando CGPreflightScreenCaptureAccess:

https://stackoverflow.com/a/65423834/444912

Mi código se ve así:

let hasScreenAccess = CGPreflightScreenCaptureAccess();
if (!hasScreenAccess) {
    CGRequestScreenCaptureAccess()
}

Cuando ejecuto una nueva compilación, aparece un modal como se esperaba:
Captura de pantalla de la aplicación solicitando permisos de grabación

Y puedo ver que mi aplicación aparece en Preferencias del Sistema, como se esperaba también:
Captura de pantalla de la aplicación en la sección de permisos de grabación de pantalla de Preferencias del Sistema

Al habilitar los permisos de mi aplicación, se me solicita que cierre mi aplicación y la reinicie. Esto reinicia mi copia productiva de mi aplicación, desde la App Store. Sin embargo, si cierro esa aplicación y vuelvo a ejecutar la misma compilación en XCode, mi compilación aún no recibe permiso para grabar la pantalla (a pesar de que aparece como habilitada en Preferencias del Sistema). ¿Cómo permito que mi aplicación tenga permisos para grabar mi pantalla localmente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para permitir que tu aplicación tenga permisos para grabar la pantalla localmente, debes asegurarte de que la compilación que se ejecuta desde Xcode y la copia de producción de la App Store compartan el mismo ID de equipo y identificador de paquete. Esto garantiza que la firma del código de la aplicación sea la misma en ambos casos, lo cual es necesario para que se otorgue el permiso de grabación de pantalla de forma global en lugar de solo para la instancia específica de la aplicación que lo solicitó. Puedes verificar el ID de equipo y el identificador de paquete en Xcode seleccionando el objetivo de tu aplicación e inspeccionando la pestaña “General”.

Comments are closed.