AppleScript
AppleScript es un lenguaje de secuencias de comandos creado por Apple Inc. que facilita el control automatizado de las aplicaciones Mac programables. Presentado por primera vez en System 7, actualmente se incluye en todas las versiones de macOS como parte de un paquete de herramientas de automatización del sistema. El término "AppleScript" puede referirse al lenguaje mismo, a un script individual escrito en el lenguaje o, de manera informal, a la arquitectura de scripting abierto de macOS que subyace al lenguaje.
Resumen
AppleScript es principalmente un lenguaje de secuencias de comandos desarrollado por Apple para realizar comunicaciones entre aplicaciones (IAC) mediante eventos de Apple. AppleScript está relacionado con los eventos de Apple, pero es diferente de ellos. Los eventos de Apple están diseñados para intercambiar datos y controlar otras aplicaciones para automatizar tareas repetitivas.
AppleScript tiene algunas capacidades de procesamiento propias, además de enviar y recibir eventos de Apple a las aplicaciones. AppleScript puede realizar cálculos básicos y procesamiento de texto, y es extensible, lo que permite el uso de adiciones de secuencias de comandos que agregan nuevas funciones al lenguaje. Sin embargo, AppleScript se basa principalmente en la funcionalidad de las aplicaciones y procesos para manejar tareas complejas. Como lenguaje de comandos estructurado, AppleScript se puede comparar con los shells de Unix, Microsoft Windows Script Host o IBM REXX, pero es distinto de los tres. Esencial para su funcionalidad es el hecho de que las aplicaciones de Macintosh publican "diccionarios" de objetos y operaciones direccionables.
AppleScript tiene algunos elementos de programación procedimental, programación orientada a objetos (particularmente en la construcción de objetos script) y tendencias de programación de lenguaje natural en su sintaxis, pero no se ajusta estrictamente a ninguno de estos paradigmas de programación.
Historia
A fines de la década de 1980, Apple consideró usar el lenguaje de secuencias de comandos HyperTalk de HyperCard como el lenguaje estándar para el desarrollo de usuarios finales en toda la empresa y dentro de su sistema operativo Mac OS clásico, y para la comunicación entre procesos entre Apple y productos que no son de Apple.. HyperTalk podría ser utilizado por principiantes para programar una pila HyperCard. Los ingenieros de Apple reconocieron que se podía diseñar un lenguaje de secuencias de comandos similar, pero más orientado a objetos, para usarse con cualquier aplicación, y el proyecto AppleScript nació como un derivado de un esfuerzo de investigación para modernizar Macintosh en su totalidad y finalmente se convirtió en parte del Sistema 7.
AppleScript se lanzó en octubre de 1993 como parte de System 7.1.1 (System 7 Pro, la primera actualización importante de System 7). QuarkXPress (ver. 3.2) fue una de las primeras aplicaciones de software importantes compatibles con AppleScript. Esto, a su vez, condujo a que AppleScript se adoptara ampliamente en el mundo de la publicación y la preimpresión, a menudo vinculando flujos de trabajo complejos. Este fue un factor clave para mantener la posición dominante de Macintosh en la publicación y la preimpresión, incluso después de que QuarkXpress y otras aplicaciones de publicación se trasladaran a Microsoft Windows.
Después de cierta incertidumbre sobre el futuro de AppleScript en el sistema operativo de próxima generación de Apple, el cambio a Mac OS X (alrededor de 2002) y sus marcos Cocoa aumentaron enormemente la utilidad y flexibilidad de AppleScript. Las aplicaciones Cocoa permiten a los desarrolladores de aplicaciones implementar scripts básicos para sus aplicaciones con un mínimo esfuerzo, ampliando la cantidad de aplicaciones que son directamente scriptables. Al mismo tiempo, el cambio a los fundamentos de Unix y la capacidad de AppleScript para ejecutar comandos de Unix directamente, con el comando do shell script
, permitieron a AppleScript tener un control mucho mayor sobre el propio sistema operativo. AppleScript Studio, lanzado con Mac OS X 10.2 como parte de Xcode, y el marco posterior AppleScriptObjC, lanzado en Mac OS X 10.6, permitió a los usuarios crear aplicaciones Cocoa usando AppleScript.
En un artículo de 2006, Macworld incluyó a AppleScript en su clasificación de los 30 productos más importantes de Apple hasta la fecha, colocándolo en el puesto 17.
En un artículo de 2013 para Macworld, el veterano desarrollador de software y comentarista de Mac, John Gruber, concluyó su reflexión sobre "la improbable persistencia de AppleScript" al señalar: "En teoría, AppleScript podría ser mucho mejor; en la práctica, sin embargo, es lo mejor que tenemos que funciona. Ejemplifica las ventajas de la Mac sobre iOS para usuarios avanzados y expertos."
En octubre de 2016, Sal Soghoian, gerente de productos de AppleScript y experto en automatización durante mucho tiempo, dejó Apple cuando su puesto fue eliminado "por motivos comerciales". Los veteranos de la comunidad Mac, como John Gruber y Andy Ihnatko, generalmente respondieron con preocupación y cuestionaron el compromiso de Apple con la comunidad de desarrolladores y los usuarios profesionales. El vicepresidente sénior de ingeniería de software de Apple, Craig Federighi, respondió en un correo electrónico diciendo que "tenemos toda la intención de continuar nuestro apoyo a las grandes tecnologías de automatización en macOS", aunque Jeff Gamet de The Mac Observer opinó que hizo poco para disipar sus dudas sobre el futuro de la automatización de Apple en general y de AppleScript en particular. Por el momento, AppleScript sigue siendo un componente de las tecnologías de automatización de macOS, junto con Automator, Shortcuts, Services y shell scripting.
Conceptos básicos
AppleScript fue diseñado para ser utilizado como un lenguaje de secuencias de comandos de usuario final accesible, que ofrece a los usuarios un mecanismo inteligente para controlar aplicaciones y acceder y modificar datos y documentos. AppleScript utiliza eventos de Apple, un conjunto de formatos de datos estandarizados que utiliza el sistema operativo Macintosh para enviar información a las aplicaciones, de manera similar al envío de consultas XPath sobre XML-RPC en el mundo de los servicios web. Los eventos de Apple permiten que un script funcione con múltiples aplicaciones simultáneamente, pasando datos entre ellas para que se puedan realizar tareas complejas sin interacción humana. Por ejemplo, un AppleScript para crear una galería web simple podría hacer lo siguiente:
- Abra una foto en una aplicación fotoeditante (enviando esa aplicación Archivo abierto Evento de Apple).
- Diga a la aplicación fotoeditar para manipular la imagen (por ejemplo, reducir su resolución, añadir una frontera, añadir un crédito fotográfico)
- Dígale a la aplicación fotoeditar para guardar la imagen cambiada en un archivo en una carpeta diferente (enviando a esa aplicación una Guardar y/o Cerca Evento de Apple).
- Envíe la nueva ruta del archivo (a través de otro evento de Apple) a un editor de texto o aplicación del editor web.
- Dile a ese editor que escriba un enlace para la foto en un archivo HTML.
- Repita los pasos anteriores para una carpeta completa de imágenes (Cientos o incluso miles de fotos).
- Subir el archivo HTML y la carpeta de fotos revisadas a un sitio web, enviando eventos de Apple a un cliente FTP gráfico, utilizando comandos integrados de AppleScript, o enviando eventos de Apple a Utilidades de Unix FTP.
Para el usuario, cientos o miles de pasos en múltiples aplicaciones se han reducido al simple acto de ejecutar el script, y la tarea se realiza en mucho menos tiempo y sin posibilidad de error humano aleatorio. Se podría desarrollar un script grande y complejo para que se ejecute solo una vez, mientras que otros scripts se usan una y otra vez.
Los elementos programables de una aplicación son visibles en el Diccionario de secuencias de comandos de la aplicación (distribuido como parte de la aplicación), que se puede ver en cualquier editor de secuencias de comandos. Los elementos generalmente se agrupan en suites de acuerdo con las relaciones funcionales flexibles entre ellos. Hay dos tipos básicos de elementos presentes en cualquier suite: clases y comandos.
- Clases son objetos scriptable —por ejemplo, una aplicación de edición de texto tendrá casi sin duda clases para ventanas, documentos y textos— y estas clases tendrán propiedades que se pueden cambiar (tamaño de ventana, color de fondo de documento, tamaño de letra de texto, etc.), y pueden contener otras clases (una ventana contendrá uno o más documentos, un documento contendrá texto, un objeto de texto contendrá párrafos y palabras y caracteres).
- Comandos, por contraste, son instrucciones que se pueden dar a objetos scriptable. El formato general para un bloque de AppleScript es para Díselo. un objeto scriptable para ejecutar un comando.
Todas las aplicaciones que admiten secuencias de comandos comparten algunos comandos y objetos básicos, generalmente llamados Standard Suite (comandos para abrir, cerrar o guardar un archivo, imprimir algo, salir, establecer datos en variables), así como un aplicación objeto que proporciona las propiedades programables de la propia aplicación. Muchas aplicaciones tienen numerosas suites capaces de realizar cualquier tarea que la propia aplicación pueda realizar. En casos excepcionales, las aplicaciones pueden admitir complementos que incluyen sus propios diccionarios de secuencias de comandos.
AppleScript se diseñó con la capacidad de crear secuencias de comandos de forma intuitiva mediante el registro de las acciones del usuario. Dicha capacidad de grabación de AppleScript debe diseñarse en la aplicación: la aplicación debe ser compatible con los eventos de Apple y la grabación de AppleScript; como Finder admite la grabación de AppleScript, puede ser útil como referencia. Cuando el Editor AppleScript (Editor de secuencias de comandos) está abierto y se hace clic en el botón Grabar, las acciones del usuario para las aplicaciones grabables se convierten en sus comandos AppleScript equivalentes y se envían a la ventana del Editor de secuencias de comandos. La secuencia de comandos resultante se puede guardar y volver a ejecutar para duplicar las acciones originales, o se puede modificar para que sea más útil en general.
Comentarios
Los comentarios se pueden hacer de varias maneras. Un comentario de una línea puede comenzar con 2 guiones (--). En AppleScript 2.0, lanzado por primera vez en Mac OS X Leopard, también puede comenzar con un signo de número (#). Esto permite almacenar un script AppleScript autónomo como un archivo de texto ejecutable que comienza con la línea shebang #!/usr/bin/osascript
Ejemplo:
--Este es un comentario de una sola línea# ¡Así es! (en Mac OS X Leopard o más tarde)
Para comentarios que ocupan varias líneas, AppleScript usa paréntesis con asteriscos dentro. Ejemplo:
(*) Esto es unmúltiplelíneacomentario *)
¡Hola, mundo!
En AppleScript, el tradicional "¡Hola mundo!" El programa se puede escribir en muchas formas diferentes, incluyendo:
Cuadro de diálogo "¡Hola, mundo!" -- una ventana modal con botones "OK" y "Cancel"- oAlerta de pantalla "¡Hola, mundo!" -- una ventana modal con un solo botón "OK" y un icono que representa la aplicación que muestra la alerta- oDi: "¡Hola, mundo!" -- un mensaje de audio usando una voz de ordenador sintetizada
AppleScript tiene varias opciones de interfaz de usuario, incluidos cuadros de diálogo, alertas y una lista de opciones. (El carácter ¬, producido al escribir ⌥ Option+return en el editor de secuencias de comandos, denota la continuación de una sola declaración en varias líneas).
- Diálogoset diálogo Respuesta a Cuadro de diálogo "Dialog Text" ¬por defecto respuesta "Texto Respuesta" ¬escondido respuesta falso ¬botones {}"Skip", Está bien., "Cancel"} ¬por defecto botón Está bien. ¬cancelación botón "Skip" ¬con Título "Dialog Window Title" ¬con icono nota ¬dar arriba después 15
-- Elija de la listaset elegidoListItem a elegir de la lista {}"A", "B", "3"} ¬con Título "List Title" ¬con pronta "Prompt Text" ¬por defecto Temas "B" ¬OK botón Nombre "¡Mira bien!" ¬cancelación botón Nombre "No, intenta de nuevo" ¬múltiple selecciones permitido falso ¬con vacío selección permitido
- Alertaset resultado AlertReply a Alerta de pantalla "Alert Text" ¬como advertencia ¬botones {}"Skip", Está bien., "Cancel"} ¬por defecto botón 2 ¬cancelación botón 1 ¬dar arriba después 2
Cada método de interacción del usuario puede devolver los valores de los botones en los que se hizo clic, los elementos elegidos o el texto ingresado para su posterior procesamiento. Por ejemplo:
Alerta de pantalla "¡Hola, mundo!" botones {}"Rudely decade", "Acepta felizmente"}set la Amber a botón devuelto de el resultadosi la Amber es "Acepta felizmente" entoncesBeep 5másDi: "¡Piffle!"final si
Metáfora del lenguaje natural
Mientras que los eventos de Apple son una forma de enviar mensajes a las aplicaciones, AppleScript es un lenguaje particular diseñado para enviar eventos de Apple. De acuerdo con el objetivo de facilidad de uso para principiantes, el lenguaje AppleScript está diseñado con la metáfora del lenguaje natural, al igual que la interfaz gráfica de usuario está diseñada con la metáfora del escritorio. Un AppleScript bien escrito debe ser lo suficientemente claro para que cualquier persona pueda leerlo y comprenderlo, además de poder editarlo fácilmente. El lenguaje se basa en gran medida en el lenguaje HyperTalk de HyperCard, ampliado para referirse no solo al mundo de cartas y pilas de HyperCard, sino también teóricamente a cualquier documento. Con este fin, el equipo de AppleScript introdujo el modelo de objetos AppleEvent (AEOM), que especifica los objetos que cualquier aplicación en particular "conoce".
El corazón del lenguaje AppleScript es el uso de términos que actúan como sustantivos y verbos que se pueden combinar. Por ejemplo, en lugar de un verbo diferente para imprimir una página, un documento o un rango de páginas (como imprimirPágina, imprimirDocumento, imprimirRango), AppleScript usa un solo "imprimir" verbo que se puede combinar con un objeto, como una página, un documento o un rango de páginas.
impresión página 1impresión documento 2impresión páginas 1 thru 5 de documento 2
Por lo general, AEOM define una serie de objetos, como "documento" o "párrafo"—y las acciones correspondientes—como "cortar" y "cerrar". El sistema también define formas de hacer referencia a las propiedades de los objetos, por lo que se puede hacer referencia al "tercer párrafo del documento 'Buenos días'", o al "color del última palabra de la ventana delantera". AEOM utiliza una aplicación de diccionario para asociar los eventos de Apple con términos legibles por humanos, lo que permite la traducción de un lado a otro entre AppleScript legible por humanos y eventos de Apple con código de bytes. Para descubrir qué elementos de un programa son compatibles con secuencias de comandos, se pueden ver los diccionarios de las aplicaciones compatibles. (En las aplicaciones Xcode y Script Editor, esto se encuentra en Archivo → Abrir diccionario).
Para designar qué aplicación debe ser el destino de dicho mensaje, AppleScript utiliza un "indicar" construir:
Díselo. aplicación "Microsoft Word" Renunciofinal Díselo.
Alternativamente, el tell se puede expresar en una línea usando un infinitivo:
Díselo. aplicación "Microsoft Word" a Renuncio
Para eventos en el "Core Suite" (activar, abrir, reabrir, cerrar, imprimir y salir), la aplicación puede proporcionarse como objeto directo de los comandos transitivos:
Renuncio aplicación "Microsoft Word"
El concepto de una jerarquía de objetos se puede expresar usando bloques anidados:
Díselo. aplicación "QuarkXPres" Díselo. documento 1 Díselo. página 2 Díselo. texto caja 1 set palabra 5 a "Aplicar" final Díselo. final Díselo. final Díselo.final Díselo.
El concepto de una jerarquía de objetos también se puede expresar usando frases preposicionales anidadas o una serie de posesivos:
pixel 7 de fila 3 de TIFF imagen "mi pepita"TIFF imagen "mi pepita"'s 3a fila's 7a pixel
que en otro lenguaje de programación podría expresarse como llamadas a métodos secuenciales, como en este pseudocódigo:
SEGURIDAD()"mi pepita").# Row()3).getPixel()7);
AppleScript incluye sintaxis para el conteo ordinal, "el primer párrafo", así como cardinal, "párrafo uno". Del mismo modo, los números en sí mismos pueden denominarse texto o numéricamente, "cinco", "quinto" y "5" todos son compatibles; son sinónimos en AppleScript. Además, la palabra "the" se puede usar legalmente en cualquier parte del script para mejorar la legibilidad: no tiene ningún efecto sobre la funcionalidad del script.
Ejemplos de guiones
Una calculadora a prueba de fallas:
Díselo. aplicación "Finder"-- Establecer variablesset the1 a texto devuelto de ()Cuadro de diálogo "1a" por defecto respuesta "Número aquí" botones {}"Continúe"} por defecto botón 1)set the2 a texto devuelto de ()Cuadro de diálogo "2a" por defecto respuesta "Número aquí" botones {}"Continúe"} por defecto botón 1)Pruebaset the1 a the1 como enteroset the2 a the2 como enteroon errorCuadro de diálogo "Sólo puedes introducir números en una calculadora." con Título "ERROR" botones {}"OK"} por defecto botón 1retornofinal Prueba- ¿Agregar?si el botón devuelto de ()Cuadro de diálogo "¿Agregar?" botones {}"No", "Sí"} por defecto botón 2) es "Sí" entoncesset ans a ()the1 + the2)Cuadro de diálogo ans con Título "Respuesta" botones {}"OK"} por defecto botón 1Di: ans- ¿Sutracto?más si el botón devuelto de ()Cuadro de diálogo ¿"Sutracto"? botones {}"No", "Sí"} por defecto botón 2) es "Sí" entoncesset ans a ()the1 - the2)Cuadro de diálogo ans con Título "Respuesta" botones {}"OK"} por defecto botón 1Di: ans- Multiply?más si el botón devuelto de ()Cuadro de diálogo "¿Multiply?" botones {}"No", "Sí"} por defecto botón 2) es "Sí" entoncesset ans a ()the1 * the2)Cuadro de diálogo ans con Título "Respuesta" botones {}"OK"} por defecto botón 1Di: ans- ¿Divide?más si el botón devuelto de ()Cuadro de diálogo "¿Divide?" botones {}"No", "Sí"} por defecto botón 2) es "Sí" entoncesset ans a ()the1 / the2)Cuadro de diálogo ans con Título "Respuesta" botones {}"OK"} por defecto botón 1Di: ansmásdemora 1Di: "No has seleccionado una función. La operación ha cancelado".final sifinal Díselo.
Una secuencia simple de cuadro de diálogo de nombre de usuario y contraseña. Aquí, el nombre de usuario es John y la contraseña es app123:
Díselo. aplicación "Finder"set passAns a "app123"set usuario Ans a "John"si el texto devuelto de ()Cuadro de diálogo "Username" por defecto respuesta ") es usuario Ans entoncesCuadro de diálogo "Correcto" botones {}"Continúe"} por defecto botón 1si el texto devuelto de ()Cuadro de diálogo "Username: John" " retorno " "Password" por defecto respuesta " botones {}"Continúe"} por defecto botón 1 con escondido respuesta) es passAns entoncesCuadro de diálogo "Acceso concedido" botones {}"OK"} por defecto botón 1másCuadro de diálogo "Contraseña incorrecta" botones {}"OK"} por defecto botón 1final simásCuadro de diálogo "Nombre de usuario incorrecto" botones {}"OK"} por defecto botón 1final sifinal Díselo.
Herramientas de desarrollo
Editores de guiones
Los editores de secuencias de comandos proporcionan un entorno de programación unificado para AppleScripts, incluidas herramientas para redactar, validar, compilar, ejecutar y depurar secuencias de comandos. También proporcionan mecanismos para abrir y ver diccionarios AppleScript desde aplicaciones que admiten secuencias de comandos, guardar secuencias de comandos en varios formatos (archivos de secuencias de comandos compilados, paquetes de aplicaciones, paquetes de secuencias de comandos y archivos de texto sin formato) y, por lo general, brindan funciones como resaltado de sintaxis y fragmentos de código preescritos..
De Apple
- AppleScript Editor (Script Editor)
- El editor de AppleScript empaquetado con macOS, llamado AppleScript Editor en Mac OS X Snow Leopard (10.6) a través de OS X Mavericks (10.9) y Script Editor en todas las versiones anteriores y posteriores de macOS. Los scripts están escritos en ventanas de edición de documentos donde se pueden compilar y ejecutar, y estas ventanas contienen varios paneles en los que se ha registrado información, resultados de ejecución y otra información está disponible para fines de depuración. El acceso a diccionarios de scripting y fragmentos de código prescritos está disponible a través de los menús de aplicación. Desde OS X Yosemite (10.10), Script Editor incluye la capacidad de escribir tanto en AppleScript como en JavaScript.
- Xcode
- Una serie de herramientas para el desarrollo de aplicaciones con funciones para editar AppleScripts o crear aplicaciones completas escritas con AppleScript.
De terceros
- Depurador de scripts, del software nocturno tardío
- Un IDE comercial de terceros para AppleScript. Script Debugger es un entorno más avanzado de AppleScript que permite al escritor de scripts depurar AppleScripts a través de un solo paso, puntos de ruptura, el paso dentro y fuera de funciones/subroutines, seguimiento variable, etc. Script Debugger también contiene un navegador de diccionario avanzado que permite al usuario ver el diccionario en acción en situaciones del mundo real. Es decir, en lugar de sólo una lista de lo que cubre el diccionario, se puede abrir un documento en páginas, por ejemplo, y ver cómo se aplican los términos del diccionario a ese documento, facilitando la determinación de qué partes del diccionario utilizar. Script Debugger no está diseñado para crear scripts con un GUI, aparte de las alertas y diálogos básicos, sino que se centra más en la codificación y depuración de scripts.
- Sonríe y SmileLab
- Un freeware/IDE comercial de terceros para AppleScript, escrito completamente en AppleScript. La sonrisa es gratuita y está diseñada principalmente para el desarrollo de AppleScript. SmileLab es un software comercial con extensas adiciones para análisis numérico, grafitura, automatización de máquinas y producción web. Smile y SmileLab utilizan un surtido de diferentes ventanas: ventanas AppleScript para ejecutar y guardar scripts completos, terminales AppleScript para probar código line-by-line, ventanas unicode para trabajar con texto y XML. Los usuarios pueden crear interfaces complejas —llamados diálogos— para situaciones donde los diálogos incorporados en AppleScript son insuficientes.
- ASObjC Explorer 4, de Shane Stanley
- Un IDE comercial de terceros descontinuado para AppleScript, especialmente para AppleScriptObjC. La característica principal es Cocoa-object/event logging, debugging y code-completion. Los usuarios pueden leer eventos de Cocoa y objetos como otras aplicaciones scriptable. Esta herramienta fue construida originalmente para las bibliotecas AppleScript (disponible en OS X Mavericks). AppleScript Las bibliotecas pretenden reutilizar componentes de AppleScript y admite el diccionario integrado de AppleScript (sdef). ASObjC Explorer 4 también puede ser un editor externo de script Xcode.
- FaceSpan, del software nocturno tardío
- Un IDE comercial discontinuado de terceros para crear aplicaciones AppleScript con interfaces gráficas de usuario.
Lanzadores de guiones
AppleScripts se puede ejecutar desde un editor de secuencias de comandos, pero generalmente es más conveniente ejecutar las secuencias de comandos directamente, sin abrir una aplicación de edición de secuencias de comandos. Hay varias opciones para hacerlo:
- Applets
- AppleScripts se puede guardar de un editor de scripts como aplicaciones (llamadas applets, o gotitas cuando aceptan entrada a través de arrastrar y soltar). Los Applet se pueden ejecutar desde el Dock, desde la barra de herramientas de las ventanas Finder, desde Spotlight, desde los lanzadores de aplicaciones de terceros, o desde cualquier otro lugar donde se puedan ejecutar aplicaciones.
- Medidas de carpeta
- Utilizando acciones de carpetas de AppleScript, los scripts pueden ser lanzados cuando se producen cambios específicos en carpetas (como agregar o eliminar archivos). Las acciones de carpeta se pueden asignar haciendo clic en una carpeta y eligiendo Folder Actions Setup... desde el menú contextual; la ubicación de este comando difiere ligeramente en Mac OS X 10.6.x de versiones anteriores. Esta misma acción se puede lograr con utilidades de terceros como Hazel.
- lanzadores Hotkey
- Los atajos de teclado se pueden asignar a AppleScripts en el menú del script usando el Teclado " Ajustes de ratón Preferencia Pane en Preferencias del Sistema. Además, existen varias utilidades de terceros —Alfred, FastScripts, Keyboard Maestro, QuicKeys, Quicksilver, TextExpander— que pueden ejecutar AppleScripts bajo demanda utilizando combinaciones clave.
- Menú de script
- Este menú de todo el sistema proporciona acceso a AppleScripts desde la barra de menús macOS, visible sin importar qué aplicación se esté ejecutando. (Además, muchas aplicaciones de Apple, algunas aplicaciones de terceros, y algunos complementos proporcionan sus propios menús de script. Estos pueden activarse de diferentes maneras, pero todas funcionan de la misma manera.) Seleccionar un script en el menú script lo lanza. Desde Mac OS X 10.6.x, el menú de script para todo el sistema puede ser habilitado desde las preferencias de Script Editor; en versiones anteriores de Mac OS X, podría ser habilitado desde la aplicación Utility de AppleScript. Cuando se activa por primera vez, el menú script muestra una biblioteca predeterminada de AppleScripts bastante genéricos y funcionales, que también se pueden abrir en Script Editor y utilizar como ejemplos para aprender AppleScript. Los scripts se pueden organizar para que sólo aparezcan en el menú cuando las aplicaciones particulares están en primer plano.
- Línea de comando Unix y lanzada
- AppleScripts se puede ejecutar desde la línea de comando Unix, o desde el lanzamiento para tareas programadas, utilizando la herramienta de línea de comandos osascript. La herramienta osascript puede ejecutar scripts compilados (.scpt files) y archivos de texto simples (.applescript files—estos son compilados por la herramienta en tiempo de ejecución). Las aplicaciones de script pueden ejecutarse usando el comando abierto Unix.
Recursos AppleScript
Bibliotecas AppleScript
Módulos AppleScript reutilizables (disponibles desde OS X Mavericks), escritos en AppleScript o AppleScriptObjC y guardados como archivos de secuencias de comandos o paquetes en ciertas ubicaciones, a los que se puede llamar desde otras secuencias de comandos. Cuando se guarda como un paquete, una biblioteca puede incluir un archivo de diccionario (sdef) de AppleScript, por lo que funciona como una adición de secuencias de comandos pero escrita en AppleScript o AppleScriptObjC.
Estudio AppleScript
Un marco para adjuntar interfaces Cocoa a aplicaciones AppleScript, parte del paquete Xcode en Mac OS X 10.4 y 10.5, ahora obsoleto a favor de AppleScriptObjC.
AppleScriptObjC
Un marco de software de desarrollo Cocoa, también llamado AppleScript/Objective-C o ASOC, parte del paquete Xcode desde Mac OS X Snow Leopard. AppleScriptObjC permite que AppleScripts use clases y métodos de Cocoa directamente. La siguiente tabla muestra la disponibilidad de AppleScriptObjC en varias versiones de macOS:
En Xcode | En applets | En AppleScriptLibraries | En Script Editor | |
---|---|---|---|---|
10.6 | ||||
10.7 | ||||
10.8 | ||||
10.9 | ||||
10.10 |
AppleScriptObjC se puede utilizar en todas las versiones posteriores de Mac OS X.
Automatización
Un entorno de edición modular y gráfico en el que se crean flujos de trabajo a partir de acciones. Está destinado a duplicar muchas de las funciones de AppleScript sin necesidad de conocimientos de programación. Automator tiene una acción diseñada específicamente para contener y ejecutar AppleScripts, para tareas que son demasiado complejas para el marco simplificado de Automator.
Aplicaciones del sistema central programables
Estas aplicaciones solo en segundo plano, empaquetadas con macOS, se utilizan para permitir que AppleScript acceda a funciones que normalmente no serían compatibles con secuencias de comandos. A partir de Mac OS X 10.6.3, incluyen las aplicaciones programables para:
- VoiceOver (paquete de lector de pantalla auditiva y braille)
- Eventos de sistemas (control de aplicaciones no autorizadas y acceso a determinadas funciones del sistema y operaciones básicas de archivos)
- Utilidad de montaje de impresoras (la utilidad para manejar trabajos de impresión)
- Eventos de imagen (manipulación de imagen de núcleo)
- HelpViewer (lavadero para mostrar pantallas de ayuda)
- Eventos de bases de datos (interfaz mínima de bases de datos SQLite3)
- Utilidad de AppleScript (para la escritura de algunas preferencias relacionadas con AppleScript)
Adiciones de secuencias de comandos (OSAX)
Complementos para AppleScript desarrollados por Apple o terceros. Están diseñados para ampliar el conjunto de comandos integrados, ampliando las funciones de AppleScript y haciéndolo algo menos dependiente de la funcionalidad proporcionada por las aplicaciones. macOS incluye una colección de adiciones de secuencias de comandos denominadas adiciones estándar (StandardAdditions.osax) que agrega un conjunto de comandos y clases que no forman parte de las funciones principales de AppleScript, incluidos los diálogos de interacción del usuario, lectura y escritura de archivos, comandos del sistema de archivos, funciones de fecha y operaciones matemáticas y de texto; sin este OSAX, AppleScript no tendría la capacidad de realizar muchas acciones básicas que no proporciona directamente una aplicación.
Fundamentos del idioma
Clases (tipos de datos)
Si bien las aplicaciones pueden definir clases especializadas (o tipos de datos), AppleScript también tiene varias clases integradas. Estas clases de datos básicos están directamente respaldadas por el lenguaje y tienden a ser reconocidas universalmente por aplicaciones programables. Los más comunes son los siguientes:
- Objetos básicos
- aplicación: un objeto de aplicación, utilizado mayormente como un epígrafe para las declaraciones de la cuenta (
tell application "Finder" …
). - script: un objeto de script. Los objetos de script son contenedores para scripts. Cada AppleScript crea un objeto de script cuando se ejecuta, y los objetos de script pueden crearse dentro de AppleScripts.
- clase: un meta-objeto que especifica el tipo de otros objetos.
- referencia: un objeto que encapsula un especificador de objeto no valorado que puede o no apuntar a un objeto válido. Puede ser evaluado bajo demanda accediendo a su
contents
propiedad.
- aplicación: un objeto de aplicación, utilizado mayormente como un epígrafe para las declaraciones de la cuenta (
- Objetos de datos estándar
- constante: un valor constante. Hay una serie de constantes definidas por el lenguaje, como
pi
,tab
, ylinefeed
. - boolean: un valor verdadero/falso booleano. En realidad una subclase
constant
. - Número: una superclase abstracta raramente usada
integer
yreal
. - enteroUn entero. Se puede manipular con operadores matemáticos incorporados.
- real: un número de punto flotante (real). Se puede manipular con operadores matemáticos incorporados.
- Fecha: una fecha y hora.
- texto: texto. En versiones de AppleScript antes de 2.0 (Mac OS X 10.4 y abajo) el
text
la clase era distintastring
yUnicode text
, y los tres se comportaron de manera algo diferente; en 2.0 (10.5) y más tarde, todos son sinónimos y todo el texto se maneja como UTF-16 (“Unicode”) codificado.
- constante: un valor constante. Hay una serie de constantes definidas por el lenguaje, como
- Containers
- lista: una lista ordenada de objetos. Puede contener cualquier clase, incluyendo otras listas y clases definidas por aplicaciones.
- récord: una lista de objetos clave. Como una lista, excepto estructurada como pares de valor clave. El acceso llave en tiempo de ejecución no es compatible; todas las claves deben ser identificadores constantes compilados-time.
- Sistema de archivos
- alias: una referencia a un objeto del sistema de archivos (archivo o carpeta). El alias mantendrá su enlace con el objeto si el objeto es movido o renombrado.
- archivo: una referencia a un objeto del sistema de archivos (archivo o carpeta). Esta es una referencia estática, y puede apuntar a un objeto que no existe actualmente.
- POSIX file: una referencia a un objeto del sistema de archivos (archivo o carpeta), en texto plano, usando la notación de estilo Unix (POSIX). No es un tipo de datos verdadero, ya que AppleScript convierte automáticamente los archivos POSIX a los archivos ordinarios cuando se utilizan.
- Varios
- Color RGB: especifica un triplet RGB (en formato de 16 bits de alto color), para uso en comandos y objetos que trabajan con colores.
- Tipos de unidad: clase que convierte entre unidades estándar. Por ejemplo, un valor puede definirse como
square yards
, entonces convertido asquare feet
por fundición entre tipos de unidad (utilizando elas
operador).
Estructuras del lenguaje
Muchos procesos de AppleScript son administrados por bloques de código, donde un bloque comienza con un comando command y termina con una instrucción end command. Las estructuras más importantes se describen a continuación.
Condicionales
AppleScript ofrece dos tipos de condicionales.
- Simple condicionalsi x . 1000 entonces set x a x + 1- Condicional compuestosi x es mayor que 3 entonces -- comandosmás - otros comandosfinal si
Bucles
El bucle de repetición de AppleScript viene en varios sabores ligeramente diferentes. Todos ejecutan el bloque entre las líneas repeat y end repeat varias veces. El bucle se puede detener prematuramente con el comando exit repeat.
Repetir para siempre.
repetición -- comandos a ser repetidosfinal repetición
Repetir un número determinado de veces.
repetición 10 veces -- comandos a ser repetidosfinal repetición
Bucles condicionales. El bloque dentro del bucle repeat while se ejecuta siempre que la condición se evalúe como verdadera. La condición se vuelve a evaluar después de cada ejecución del bloque. El bucle repetir hasta es por lo demás idéntico, pero el bloque se ejecuta siempre que la condición se evalúe como falsa.
set x a 5repetición mientras x ■ 0 set x a x - 1final repeticiónset x a 5repetición hasta x ≤ 0 set x a x - 1final repetición
Bucle con una variable. Al iniciar el bucle, la variable se asigna al valor de inicio. Después de cada ejecución del bloque, el valor del paso opcional se agrega a la variable. El valor de paso predeterminado es 1.
- repetir el bloque 2000 veces, obtengo todos los valores del 1 al 2000repetición con i desde 1 a 2000 -- comandos a ser repetidosfinal repetición- repetir el bloque 4 veces, obtengo valores 100, 75, 50 y 25repetición con i desde 100 a 25 por -25 -- comandos a ser repetidos final repetición
Enumerar una lista. En cada iteración, establezca loopVariable en un nuevo elemento en la lista dada
set total a 0repetición con bucle Variable dentro {}1, 2, 3, 4, 5}set total a total + bucle Variablefinal repetición
Objetivo de la aplicación | Manejo de errores |
---|---|
- Forma sencillaDíselo. aplicación "Safari" a activar- CompuestoDíselo. aplicación "MyApp" -- comandos para la aplicaciónfinal Díselo. | Prueba -- comandos a ser probadoson error -- comandos de error final Prueba |
Una variación importante de esta estructura de bloques tiene la forma de bloques on—end... que se utilizan para definir handlers (subrutinas similares a funciones). Los controladores comienzan con on functionName() y terminan con end functionName, y no se ejecutan como parte del flujo normal del script a menos que se llamen desde algún lugar del script.
Controlador de funciones | Bloque de acciones de carpetas | Maneja de correr |
---|---|---|
on myFunction()parámetros...) -- comandos de la subrutina final myFunction | on añadir carpeta Temas a esteFolder después recibidos estos Temas -- comandos para aplicar a la carpeta o elementosfinal añadir carpeta Temas a | on Corre -- comandosfinal Corre |
Los controladores también se pueden definir usando "to" en lugar de "en" y se puede escribir para aceptar parámetros etiquetados, no encerrados entre paréntesis.
Handler con parámetros etiquetados | Handler usando "a" y parámetros etiquetados |
---|---|
on rock alrededor el relojCuadro de diálogo ()reloj como cuerda)final rock- llamado con:rock alrededor el Fecha actual | a cheque para tuNúmero desde inferior thru arribasi inferior ≤ tuNúmero y tuNúmero ≤ arriba entoncesCuadro de diálogo "¡Felicitaciones! Has marcado".final sifinal cheque- llamado con:cheque para 8 desde 7 thru 10 |
Hay cuatro tipos de controladores predefinidos en AppleScript (ejecutar, abrir, inactivo y salir), cada uno de los cuales se crea de la misma manera que el controlador de ejecución que se muestra arriba.
- Maneja de correr
- Define el código principal del script, que se llama cuando se ejecuta el script. Los bloques de controladores de ejecución son opcionales, a menos que se aprueben argumentos al script. Si se omite un bloque de manejador explícito, entonces todo el código que no está contenido dentro de bloques de manipulador se ejecuta como si estuviera en un manejador de ejecución implícita.
- Mango abierto
- Definido usando "en abrir los items".
on abierto theItems repetición con Esto es todo. dentro theItems Díselo. aplicación "Finder" a actualización Esto es todo. final repetición final abierto
Cuando una secuencia de comandos que contiene un "controlador abierto' se guarda como un subprograma, el subprograma se convierte en una gota. Una gota se puede identificar en el Finder por su icono, que incluye una flecha, lo que indica que los elementos se pueden colocar en el icono. El controlador abierto del droplet se ejecuta cuando los archivos o las carpetas se colocan en el icono del droplet. Las referencias a los elementos colocados en el ícono del droplet se pasan a la secuencia de comandos del droplet como el parámetro del controlador abierto. Un droplet también se puede iniciar de la misma manera que un subprograma ordinario, ejecutando su controlador de ejecución.
- Manejo de vela
- Una subrutina que es ejecutada periódicamente por el sistema cuando la aplicación es ociosa.
on Idle --código para ejecutar cuando la ejecución del script haya finalizado retorno 60 -- número de segundos para pausar antes de ejecutar el manipulador de idle de nuevofinal Idle
Un controlador inactivo se puede usar en applets o droplets guardados como applets abiertos y es útil para secuencias de comandos que buscan datos o eventos particulares. La duración del tiempo de inactividad es de 30 segundos de forma predeterminada, pero se puede cambiar incluyendo una 'return x' declaración al final de la subrutina, donde x es la cantidad de segundos que el sistema debe esperar antes de ejecutar el controlador nuevamente.
- Quit handler
- Un manejador que se ejecuta cuando el applet recibe una petición Quit. Esto se puede utilizar para guardar datos o hacer otras tareas finales antes de dejar de fumar.
on Renuncio --commands a ejecutar antes de que el script deje de funcionar continuar Renuncio - requerido para el guión para dejar definal Renuncio
- Objetos de script
Los objetos de script se pueden definir explícitamente usando la sintaxis:
script scriptName -- comandos y manipuladores específicos del scriptfinal script
Los objetos de script pueden usar el mismo 'informar' estructuras que se utilizan para objetos de aplicación y se pueden cargar y guardar en archivos. El tiempo de ejecución en tiempo de ejecución se puede reducir en algunos casos mediante el uso de objetos de script.
Información diversa
- Las variables no se escriben estrictamente, y no necesitan ser declaradas. Las variables pueden tomar cualquier tipo de datos (incluyendo scripts y funciones). Los siguientes comandos son ejemplos de la creación de variables:
set variable1 a 1 -- crear una variable entero llamada variable1set variable2 a "Hola" -- crear una variable de texto llamada variable2Copia {}17, "Dobledía"} a variable3 -- crear una variable lista llamada variable3set {}variable4, variable5} a variable3 -- copiar los elementos de lista de variable3 en variables separadas variable4 y variable5set variable6 a script myScript -- establecer una variable a una instancia de un script
- Los objetos de script son objetos completos, pueden encapsular métodos y datos y heredar datos y comportamientos de un script padre.
- Las subrutinas no se pueden llamar directamente desde los bloques de aplicación. Usa las palabras clave 'mi' o 'de mí' para hacerlo.
Díselo. aplicación "Finder" set x a # MyHandler() - o set x a MyHandler() de mefinal Díselo.on MyHandler() --commandsfinal MyHandler
Usar la misma técnica para crear scripts de comandos adicionales puede reducir los errores y mejorar el rendimiento.
Díselo. aplicación "Finder"set anyNumber a # ()Número aleatorio desde 5 a 50)final Díselo.
Arquitectura de secuencias de comandos abiertas
Un aspecto importante de la implementación de AppleScript es la Arquitectura de secuencias de comandos abiertas (OSA). Apple proporciona OSA para otros lenguajes de secuencias de comandos y productos de secuencias de comandos/automatización de terceros, como QuicKeys y UserLand Frontier, para que funcionen en igualdad de condiciones con AppleScript. AppleScript se implementó como un componente de secuencias de comandos, y las especificaciones básicas para interconectar dichos componentes con OSA eran públicas, lo que permitía a otros desarrolladores agregar sus propios componentes de secuencias de comandos al sistema. Las API de clientes públicos para cargar, guardar y compilar secuencias de comandos funcionarían de la misma manera para todos esos componentes, lo que también significaba que los applets y los droplets podían contener secuencias de comandos en cualquiera de esos lenguajes de secuencias de comandos.
Una característica de OSA son las adiciones de secuencias de comandos, u OSAX para Open Scripting Architecture eXtension, que se inspiraron en los comandos externos de HyperCard. Las adiciones de secuencias de comandos son bibliotecas que permiten a los programadores ampliar la función de AppleScript. Los comandos incluidos como complementos de secuencias de comandos están disponibles en todo el sistema y no dependen de una aplicación (consulte también § Bibliotecas de AppleScript). El Editor de AppleScript también puede editar y ejecutar directamente algunos de los lenguajes OSA.
JavaScript para automatización
Bajo OS X Yosemite y versiones posteriores de macOS, el componente JavaScript for Automation (JXA) sigue siendo la única alternativa de lenguaje OSA seria a AppleScript, aunque las versiones para Macintosh de Perl, Python, Ruby y Tcl admiten medios nativos para trabajar con eventos de Apple sin ser componentes de OSA.
JXA también proporciona una interfaz de idioma extranjero Objective-C (y lenguaje C). Al ser un entorno basado en el motor JavaScriptCore de WebKit, el conjunto de características de JavaScript está sincronizado con el motor del navegador Safari del sistema. JXA proporciona un sistema de módulos JavaScript y también es posible usar módulos CommonJS a través de browserify.
Contenido relacionado
Atari 7800
Electrónica de consumo
Rastra (herramienta)