¿Cómo puedo evitar las fallas relacionadas con los permisos al importar en Photos.app a través de AppleScript?

3

El nuevo Photos.app no viene con el soporte de Automator (aunque hay acciones de terceros disponibles) . Sin embargo, tiene algún soporte básico de AppleScript, incluido el soporte para importar una lista de archivos.

Sinembargo,nopuedohacerqueestaacciónfuncionecorrectamente.Cualquierintentodeusarlo,comoatravésdelsiguientescriptsimple

tellapplication"Photos"
    set theList to {"/Full/Path/To/Some/Photo.jpg"}
    import theList
end tell

hará que Photos.app informe que "no se pueden recuperar metadatos" del archivo porque puede que no sea una foto (sin embargo, el mismo archivo se puede importar manualmente ). Una investigación adicional revela que el enfoque automatizado está fallando debido a la falta de permiso para leer el archivo .

Desde Console.app:

4/11/15 9:07:49.333 AM sandboxd[253]: ([3934]) Photos(3934) deny file-read-data /Full/Path/To/Some/Photo.jpg

(seguido de una gran cantidad de mensajes de error similares). Las acciones de Automator de terceros que vinculé anteriormente tienen el mismo problema, por lo que vale la pena.

¿Cómo puedo otorgar el permiso adecuado a Photos.app o al flujo de trabajo de AppleScript / Automation para realizar esta importación? Tenga en cuenta que el "permiso" parece ser algo distinto de (o además de) los permisos de archivo habituales, porque el archivo y la carpeta están configurados para "leer / escribir por todos" (la opción nuclear) No cambia el comportamiento.

    
pregunta 11.04.2015 - 18:20

2 respuestas

2

Basado en esto de un antiguo Notas de versión de Applescript en la caja de arena ...

  

Al enviar comandos a una aplicación de espacio aislado, como TextEdit en OS X Mountain Lion, los parámetros que se refieren a archivos deben ser de un tipo explícito de archivo y no una cadena simple, o la aplicación de destino no podrá acceder el archivo. Por ejemplo, el archivo "Macintosh HD: Users: me: sample.txt", el archivo POSIX "/Users/me/sample.txt", o el resultado de elegir el archivo serían todos aceptables, pero la cadena "/ Users / me / sample.txt "no lo haría.

&

  

Nota: Como se mencionó anteriormente en Compatibilidad, las aplicaciones de espacio aislado no podrán acceder a los archivos a los que se hace referencia en los comandos que usan una ruta de cadena. Cualquier parámetro o propiedad en su aplicación que haga referencia a archivos debe declararse como tipo de archivo y no escribir texto. Apple Event Manager agregará extensiones de sandbox a eventos que tengan parámetros de tipo archivo, pero solo si el parámetro es de un tipo de archivo reconocido: typeAlias, typeFileURL, cFile, etc. Sin estas extensiones, el archivo no será accesible desde el recinto de seguridad de la aplicación de destino, y el comando probablemente fallará.

Parece que el 'arreglo' es usar POSIX file para evitar el problema de la caja de arena

Después de algunos comentarios sobre cómo hacer que Applescript funcione con POISIX file de una lista, se me ocurrió esto ...

tweaked

set theList to {"/Volumes/Downloads/ScreenShot.png", "/Volumes/Downloads/ScreenShot2.png", "/Volumes/Downloads/ScreenShot3.png"}
set l to {}
repeat with f in theList
    set l to l & (POSIX file f)
end repeat
tell application "Photos" to import l

No es perfecto, ya que cada importación es nueva, pero funciona.
Ahora funciona en una importación.

    
respondido por el Tetsujin 11.04.2015 - 19:39
0

También puede insertar esta línea en cualquier lugar antes de la línea de exportación en su código:

open for access file f

Esto pareció hacer el truco para mí.

    
respondido por el PHennessey 21.02.2017 - 19:43

Lea otras preguntas en las etiquetas