stringtranslate.com

Script de Apple

AppleScript es un lenguaje de programación creado por Apple Inc. que facilita el control automatizado de aplicaciones Mac que admiten scripts . Introducido 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. [4] [5] El término "AppleScript" puede referirse al lenguaje en sí, a un script individual escrito en el lenguaje o, de manera informal, a la arquitectura de scripting abierto de macOS que subyace al lenguaje. [4] [5]

Descripción general

AppleScript es principalmente un lenguaje de programación desarrollado por Apple para realizar comunicaciones entre aplicaciones (IAC) mediante eventos de Apple . [4] [5] 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 con el fin de 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 complementos de scripts que agregan nuevas funciones al lenguaje. Sin embargo, AppleScript se basa principalmente en la funcionalidad de las aplicaciones y los 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 de 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 . [5] : xxvi 

Historia

A finales de los años 1980, Apple consideró utilizar el lenguaje de programación HyperTalk de HyperCard como 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 productos Apple y no Apple. [6] HyperTalk podría ser utilizado por novatos para programar una pila HyperCard. Los ingenieros de Apple reconocieron que se podía diseñar un lenguaje de programación similar, pero más orientado a objetos, para ser utilizado con cualquier aplicación , y el proyecto AppleScript nació como un derivado de un esfuerzo de investigación para modernizar el Macintosh en su conjunto y finalmente se convirtió en parte de System 7. [ 1]

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). [1] QuarkXPress (versión 3.2) fue una de las primeras aplicaciones de software importantes que admitieron AppleScript. Esto, a su vez, llevó a que AppleScript fuera ampliamente adoptado dentro del mundo editorial y de preimpresión, a menudo uniendo flujos de trabajo complejos. Este fue un factor clave para mantener la posición dominante de Macintosh en la publicación y 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 paso a Mac OS X (alrededor de 2002) y sus marcos de trabajo Cocoa aumentaron enormemente la utilidad y flexibilidad de AppleScript. Las aplicaciones Cocoa permiten a los desarrolladores de aplicaciones implementar la capacidad de creación de scripts básicos para sus aplicaciones con un mínimo esfuerzo, ampliando el número de aplicaciones que se pueden crear directamente con scripts. Al mismo tiempo, el cambio a los fundamentos de Unix y la capacidad de AppleScript de ejecutar comandos de Unix directamente, con el do shell scriptcomando, [7] permitió a AppleScript un control mucho mayor sobre el sistema operativo en sí. [5] : 863  AppleScript Studio, lanzado con Mac OS X 10.2 como parte de Xcode , y más tarde el marco de trabajo AppleScriptObjC, lanzado en Mac OS X 10.6 , permitieron a los usuarios crear aplicaciones Cocoa utilizando AppleScript. [5] : 969 

En un artículo de 2006, Macworld incluyó a AppleScript entre su clasificación de los 30 productos más importantes de Apple hasta la fecha, ubicándolo en el puesto número 17. [8]

En un artículo de 2013 para Macworld , el veterano desarrollador de software para Mac y comentarista John Gruber concluyó su reflexión sobre "la improbable persistencia de AppleScript" señalando: "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 Mac sobre iOS para los aficionados y los usuarios avanzados". [9]

En octubre de 2016, el veterano gerente de productos de AppleScript y evangelista de la automatización Sal Soghoian dejó Apple cuando su puesto fue eliminado "por razones comerciales". [10] Los veteranos de la comunidad Mac como John Gruber y Andy Ihnatko generalmente respondieron con preocupación, cuestionando el compromiso de Apple con la comunidad de desarrolladores y los usuarios profesionales. [11] El vicepresidente senior 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 en The Mac Observer opinó que hizo poco para calmar su duda sobre el futuro de la automatización de Apple en general y AppleScript en particular. [12] 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 scripts accesible para el usuario final, ofreciendo 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 el sistema operativo Macintosh utiliza para enviar información a las aplicaciones, de forma análoga al envío de consultas XPath a través de XML-RPC en el mundo de los servicios web . [5] : xxvi  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. [4] Por ejemplo, un AppleScript para crear una galería web simple podría hacer lo siguiente:

  1. Abra una foto en una aplicación de edición de fotos (enviando a esa aplicación un evento Abrir archivo de Apple).
  2. Indica a la aplicación de edición de fotografías que manipule la imagen (por ejemplo, reduzca su resolución, agregue un borde, agregue un crédito a la foto)
  3. Indique a la aplicación de edición de fotografías que guarde la imagen modificada en un archivo en una carpeta diferente (enviando a esa aplicación un evento Guardar y/o Cerrar de Apple).
  4. Envía la nueva ruta del archivo (a través de otro evento de Apple) a un editor de texto o a una aplicación de edición web.
  5. Dígale a esa aplicación de edición que escriba un enlace para la foto en un archivo HTML.
  6. Repita los pasos anteriores para una carpeta completa de imágenes (cientos o incluso miles de fotos).
  7. Sube 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 AppleScript integrados o enviando eventos de Apple a utilidades FTP de Unix.

Para el usuario, cientos o miles de pasos en múltiples aplicaciones se han reducido al único acto de ejecutar el script, y la tarea se realiza en mucho menos tiempo y sin posibilidad de error humano aleatorio. Un script grande y complejo podría desarrollarse para ejecutarse solo una vez, mientras que otros scripts se utilizan una y otra vez.

Los elementos de una aplicación que se pueden programar son visibles en el Diccionario de programación de la aplicación (distribuido como parte de la aplicación), que se puede ver en cualquier editor de scripts. Los elementos se agrupan generalmente en suites, según las relaciones funcionales que existen entre ellos. Hay dos tipos básicos de elementos presentes en cualquier suite: clases y comandos.

Todas las aplicaciones que admiten scripts comparten algunos comandos y objetos básicos, generalmente denominados Suite estándar (comandos para abrir, cerrar o guardar un archivo, imprimir algo, salir, asignar datos a variables), así como un objeto de aplicación básico que proporciona las propiedades de la aplicación que admiten scripts. 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 incluyan sus propios diccionarios de scripts.

AppleScript fue diseñado con la capacidad de crear scripts de manera intuitiva mediante el registro de las acciones del usuario. Esta capacidad de grabación de AppleScript debe estar incorporada en la aplicación: la aplicación debe admitir eventos de Apple y la grabación de AppleScript; [13] como Finder admite la grabación de AppleScript, puede ser útil como referencia. Cuando se abre el Editor de AppleScript (Script Editor) 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 scripts. El script resultante se puede guardar y volver a ejecutar para duplicar las acciones originales, o modificar para que sea más útil en general.

Comentarios

Los comentarios se pueden realizar de varias formas. Un comentario de una sola línea puede comenzar con dos 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 que un script de AppleScript autónomo se almacene como un archivo de texto ejecutable que comience con la línea shebang. #!/usr/bin/osascript Ejemplo:

--Este es un comentario de una sola línea # ¡Así es esto! (en Mac OS X Leopard o posterior)

Para los comentarios que ocupan varias líneas, AppleScript utiliza paréntesis con asteriscos en su interior. Ejemplo:

(*Este es un comentario de varias líneas *)

¡Hola Mundo!

En AppleScript, el tradicional programa "¡Hola, mundo!" se puede escribir de muchas formas diferentes, entre ellas:

Mostrar el cuadro de diálogo  "¡Hola, mundo!"  : una ventana modal con los botones "Aceptar" y "Cancelar" ; o mostrar la alerta  "¡Hola, mundo!"  : una ventana modal con un solo botón "Aceptar" y un icono que representa la aplicación que muestra la alerta ; o decir  "¡Hola, mundo!"  : un mensaje de audio que utiliza una voz de computadora sintetizada

AppleScript tiene varias opciones de interfaz de usuario, incluidos cuadros de diálogo, alertas y listas de opciones. (El carácter ¬, que se genera al escribir ⌥ Option+ returnen el Editor de scripts, indica la continuación de una sola instrucción en varias líneas).

-- Conjunto de diálogo  dialogReply  para  mostrar el diálogo  "Texto del diálogo"  ¬ respuesta predeterminada  "Respuesta de texto" ¬ respuesta oculta falso ¬ botones { "Omitir" , "Aceptar" , "Cancelar" } ¬ botón predeterminado "Aceptar" ¬ botón de cancelación "Omitir" ¬ con título "Título de la ventana del diálogo" ¬ con nota de icono ¬ renunciar después de 15                        
-- Elegir de la lista establecer  chosenListItem  para  elegir de la lista  { "A" ,  "B" ,  "3" }  ¬ con  título  "Título de la lista"  ¬ con  mensaje  "Texto del mensaje"  ¬ elementos predeterminados  "B" ¬ nombre del botón Aceptar "¡Se ve bien!" ¬ nombre del botón Cancelar "No, inténtalo de nuevo" ¬ se permiten selecciones múltiples falso ¬ se permite selección vacía                 
 -- Conjunto de alerta  resultAlertReply  para  mostrar la alerta  "Texto de alerta"  ¬ como  advertencia  ¬ botones  { "Omitir" ,  "Aceptar" ,  "Cancelar" }  ¬ botón predeterminado  2 ¬ botón cancelar 1 ¬ renunciar después de 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 introducido para su posterior procesamiento. Por ejemplo:

Mostrar alerta  "¡Hola, mundo!"  Botones  { "Rechazar groseramente" ,  "Aceptar felizmente" } Establecer  la respuesta  en  el botón devuelto  del  resultado  si la respuesta es "Aceptar felizmente" entonces pitido 5 de lo contrario decir "¡Tonterías! " Fin 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. En consonancia con el objetivo de facilitar su uso a los principiantes, el lenguaje AppleScript está diseñado sobre la metáfora del lenguaje natural , al igual que la interfaz gráfica de usuario está diseñada sobre la metáfora del escritorio . Un AppleScript bien escrito debe ser lo suficientemente claro para que cualquiera pueda leerlo y entenderlo, y editarlo fácilmente. El lenguaje se basa en gran medida en el lenguaje HyperTalk de HyperCard, ampliado para referirse no solo al mundo de tarjetas y pilas de HyperCard, sino también, teóricamente, a cualquier documento. Con este fin, el equipo de AppleScript presentó el Modelo de objetos de eventos de Apple (AEOM), que especifica los objetos que cualquier aplicación en particular "conoce".

El núcleo 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 printPage, printDocument, printRange), AppleScript utiliza un único verbo "print" que se puede combinar con un objeto, como una página, un documento o un rango de páginas.

imprimir  página  1imprimir  documento  2Imprimir  páginas  1  a  5  del  documento  2

En 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 'Buen día'" o al "color de la última palabra de la ventana principal". AEOM utiliza un diccionario de aplicaciones para asociar los eventos de Apple con términos legibles para humanos, lo que permite la traducción entre AppleScript legible para humanos y eventos de Apple en bytecode . Para descubrir qué elementos de un programa son programables, 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 objetivo de dicho mensaje, AppleScript utiliza una construcción "tell":

Dile  a la aplicación  "Microsoft Word"  que salga y termine  .

Alternativamente, el tell puede expresarse en una línea usando un infinitivo :

Dile a  la aplicación  "Microsoft Word"  que  salga

Para los eventos del "Core Suite" (activar, abrir, reabrir, cerrar, imprimir y salir), la aplicación puede proporcionarse como objeto directo a los comandos transitivos:

Salir de  la aplicación  "Microsoft Word"

El concepto de jerarquía de objetos se puede expresar utilizando bloques anidados:

Dile a  la aplicación  "QuarkXPress"  Dile  al documento  1  Dile a  la página  2  Dile al  cuadro de texto  1 Establece Word 5 en "Apple" Fin de la instrucción Fin de la instrucción Fin de la instrucción Fin de la instrucción             

El concepto de jerarquía de objetos también se puede expresar utilizando frases preposicionales anidadas o una serie de posesivos:

píxel  7  de  la fila  3  de  la imagen TIFF  "mi mapa de bits" píxel 7 de la fila 3 de la imagen TIFF "mi mapa de bits"     

que en otro lenguaje de programación podría expresarse como llamadas a métodos secuenciales , como en este pseudocódigo :

getTIFF ( "mi mapa de bits" ). getRow ( 3 ) .getPixel ( 7 );

AppleScript incluye sintaxis para contar en orden ordinal, "el primer párrafo", así como en orden cardinal, "párrafo uno". Asimismo, los números en sí pueden ser mencionados como texto o numéricamente, "cinco", "quinto" y "5" son todos compatibles; son sinónimos en AppleScript. Además, la palabra "el" puede usarse legalmente en cualquier parte del script para mejorar la legibilidad: no tiene ningún efecto sobre la funcionalidad del script.

Ejemplos de scripts

Una calculadora a prueba de fallos:

Dile  a la aplicación  "Finder" -- Establecer variables Establecer  el1  al  texto devuelto  de  ( mostrar diálogo  "1.º"  respuesta predeterminada  "Número aquí" botones { "Continuar" } botón predeterminado 1 ) Establecer el2 al texto devuelto de ( mostrar diálogo "2.º" respuesta predeterminada " Número aquí" botones { "Continuar" } botón predeterminado 1 ) Intentar Establecer el1 al1 como entero Establecer el2 al2 como entero en caso de error Mostrar diálogo "Solo puede ingresar números en una calculadora" con título "ERROR" botones { "Aceptar" } botón predeterminado 1 Regresar Fin Intentar                                         -- ¿Agregar? si  el  botón devuelto  de  ( mostrar diálogo  "¿Agregar?"  botones  { "No" ,  "Sí" }  botón predeterminado  2 ) es "Sí" , entonces establezca ans en ( the1 + the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Restar? de lo contrario si el botón devuelto de ( mostrar diálogo "¿Restar?" botones { "No" , "Sí" } botón predeterminado 2 ) es "Sí" , entonces establezca ans en ( the1 - the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Multiplicar? de lo contrario si el botón devuelto de ( mostrar diálogo "¿Multiplicar?" botones { "No" , "Sí" } botón predeterminado 2 ) es "Sí", entonces establezca ans en ( the1 * the2 ) mostrar diálogo ans con título "Responder" botones { "Aceptar" } botón predeterminado 1 diga ans -- ¿Dividir? de lo contrario, si el botón regresó de ( mostrar el cuadro de diálogo "¿Dividir?" botones { "No" ,"Sí" } botón predeterminado 2 ) es "Sí" entonces configure ans para ( el 1 / el 2 ) mostrar el cuadro de diálogo ans con el título "Responder" botones { "Aceptar" } botón predeterminado                                                                                                            1 say  ans else delay  1 say  "No has seleccionado ninguna función. La operación se ha cancelado". end  ifFin de  decir

Una secuencia de cuadro de diálogo de nombre de usuario y contraseña sencilla . Aquí, el nombre de usuario es John y la contraseña es app123:

Dile a  la aplicación  "Finder" que establezca  passAns  en  "app123" que establezca  userAns  en  "John" si  el  texto devuelto  de  ( mostrar diálogo  "Nombre de usuario"  respuesta predeterminada  "" ) es userAns entonces muestra el diálogo "Correcto" botones { "Continuar" } botón predeterminado 1 si el texto devuelto de ( mostrar diálogo "Nombre de usuario: John" y regresar y "Contraseña" respuesta predeterminada "" botones { "Continuar" } botón predeterminado 1 con respuesta oculta ) es passAns entonces muestra el diálogo "Acceso concedido" botones { "Aceptar" } botón predeterminado 1 de lo contrario muestra el diálogo "Contraseña incorrecta" botones { "Aceptar" } botón predeterminado 1 fin si de lo contrario muestra el diálogo "Nombre de usuario incorrecto" botones { "Aceptar" } botón predeterminado 1 fin si fin decir                                                      

Herramientas de desarrollo

Editores de guiones

Los editores de scripts proporcionan un entorno de programación unificado para AppleScripts, incluidas herramientas para componer, validar, compilar, ejecutar y depurar scripts. También proporcionan mecanismos para abrir y ver diccionarios de AppleScript desde aplicaciones que admiten scripts, guardar scripts en varios formatos (archivos de scripts compilados, paquetes de aplicaciones, paquetes de scripts y archivos de texto sin formato) y, por lo general, proporcionan funciones como resaltado de sintaxis y fragmentos de código preescritos.

De Apple

Editor de AppleScript (Editor de scripts)
El editor para AppleScript incluido 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 se escriben en ventanas de edición de documentos donde se pueden compilar y ejecutar, y estas ventanas contienen varios paneles en los que está disponible información registrada, resultados de ejecución y otra información para fines de depuración. El acceso a diccionarios de scripts y fragmentos de código preescritos está disponible a través de los menús de la aplicación. Desde OS X Yosemite (10.10), Script Editor incluye la capacidad de escribir tanto en AppleScript como en JavaScript . [14]
Código X
Un conjunto de herramientas para desarrollar aplicaciones con funciones para editar AppleScripts o crear aplicaciones completas escritas con AppleScript.

De terceros

Depurador de scripts de Late Night Software
Un IDE comercial de terceros para AppleScript. Script Debugger es un entorno AppleScript más avanzado que permite al escritor de scripts depurar AppleScripts mediante pasos individuales , puntos de interrupción , entrada y salida de funciones/subrutinas, seguimiento de variables, 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 solo una lista de lo que cubre el diccionario, uno puede abrir un documento en Pages , por ejemplo, y ver cómo se aplican los términos del diccionario a ese documento, lo que hace que sea más fácil determinar qué partes del diccionario usar. Script Debugger no está diseñado para crear scripts con una GUI, aparte de alertas y cuadros de diálogo básicos, sino que se centra más en la codificación y depuración de scripts.
Sonrisa y SmileLab
Un IDE comercial/freeware de terceros para AppleScript, escrito completamente en AppleScript. [15] Smile es gratuito y está diseñado principalmente para el desarrollo de AppleScript. SmileLab es un software comercial con amplias funciones para análisis numérico, gráficos, automatización de máquinas y producción web. Smile y SmileLab utilizan una variedad de ventanas diferentes: ventanas de AppleScript para ejecutar y guardar scripts completos, terminales de AppleScript para probar el código línea por línea, ventanas Unicode para trabajar con texto y XML. Los usuarios pueden crear interfaces complejas, llamadas diálogos, para situaciones en las que los diálogos integrados en AppleScript son insuficientes.
Explorador ASObjC 4, de Shane Stanley
Un IDE comercial de terceros descontinuado para AppleScript, especialmente para AppleScriptObjC. [16] La característica principal es el registro de objetos/eventos de Cocoa , la depuración y la finalización de código. Los usuarios pueden leer eventos y objetos de Cocoa como otras aplicaciones que admiten scripts. Esta herramienta se creó originalmente para AppleScript Libraries (disponible en OS X Mavericks ). AppleScript Libraries tiene como objetivo los componentes reutilizables de AppleScript y admite el diccionario AppleScript integrado (sdef). ASObjC Explorer 4 también puede ser un editor de scripts externo de Xcode.
FaceSpan, de Late Night Software
Un IDE comercial de terceros discontinuado para crear aplicaciones AppleScript con interfaces gráficas de usuario. [17]

Lanzadores de scripts

Los AppleScripts se pueden ejecutar desde un editor de scripts, pero normalmente es más cómodo ejecutar los scripts directamente, sin abrir una aplicación de edición de scripts. Hay varias opciones para hacerlo:

Subprogramas
Los AppleScripts se pueden guardar desde un editor de scripts como aplicaciones (llamadas applets o droplets cuando aceptan entrada mediante arrastrar y soltar ). [5] : 69  Los applets se pueden ejecutar desde el Dock , desde la barra de herramientas de las ventanas del Finder , desde Spotlight , desde lanzadores de aplicaciones de terceros o desde cualquier otro lugar donde se puedan ejecutar aplicaciones.
Acciones de carpeta
Mediante las acciones de carpeta de AppleScript, se pueden iniciar scripts cuando se producen cambios específicos en las carpetas (como agregar o eliminar archivos). [18] Las acciones de carpeta se pueden asignar haciendo clic en una carpeta y eligiendo Configuración de acciones de carpeta... en el menú contextual; la ubicación de este comando difiere ligeramente en Mac OS X 10.6.x respecto de las versiones anteriores. Esta misma acción se puede lograr con utilidades de terceros como Hazel. [19]
Lanzadores de teclas de acceso rápido
Se pueden asignar atajos de teclado a AppleScripts en el menú de scripts mediante el Panel de preferencias de configuración de teclado y mouse en Preferencias del sistema . Además, hay varias utilidades de terceros disponibles: Alfred , [20] FastScripts, [21] Keyboard Maestro , [22] QuicKeys, [23] Quicksilver , [24] TextExpander [25] , que pueden ejecutar AppleScripts a pedido mediante combinaciones de teclas.
Menú de guiones
Este menú de todo el sistema proporciona acceso a AppleScripts desde la barra de menú de macOS, visible sin importar qué aplicación se esté ejecutando. [26] (Además, muchas aplicaciones de Apple, algunas aplicaciones de terceros y algunos complementos proporcionan sus propios menús de scripts. Estos pueden activarse de diferentes maneras, pero todos funcionan esencialmente de la misma manera). Seleccionar un script en el menú de scripts lo inicia. Desde Mac OS X 10.6.x, el menú de scripts de todo el sistema se puede habilitar desde las preferencias de Script Editor ; en versiones anteriores de Mac OS X, se podía habilitar desde la aplicación AppleScript Utility. Cuando se habilita por primera vez, el menú de scripts muestra una biblioteca predeterminada de AppleScripts funcionales y bastante genéricos, que también se pueden abrir en Script Editor y usar como ejemplos para aprender AppleScript. Los scripts se pueden organizar de modo que solo aparezcan en el menú cuando determinadas aplicaciones estén en primer plano.
Línea de comandos de Unix y launchd
Los AppleScripts se pueden ejecutar desde la línea de comandos de Unix, o desde launchd para tareas programadas, [5] : 716  utilizando la herramienta de línea de comandos osascript. [27] La ​​herramienta osascript puede ejecutar scripts compilados (archivos .scpt) y archivos de texto sin formato (archivos .applescript; estos son compilados por la herramienta en tiempo de ejecución). Las aplicaciones de script se pueden ejecutar utilizando el comando open de Unix.

Recursos de AppleScript

Bibliotecas de AppleScript

Módulos reutilizables de AppleScript (disponibles desde OS X Mavericks ), escritos en AppleScript o AppleScriptObjC y guardados como archivos de script o paquetes en determinadas ubicaciones, [28] que pueden ser llamados desde otros scripts. Cuando se guarda como un paquete, una biblioteca puede incluir un archivo de diccionario de AppleScript (sdef), [29] funcionando así como un complemento de script pero escrito 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 en favor de AppleScriptObjC. [30] : 438 

Objeto AppleScriptC

Un marco de desarrollo de software de Cocoa , también llamado AppleScript/Objective-C o ASOC, [31] parte del paquete Xcode desde Mac OS X Snow Leopard . [32] AppleScriptObjC permite que los AppleScripts utilicen clases y métodos de Cocoa directamente. [33] La siguiente tabla muestra la disponibilidad de AppleScriptObjC en varias versiones de macOS: [34]

AppleScriptObjC se puede utilizar en todas las versiones posteriores de Mac OS X.

Automatizador

Un entorno de edición modular y gráfico en el que los flujos de trabajo se construyen a partir de acciones . Su objetivo es 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. [35]

Aplicaciones del sistema central que se pueden programar

Estas aplicaciones que solo se ejecutan en segundo plano y que vienen incluidas con macOS se utilizan para permitir que AppleScript acceda a funciones que normalmente no serían programables mediante scripts. A partir de Mac OS X 10.6.3, incluyen las aplicaciones programables para:

  • VoiceOver (paquete de lector de pantalla Braille y auditivo programable)
  • Eventos del sistema (control de aplicaciones no programables y acceso a ciertas funciones del sistema y operaciones básicas de archivos)
  • Utilidad de configuración de impresora (utilidad programable para gestionar trabajos de impresión)
  • Eventos de imagen (manipulación de imágenes básicas)
  • HelpViewer (utilidad programable para mostrar pantallas de ayuda)
  • Eventos de base de datos (interfaz mínima de base de datos SQLite3)
  • Utilidad AppleScript (para crear scripts para algunas preferencias relacionadas con AppleScript)

Adiciones a la programación de secuencias de comandos (OSAX)

Plugins para AppleScript desarrollados por Apple o terceros. [36] Están diseñados para ampliar el conjunto de comandos integrado, expandiendo las características de AppleScript y haciéndolo algo menos dependiente de la funcionalidad proporcionada por las aplicaciones. macOS incluye una colección de adiciones de scripts denominadas Adiciones estándar ( StandardAdditions.osax ) que agrega un conjunto de comandos y clases que no son parte de las características principales de AppleScript, incluidos los diálogos de interacción del usuario, la lectura y escritura de archivos, los comandos del sistema de archivos, las funciones de fecha y las operaciones de texto y matemáticas; sin este OSAX, AppleScript no tendría la capacidad de realizar muchas acciones básicas que no proporciona directamente una aplicación.

Fundamentos del lenguaje

Clases (tipos de datos)

Si bien las aplicaciones pueden definir clases especializadas (o tipos de datos), AppleScript también tiene una serie de clases integradas. Estas clases de datos básicas son compatibles directamente con el lenguaje y tienden a ser reconocidas universalmente por las aplicaciones que admiten scripts. Las más comunes son las siguientes:

Estructuras del lenguaje

Muchos procesos de AppleScript se gestionan mediante bloques de código, donde cada bloque comienza con una instrucción 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.

-- Condicional simple si  x  <  1000  entonces  establece  x  en  x  +  1-- Condicional compuesto si  x  es mayor que  3  entonces  -- comandos else  -- otros comandos terminan  si

Bucles

El bucle de repetición de AppleScript se presenta en varios formatos ligeramente diferentes. Todos ejecutan el bloque entre las líneas repeat y end repeat varias veces. El bucle se puede detener de forma prematura con el comando exit repeat .

Repetir para siempre.

repetir  -- comandos a repetir fin  de repetición

Repetir un número determinado de veces.

repetir  10  veces  - comandos a repetir fin  de repetición

Bucles condicionales. El bloque dentro del bucle de repetición 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 de repetición hasta es idéntico en todo lo demás, pero el bloque se ejecuta siempre que la condición se evalúe como falsa.

establecer  x  en  5 repetir  mientras  x  >  0  establecer  x  en  x  -  1 fin  repetirEstablezca  x  en  5, repita  hasta que  x   0,  establezca  x  en  x  -  1, fin  de repetición

Bucle con una variable. Al iniciar el bucle, la variable se asigna al valor inicial. Después de cada ejecución del bloque, el valor de paso opcional se agrega a la variable. El valor de paso predeterminado es 1.

-- repite el bloque 2000 veces, i obtiene todos los valores de 1 a 2000 repite  con  i  de  1  a  2000  -- comandos a repetir fin  repetición-- repite el bloque 4 veces, i obtiene los valores 100, 75, 50 y 25 repite  con  i  de  100  a  25  por  - 25  -- comandos a repetir fin  repetición

Enumerar una lista. En cada iteración, establecer la variable de bucle en un nuevo elemento de la lista dada.

establecer  el total  en  0 repetir  con  loopVariable  en  { 1 ,  2 ,  3 ,  4 ,  5 } establecer  el total  en  total  +  loopVariable fin  de repetición

Una variación importante de esta estructura de bloques se presenta en forma de bloques onend ... que se utilizan para definir controladores (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 los llame desde algún lugar del script.

Los controladores también se pueden definir usando "to" en lugar de "on" y se pueden escribir para aceptar parámetros etiquetados, no entre paréntesis.

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.

Controlador de ejecución
Define el código principal del script, que se llama cuando se ejecuta el script. Los bloques de controlador de ejecución son opcionales, a menos que se pasen argumentos al script. Si se omite un bloque de controlador de ejecución explícito, todo el código que no esté contenido dentro de los bloques de controlador se ejecuta como si estuviera en un controlador de ejecución implícito.
Manejador abierto
Definido usando "al abrir los elementos".
al  abrir  los elementos  repetir  con  este elemento  en  los elementos  decirle a  la aplicación  "Finder"  que  actualice  este elemento  finalizar  repetir  finalizar  apertura

Cuando un script que contiene un "controlador de apertura" se guarda como un subprograma, este se convierte en un droplet. Un droplet se puede identificar en el Finder por su icono, que incluye una flecha que indica que se pueden soltar elementos sobre el icono. El controlador de apertura del droplet se ejecuta cuando se sueltan archivos o carpetas sobre el icono del droplet. Las referencias a los elementos soltados sobre el icono del droplet se pasan al script del droplet como parámetro del controlador de apertura. Un droplet también se puede iniciar de la misma forma que un subprograma normal, ejecutando su controlador de ejecución.

Manejador inactivo
Una subrutina que el sistema ejecuta periódicamente cuando la aplicación está inactiva.
en inactivo  : código a ejecutar cuando se haya completado la ejecución del script  return  60  : número de segundos de pausa antes de ejecutar nuevamente el controlador inactivo end idle

Un controlador inactivo se puede utilizar en applets o droplets guardados como applets abiertos y es útil para scripts que buscan datos o eventos específicos. La duración del tiempo inactivo es de 30 segundos de manera predeterminada, [39] pero se puede cambiar incluyendo una declaración 'return x' al final de la subrutina, donde x es la cantidad de segundos que el sistema debe esperar antes de ejecutar el controlador nuevamente.

Salir del controlador
Un controlador que se ejecuta cuando el subprograma recibe una solicitud de salida. Puede utilizarse para guardar datos o realizar otras tareas de finalización antes de salir.
on  quit  --comandos a ejecutar antes de que el script salga  continue  quit  -- requerido para que el script salga realmente end  quit
Objetos de script

Los objetos de script se pueden definir explícitamente utilizando la sintaxis:

script  scriptName  -- comandos y controladores específicos del script final del script 

Los objetos de script pueden utilizar las mismas estructuras "tell" que se utilizan para los objetos de aplicación, y se pueden cargar desde archivos y guardar en ellos. 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 miscelánea

Dile a  la aplicación  "Finder"  que establezca  x  en  mi  myHandler ()  -- o que  establezca  x  en mi  myHandler ()  de  mi parte  .en  myHandler ()  --comandos finalizan  myHandler

Usar la misma técnica para crear comandos adicionales puede reducir errores y mejorar el rendimiento.

Dígale  a la aplicación  "Finder" que establezca  cualquierNúmero  en  mi  ( número aleatorio  entre  5  y  50 ) fin de  decir

Arquitectura de scripting abierto

Un aspecto importante de la implementación de AppleScript es la Arquitectura de Scripting Abierta ( OSA ). [40] Apple proporciona OSA para otros lenguajes de scripting y productos de scripting/automatización de terceros como QuicKeys y UserLand Frontier, para funcionar en igualdad de condiciones con AppleScript. AppleScript se implementó como un componente de scripting , y las especificaciones básicas para interconectar dichos componentes con la OSA eran públicas, lo que permitía a otros desarrolladores añadir sus propios componentes de scripting al sistema. Las API de cliente públicas para cargar, guardar y compilar scripts funcionarían de la misma forma para todos esos componentes, lo que también significaba que los applets y droplets podían contener scripts en cualquiera de esos lenguajes de scripting.

Una característica de OSA son los complementos de scripting, o OSAX para Open Scripting Architecture eXtension , [36] que se inspiraron en los comandos externos de HyperCard . Los complementos de scripting son bibliotecas que permiten a los programadores extender la función de AppleScript. Los comandos incluidos como complementos de scripting 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 de OSA.

JavaScript para automatización

En OS X Yosemite y versiones posteriores de macOS, el componente JavaScript for Automation ( JXA ) sigue siendo la única alternativa seria del lenguaje OSA a AppleScript, [14] aunque las versiones Macintosh de Perl , Python , Ruby y Tcl admiten medios nativos para trabajar con eventos de Apple sin ser componentes OSA. [30] : 516 

JXA también proporciona una interfaz de lenguaje extranjero Objective-C (y lenguaje C). [14] 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 utilizar módulos CommonJS a través de browserify. [41]

Limitaciones de AppleScript

El lenguaje de programación AppleScript destaca por su capacidad de llamar a múltiples aplicaciones, pero no fue diseñado para realizar funciones específicas de una tarea por sí mismo. Por lo tanto, por ejemplo, no se puede utilizar AppleScript para realizar de manera eficiente operaciones matemáticas intensivas o procesamiento de texto extenso. Sin embargo, se puede utilizar AppleScript en combinación con scripts de shell, scripts de Perl y otros lenguajes de programación. Esto le permite trabajar con el lenguaje más eficiente para la tarea en cuestión.

Véase también

Referencias

  1. ^ abc Cook, William (2007). "AppleScript" (PDF) . Actas de la tercera conferencia ACM SIGPLAN sobre Historia de los lenguajes de programación . Association for Computing Machinery . págs. 1–21. doi :10.1145/1238844.1238845. ISBN . 9781595937667. Número de identificación del sujeto  220938191.
  2. ^ Apple Inc. (2022). Script Editor (versión 2.11). Consultado el 11 de noviembre de 2022.
  3. ^ "Fecha de lanzamiento de OS X 10.10 Yosemite". 16 de octubre de 2014. Consultado el 16 de noviembre de 2014 .
  4. ^ abcd Goldstein, Adam (2005). AppleScript: el manual que faltaba. Sebastopol, CA: O'Reilly Media . ISBN 0596008503.OCLC 56912218  .
  5. ^ abcdefghi Sanderson, Hamish; Rosenthal, Hanaan (2009). "Interacción con la línea de comandos de Unix". Aprenda AppleScript (3.ª ed.). Berkeley: Apress . pp. 863–896. doi :10.1007/978-1-4302-2362-7_27. ISBN. 9781430223610.OCLC 308193726  .
  6. ^ Flynn, Laurie (27 de febrero de 1989). "Apple considera estandarizar HyperTalk". InfoWorld . Vol. 11, núm. 9. pág. 31.
  7. ^ "Guía del lenguaje AppleScript: referencia de comandos: ejecutar un script de shell". developer.apple.com . Consultado el 15 de septiembre de 2019 .
  8. ^ "Los mayores éxitos de Apple: 30 productos importantes". macworld.com . Consultado el 12 de septiembre de 2019 .
  9. ^ Gruber, John (marzo de 2013). "La improbable persistencia de AppleScript". Macworld . 30 (3): 100.
  10. ^ Lovejoy, Ben (17 de noviembre de 2016). "Sal Soghoian dice 'pregúntenle a Apple' sobre el futuro de la automatización de usuarios de Mac mientras la compañía elimina un puesto". 9to5mac.com . Consultado el 8 de mayo de 2017 .
  11. ^ Evans, Jonny (17 de noviembre de 2016). "¿Realmente quiere Apple acabar con Automator y AppleScript? La destitución del veterano desarrollador gurú de Apple provoca una conmoción en la comunidad Mac". Computerworld.com . Consultado el 8 de mayo de 2017 .
  12. ^ Gamet, Jeff (23 de noviembre de 2016). "La intención de Apple no es la misma que comprometerse con la automatización de Mac". macobserver.com . Consultado el 8 de mayo de 2017 .
  13. ^ "Aplicaciones que se pueden programar". developer.apple.com . Consultado el 26 de julio de 2018 .
  14. ^ abc Siracusa, John (16 de octubre de 2014). "OS X 10.10 Yosemite: The Ars Technica Review: automatización de JavaScript". Ars Técnica . Consultado el 8 de mayo de 2017 .
  15. ^ "Página de inicio de Smile and SmileLab". satimage.fr . Consultado el 8 de mayo de 2017 .
  16. ^ "ASObjC Explorer 4 discontinuado". macosxautomation.com . Archivado desde el original el 21 de junio de 2017 . Consultado el 8 de mayo de 2017 .
  17. ^ "Diario de Mark Alldritt » FaceSpan". blog.latenightsw.com . Consultado el 8 de mayo de 2017 .
  18. ^ "Guía del lenguaje AppleScript: Referencia de acciones de carpeta". developer.apple.com . Consultado el 8 de mayo de 2017 .
  19. ^ Miller, Dan (22 de diciembre de 2010). «Revisión de la cápsula: Hazel 2.3». Macworld.com . Consultado el 8 de mayo de 2017 .
  20. ^ Beam, Brian (10 de febrero de 2015). "Reseña de Alfred: este lanzador de aplicaciones para Mac sigue brillando, pero Alfred Remote no está a la altura". Macworld .com . Consultado el 10 de mayo de 2017 .
  21. ^ Frakes, Dan (2 de junio de 2011). "Revisión de la cápsula: FastScripts 2.5". Macworld.com . Consultado el 8 de mayo de 2017 .
  22. ^ Breen, Christopher (4 de junio de 2013). «Mac Gems: Keyboard Maestro 6 es un genio en tareas repetitivas». Macworld.com . Consultado el 10 de mayo de 2017 .
  23. ^ Breen, Christopher (7 de mayo de 2010). "Revisión de la cápsula: QuicKeys 4". Macworld.com . Consultado el 8 de mayo de 2017 .
  24. ^ "AppleScripts – Quicksilver Wiki". qsapp.com . Consultado el 10 de mayo de 2017 .
  25. ^ Fleishman, Glenn (12 de junio de 2015). "Revisión de TextExpander 5". Macworld.com . Consultado el 8 de mayo de 2017 .
  26. ^ "Guía de creación de scripts de automatización de Mac: uso del menú de scripts de todo el sistema". developer.apple.com . Consultado el 8 de mayo de 2017 .
  27. ^ "Página del manual de osascript(1) para Mac OS X". www.unix.com . Consultado el 23 de julio de 2024 .
  28. ^ "Bibliotecas AppleScript". macosautomation.com . Archivado desde el original el 26 de julio de 2020. Consultado el 8 de mayo de 2017 .
  29. ^ "WWDC 2013 Session 416: Introducing AppleScript Libraries" (Sesión 416 de la WWDC 2013: Introducción a las bibliotecas AppleScript). asciiwwdc.com . Consultado el 8 de mayo de 2017 .
  30. ^ ab Neuburg, Matt (2006). AppleScript: la guía definitiva (2.ª ed.). Pekín: O'Reilly Media . ISBN 0596102119.OCLC 68694976  .
  31. ^ Tsai, Michael (29 de septiembre de 2014). "AppleScript y Yosemite". mjtsai.com . Consultado el 9 de mayo de 2017 .
  32. ^ "Notas de la versión de AppleScriptObjC". ​​developer.apple.com . Consultado el 8 de mayo de 2017 .
  33. ^ Waldie, Ben (6 de septiembre de 2012). "Building a basic AppleScriptObjC (Cocoa-AppleScript) application with Xcode" (Construcción de una aplicación básica AppleScriptObjC (Cocoa-AppleScript) con Xcode). peachpit.com . Consultado el 9 de mayo de 2017 .
  34. ^ Tabla adaptada de: Naganoya, Takaaki. "ASObjCExtras Scripting Guide" (PDF) . piyocast.com . Archivado (PDF) del original el 9 de octubre de 2022 . Consultado el 9 de mayo de 2017 .
  35. ^ "Tutorial de introducción a las acciones de AppleScript de Automator". developer.apple.com . Consultado el 8 de mayo de 2017 .
  36. ^ ab "Nota técnica TN1164: Adiciones a la programación de scripts para Mac OS X". developer.apple.com . Consultado el 8 de mayo de 2017 .
  37. ^ "Notas de la versión de AppleScript: cambios en la versión 10.5". developer.apple.com . Consultado el 8 de mayo de 2017 .
  38. ^ "Archivo POSIX — Referencia de clase — Guía del lenguaje AppleScript". developer.apple.com . Consultado el 8 de enero de 2018 .
  39. ^ "Guía del lenguaje AppleScript: controladores en aplicaciones de scripts". developer.apple.com . Consultado el 21 de julio de 2013 .
  40. ^ "Descripción general de AppleScript: arquitectura de scripting abierta". developer.apple.com . Consultado el 8 de mayo de 2017 .
  41. ^ "Importación de scripts". GitHub . JXA-Cookbook. 6 de diciembre de 2019 . Consultado el 9 de diciembre de 2019 .

Lectura adicional

Enlaces externos