En MacOS Sierra 10.12.3, las aplicaciones que hacen uso de quicklook (por ejemplo, Finder, Spotlight, cuadros de diálogo Abrir/Guardar) se bloquean o se cuelgan si ciertos archivos AppleScript son "quicklooked" (la vista previa del archivo se muestra mientras se navega en la vista de columnas, o invocando explícitamente quicklook en cualquier otro modo de vista)
Cuando Finder se bloquea de esta manera, se registrará lo siguiente en la consola:
20:07:55.748438 -0800 Finder !!! _NSGlyphTreeInsertGlyphs glyph index issue 2
20:07:55.748483 -0800 Finder !!! Suppressing further NSGlyphTree logs
20:07:55.750842 -0800 Finder NULL run returned from CoreText. Ignoring the storage range {0, 299} for glyph storage -> <_CTMutableGlyphStorage: 0x62800046a800>:{
NSFont = "\"Menlo-Regular 11.00 pt. P [] (0x620000243720) fobj=0x7fb81ee51d30, spc=6.62\"";
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 52.9805, Blocks (\n), Lists (\n), BaseWritingDirection -1, HyphenationFactor 0, TighteningForTruncation YES, HeaderLevel 0";
}
Cuando se cuelgue, los registros de la consola contendrán lo siguiente:
20:13:27.668141 -0800 Finder !!! _NSGlyphTreeInsertGlyphs glyph index issue 2
20:13:27.668184 -0800 Finder !!! Suppressing further NSGlyphTree logs
20:13:27.673468 -0800 Finder subsystem: com.apple.AppKit, category: DisplayCycle, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 0, enable_private_data: 0
20:13:27.678012 -0800 Finder <private> marked as needing update structural regions, even though it has received update structural regions 2 times this cycle. Future marking as needing update structural regions might be ignored. <private>
...
20:13:35.408645 -0800 kernel process 31831 (Finder) exceeded physical memory footprint, the InactiveSoftMemoryLimit of 1000 MB
20:13:35.408655 -0800 kernel process Finder[31831] crossed memory high watermark (1000 MB); sending EXC_RESOURCE.
Durante este tipo de cuelgue, el uso de la CPU del Finder se disparará al 100% y consumirá rápidamente toda la memoria disponible en el sistema, tal y como se ve en el Monitor de Actividad, hasta que se fuerce su cierre.
Si estás en el diálogo de abrir/guardar de otra aplicación en la vista de columna y haces clic en un script que provoca un cuelgue, un proceso llamado com.apple.appkit.xpc.openAndSavePanelService empezará a acaparar CPU y RAM, pero puedes matar el proceso en el monitor de actividad o en el terminal sin afectar a la aplicación en ejecución. Sin embargo, si el script causa una caída, entonces toda la aplicación se cae con él.
Este mismo comportamiento de bloqueo/colapso también ocurrirá con Spotlight si un AppleScript ofensivo aparece como resultado principal, o está resaltado. Pero a diferencia del Finder, no he notado ningún uso de la memoria cuando Spotlight se cuelga.
No está claro por qué algunos scripts provocan un crash frente a un hang, pero he comprobado que son mutuamente excluyentes (scripts que provoquen un crash causarán SIEMPRE un crash y SÓLO un crash, y lo mismo para los que provoquen un hang).
Soy capaz de duplicar consistentemente este comportamiento en dos máquinas diferentes, cada una con una instalación fresca de Sierra (10.12.3) con las últimas actualizaciones aplicadas y sin otros cambios. Y para probar, he utilizado los archivos AppleScript incluidos con el sistema operativo bajo /Library/Scripts
(aunque el problema no es exclusivo de los scripts)
En particular, esto no ocurre con todos los archivos AppleScript. De los scripts encontrados en /Library/Scripts
Sólo los que tienen una .scpt La extensión del archivo causará el problema. Los que tienen la extensión .applescript extensión no se ven afectados. Sin embargo, el simple hecho de cambiar la extensión del archivo de los scripts infractores no resolverá el problema.
Esto sucede con los mencionados scripts incluidos con el SO así como con mis propios scripts creados por el usuario que han funcionado sin problemas en algunas versiones antiguas de OS X.
¿Alguna sugerencia para remediarlo?