Problemas de Applescript al cambiar el nombre de un archivo y obtener el alias para cambiar su nombre también

Me he encontrado con un problema particular con un guión más grande que estoy escribiendo. Estoy tratando de cambiar el nombre de todos los archivos en una carpeta con un prefijo de "temp_" y, al hacerlo, el alias de ese archivo aún se puede direccionar desde AppleScript después de agregar el prefijo al archivo. El siguiente código funciona en ALGUNAS máquinas pero no en otras. Lo probé en un MBP 2018 con 10.13, un Mac Mini 2012 con 10.13 y un iMac 2015 con 10.13 y 10.14. El iMac es la única máquina que tiene problemas con este código:

tell application "Finder"
set theSelection to the selection -- so you must have a folder with files selected in Finder before running this code.
set theFiles to the files of (item 1 of theSelection) --get the files
end tell
repeat with f from 1 to (count theFiles)
    set aItem to item f of theFiles -- set a variable as an individual file
    set pdfName to name of aItem --get the name of that file
    set aliasItem to aItem as alias -- get the alias of the file
    tell application "Finder"
        set the name of aliasItem to (("temp_" & (name of aliasItem)) as string) --rename the file
    end tell
    display dialog (aliasItem as string) buttons {"Cancel", "OK"} default button "OK" --this is just here for testing the script, to see what the system still thinks the file is named
    set posixPath to (POSIX path of aliasItem) --THIS is where the code fails on some machines. 
end repeat

El código falla en ALGUNAS máquinas cuando trato de convertir el alias en una ruta posix. En las máquinas en las que funciona este script, el cuadro de diálogo de visualización de prueba enumera el alias de archivo con el nuevo nombre. Entonces foo.txt se convierte en temp_foo.txt. En las máquinas en las que falla el script, el cuadro de diálogo de visualización vuelve con solo foo.txt como nombre de archivo.

En la máquina en la que esto está fallando, el archivo se renombrará como temp_foo.txt como debería ser, pero el alias nunca se actualiza, por lo que todavía cree que el archivo es solo foo.txt. En las máquinas que fallan, el último comando para establecer la variable en la ruta posix del alias falla porque el alias es incorrecto ya que todavía apunta al nombre de archivo anterior.

Si es necesario, simplemente cambiaré el nombre de todos los archivos en un ciclo, luego regresaré y obtendré las rutas posix en otro ciclo, ya que hago un nuevo

set theTempFiles to files of (item 1 of theSelection)

Debería obtener una nueva lista de archivos, ahora con su prefijo "temp_". Pero me duele poner un ciclo de repetición que no creo que sea realmente necesario ya que el código funciona MUY BIEN en algunas máquinas.

¿Quién puede ayudarme a hacer que mi código funcione bien y quién puede hacer que falle? Solo me gustaría ver qué tan grande es este problema. También sería bueno si alguien pudiera decirme que estoy haciendo algo terriblemente mal en mi código, y que es por eso que obtengo resultados impredecibles.

¿Por qué no eliminar el alias, cambiar el nombre del archivo original y luego crear un nuevo alias usando el nuevo nombre de archivo correcto?
No es un alias verdadero como el que vería en el sistema de archivos. En AppleScript hay varias formas de hacer referencia a los archivos, y el alias es una de esas formas. No estoy seguro de cómo describirlo mejor. Entonces, donde falla el script es intentar convertir ese "alias" en una ruta posix, pero el alias (referencia al archivo) no ha actualizado el nombre del archivo en la referencia misma. Entonces, el "alias" todavía se refiere al nombre anterior del archivo.
Déjame adivinar: ¿la máquina Mojave es la que tiene el problema? Se supone que un aliases una referencia al archivo que no cambiará incluso si se mueve o se le cambia el nombre, pero parece que se rompió en alguna parte. Si en última instancia va a utilizar rutas POSIX, puede considerar el uso de NSURL a través de AppleScriptObjC.
Bueno, una de las máquinas es una máquina 10.13 que está teniendo problemas. Acabo de probar el script en 3 máquinas 10.12 diferentes y funcionó en todas ellas. Pero tengo una máquina virtual que probé en dos máquinas diferentes con 10.15 y el script falló en la máquina virtual en dos máquinas diferentes (2018 MBP y 2015 iMac). ¿Se puede cambiar el nombre de un archivo a través de NSURL en ASObjC? Sé muy poco sobre ASObjC y me intimida un poco.
Puede usar AppleScript normal para el cambio de nombre y simplemente usar NSUrl para realizar un seguimiento de las referencias de los archivos. Voy a publicar una respuesta con un ejemplo.

Respuestas (1)

Creo que se rompió en alguna parte, ya que aliasse supone que es una referencia a un elemento de archivo que sigue siendo válido incluso si se cambia el nombre o se mueve. Si va a usar rutas POSIX de todos modos, puede usar NSURLla clase de Cocoa (a través de AppleScriptObjC) para realizar un seguimiento de las referencias del archivo, ya que eso es lo que se usa en última instancia (o se supone que se usa).

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions

tell application "Finder" -- get the selection
    set theSelection to selection
    set theFiles to the files of (first item of theSelection) as alias list
end tell

repeat with anItem in theFiles
    set anItem to POSIX path of anItem
    set fileRefURL to (current application's NSURL's fileURLWithPath:anItem)'s fileReferenceURL() -- get file reference from path
    tell application "System Events" to set the name of disk item anItem to "temp_" & (name of disk item anItem)
    set posixPath to (fileRefURL's |path|()) as text -- get path from file reference
    display dialog "Before:" & return & anItem & return & return & "After:" & return & posixPath buttons {"Cancel", "OK"} default button "OK"
end repeat