Cómo reparar un editor de Apple Applescript

0

Tengo un applecript en el que he estado trabajando la semana pasada. He estado corriendo & volver a ejecutar un script, corregir errores, etc. que están en lo profundo del código. A veces, el script tardaría mucho tiempo en un cierto paso, o incluso haría que el editor del script no responda. En esos casos, forzaba al editor a salir y lo volvía a iniciar para agregar algunas declaraciones de depuración o intentar un truco para hacerlo más rápido.

Bueno, en algún momento de hoy, intenté ejecutar el script después de un cambio de fuerza, y comenzó a colgar al azar en un bucle en la parte superior del script que no había tocado durante semanas. Todo lo que hace el ciclo es repetir en una lista y agregar valores a una cadena: simple. Sin embargo, se cuelga de forma aleatoria en ese bucle cada vez que intento ejecutarlo. Se bloqueará en la misma iteración de bucle (por ejemplo, en la iteración 2446) si no edito el código, pero si edito & Ejecute de nuevo, se cuelga en un lugar diferente. Cuando agregué un cuadro de diálogo a una iteración específica en la que pensé que se colgaba de forma consistente, se abrió paso a través del bucle sin ningún problema. Quité el diálogo y se colgó de nuevo en una iteración diferente ...?! No hay ninguna razón por la que pueda ver por qué debería estar colgado en este punto al principio del script. Intenté reiniciar la computadora, pero aún así se colgaría en algún lugar de ese primer bucle.

Descargué "Script Debugger 5" e intenté ejecutar el script desde él ... ¡no más bloqueos! Así que estoy empezando a pensar que algo le sucedió al Editor de Apple, ¿tal vez de mis varios cambios de fuerza?

  1. ¿Es correcta mi intuición: que el Editor está dañado de alguna manera?
  2. Si el Editor está dañado, ¿cómo lo reparo?

Aquí está el bucle (es el primero) que se cuelga en una iteración de bucle aleatorio. Hay muy poco código arriba, lo cual es simple y no ha cambiado en meses.

tell application "Contacts"
        try
            --with timeout of 5 seconds
            set myEmails to value of first email of every person
            set allemailsstr to ""
            set myPhones to value of first phone of every person
            set allphonesstr to ""
            repeat with m from 1 to count of myEmails
                if (item m of myEmails as string) is not "missing value" then
                    tell application "ASObjC Runner"
                        --with timeout of 1 second
                        set properties of progress window to {detail:"Collecting Email " & m & " of " & (count of myEmails) & " and Phone 0 of " & (count of myPhones)}
                        --end timeout
                    end tell
                    set allemailsstr to allemailsstr & item m of myEmails & "
"
                end if
            end repeat
            repeat with m from 1 to count of myPhones
                if (item m of myPhones as string) is not "missing value" then
                    tell application "ASObjC Runner"
                        with timeout of 1 second
                            set properties of progress window to {detail:"Collecting Email " & (count of myEmails) & " of " & (count of myEmails) & " and Phone " & m & " of " & (count of myPhones)}
                        end timeout
                    end tell
                    set allphonesstr to allphonesstr & item m of myPhones & "
"
                end if
            end repeat
            --set the clipboard to allemailsstr
            --end timeout
        on error errStr
            display dialog "Encountered a timeout while simply adding people to a list"
        end try
    end tell

Puedo publicar el código anterior si lo solicito, pero como dije, es muy simple: solo algunas declaraciones de variables, la configuración de la barra de progreso de la GUI y un par de ventanas de diálogo. El número de contactos en los que se repite es superior a 8K.

Para su información, el código de tiempo de espera comentado no estaba detectando los bloqueos. Cuando ocurren los bloqueos, el editor no responde. Este es un script de larga duración, medido en horas.

ACTUALIZACIÓN : ya no creo que el Editor de Apple esté dañado de alguna manera. Sospecho que puede ser algún tipo de límite de memoria (o algún otro límite). Este es el por qué. Cuando ejecuto el mismo script en Applescript Editor en una computadora diferente (mi computadora de trabajo), todavía me cuelgan. El depurador de secuencias de comandos aún no se bloquea.

    
pregunta hepcat72 10.01.2016 - 22:42

0 respuestas

Lea otras preguntas en las etiquetas