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

La nueva aplicación Photos.app no ​​viene con soporte para Automator (aunque hay acciones de terceros disponibles) . Sin embargo, tiene soporte básico para AppleScript, incluido el soporte para importar una lista de archivos.

Diccionario AppleScript

Sin embargo, no puedo hacer que esta acción funcione correctamente. Cualquier intento de usarlo, como a través del siguiente script simple

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

hará que Photos.app informe que "no se pudieron recuperar metadatos" del archivo porque es posible que no sea una foto (sin embargo, el mismo archivo se puede importar manualmente ). Investigaciones posteriores revelan 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 serie de mensajes de error similares). Las acciones de Automator de terceros que vinculé anteriormente tienen el mismo problema, por lo que vale.

¿Cómo puedo otorgar el permiso adecuado a Photos.app o al flujo de trabajo de ejecución de AppleScript/Automatización para realizar esta importación? Tenga en cuenta que el "permiso" parece ser algo diferente a (o además de) los permisos de archivo habituales, porque configurar el archivo y la carpeta para que todos "lean/escriban" (la opción nuclear) no cambia el comportamiento.

no es mi punto fuerte, pero eso no parece un error de permanente, sino uno de sandboxing
Sí, creo que ese es absolutamente el caso, pero no tengo idea de qué modificar para solucionarlo o solucionarlo.
de documentos de Applescript: cuando se envían 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 del tipo de archivo explícito y no una cadena simple, o la aplicación de destino no podrá acceder al archivo. Por ejemplo, el archivo "Macintosh HD:Users:me:sample.txt", el archivo POSIX "/Users/me/sample.txt" o el resultado de elegir archivo serían aceptables, pero la cadena "/Users/me/ muestra.txt" no lo haría.
Parece que agregar un archivo POSIX lo arreglaría
Suena prometedor, pero AppleScript me dice que "no puede convertir el archivo 'ruta: al: archivo' en el tipo esperado" cuando la ejecución llega a la línea "importar". :(
establezca theList en {archivo POSIX "/ruta/a/archivo.png"} <- va dentro de los corchetes
¿ Quizás esta aplicación gratuita puede descubrir un problema técnico no deseado?

Respuestas (2)

Basado en esto de un antiguo Applescript Release Notes sobre sandboxing...

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 de archivo explícito y no una cadena simple, o la aplicación de destino no podrá acceder al archivo. Por ejemplo, el archivo "Macintosh HD:Users:me:sample.txt", el archivo POSIX "/Users/me/sample.txt" o el resultado de elegir archivo serían aceptables, pero la cadena "/Users/me/ muestra.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 se refiera a archivos debe declararse como tipo archivo y no como texto. Apple Event Manager agregará extensiones de espacio aislado a los eventos que tengan parámetros similares a archivos, pero solo si el parámetro es de un tipo similar a un archivo reconocido: typeAlias, typeFileURL, cFile, etc. Sin estas extensiones, no se podrá acceder al archivo desde el entorno limitado de la aplicación de destino y es probable que el comando falle.

Parecería que la 'solución' es para POSIX fileevitar el problema de la zona de pruebas

Después de un poco de martillazos sobre cómo hacer que Applescript funcione con POISIX fileuna lista, se me ocurrió esto...

modificado

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.

modificado - mejor, una importación
¿Cuál es su "decir" más externo allí? No puedo decirle a Finder ni a System Events que hagan esto; ambos me dan lo mismo "no se puede obtener el archivo POSIX <...> del archivo <...>" :(
Bien, entendido: lo que publicaste tiene que estar completamente fuera de un indicador (lo tenía dentro de uno porque necesito decirle a Eventos del sistema que obtengan todos los archivos en una carpeta; olvidé que en realidad podrías tener declaraciones fuera de un indicador/función, así que eso es por qué seguía recibiendo un error).
Me alegro de que lo hayas conseguido. Asumí que su lista inicial se construiría de manera diferente, pero no tenía forma de saber exactamente cómo.
@Tetsujin ¿Alguna idea sobre cómo manejar esta pregunta? Parece el mismo problema, pero no puedo aplicarlo a mi problema. apple.stackexchange.com/questions/269539/…

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í.