# AppleScript

AppleScript é uma linguagem de script que age sobre a interface do sistema operacional da Apple (Mac OS X) onde é possível realizar diversas mudanças e alterações de funcionamento e inclusive mesclar ferramentas e funções de um programa para outro com toda facilidade de programar uma linguagem intuitiva que é de se esperar de um script.

## História

O projecto AppleScript é resultante do projecto HyperCard. O HyperCard tem uma linguagem em script com base na língua inglesa e noutra chamada HyperTalk, podendo assim usar a lógica e o comportamento. Os engenheiros da Apple Inc. viram que a linguagem em script podia ser usada em qualquer outra aplicação, e foi assim que o projeto da AppleScript nasceu. O Mac OS necessitou que upgrades (renovações) extensos fossem colocados na AppleScript. A maior parte das modificações tecnológicas foram feitas com o lançamento do System 7, mudando assim o conceito da Apple. AppleScript foi introduzido em 1992 e lançado em outubro de 1993 como parte do System 7.1.1 (System 7 Pro, o primeiro e principal upgrade do System 7). QuarkXPress (ver.3.2) foi um dos primeiros e principais aplicativos de software que sustentou o AppleScript, e como consequência, o AppleScript foi amplamente adotado no segmento de divulgação do mercado Apple.

## Conceitos básicos

Apple Script foi projetada para ser usada como linguagem de usuário final, oferecendo aos usuários um mecanismo inteligente de controlo de aplicações, informações e documentos a fim de que se automatize fluxos de trabalho. Serve para controlar outras aplicações. Automatizar um fluxo de trabalho com AppleScript frequentemente reduz o tempo de performance de várias tarefas, reduz as chances de erro humano, proporciona resultados consistentes e cria um sistema de produção administrável pra trabalhar dentro dos prazos.
Por exemplo, um script pode abrir uma foto em um programa de edição de fotos, reduzir a resolução da mesma, criar uma borda, créditos para a foto, então exportar uma cópia pronta para a Web, depois escrever um web link para aquela foto dentro de um editor de texto, em seguida passar para a próxima foto da sequência, e o mesmo para centenas ou milhares de fotos. Eventualmente criando uma galeria de fotos pronta para a web, a qual o script usa um cliente FTP para fazer o upload para o web site do usuário. Para o usuário, centenas de passos em múltiplas aplicações com potencialmente milhares de documentos tem sido reduzida a um: rodar um script. Mesmo se o usuário fosse usar o script apenas uma vez o tempo inicial de criação do AppleScript pode ser completamente compensado. Na prática os scripts são usados de novo e de novo, tornando o tempo inicial de criação uma consideração trivial.
Um importante conceito para AppleScript é que scripts lidam com aplicações numa maneira fundamentalmente diferente das maneiras que um usuário interage com elas. Usuários manipulam a interface de usuário da aplicação, abrindo menus e clicando em botões. Scripts AppleScript requerem uma série de valores e invocam ações expostas pelo modelo interno de objeto da aplicação. Então, por exemplo, ao invés de digitar para entrar texto dentro de campos de um programa de banco de dados, um script AppleScript iria normalmente usar comandos que diretamente estabelecerm valores dos campos desejados da gravação, possivelmente sem a aplicação, mesmo mostrando a gravação sendo atualizada. AppleScript também tem a capacidade de controlar aplicações não estruturadas através de Interface Gráfica de Usuário (GUI), o que permite AppleScripts selecionarem itens de menu, clicar em botões, entrar com texto em campos, e geralmente controlar as interfaces da maioria dos programas Mac OS X 10.x para lidar com operações não disponíveis através da interface.

### Programa Olá Mundo
## AppleScript no Mac OS X

AppleScript existe em várias aplicações do Mac OS X, da Apple Inc. e desenvolvedores terceiros. Aplicações com scripts estão no Finder, Safari, iPhoto e iTunes, também no Adobe Illustrator e Photoshop. Bare Bones BBedit e TextWrangler, Microsoft Word e Excel, VMWare, Fusion e muitos outros.
Antes do Sistema 7, as aplicações tinham apenas um modelo rudimentar que poderia indicar um número fixo de pequenos eventos de baixo nível tais como "tecla foi pressionada" ou "mouse foi clicado". Cada pedido responsável por esta descodificação de baixo nível em eventos de alto nível representam ações do usuário, tais como "como escolher corte no menu Editar". Em muitos casos, o código de leitura e descodificação do evento foi misturados entre si; por exemplo, o código de tratamento de um clique do mouse para que possa descodificar selecionando o item Quit a partir do menu Arquivo e, em seguida, sair da aplicação imediata.
Adicionar suporte ao AppleScript requer que o programador do aplicativo separe totalmente desta decodificação a execução das operações de comando, uma tarefa que a Apple se refere como refatoração. Os desenvolvedores são encorajados a escrever dois eventos completos "stacks", uma para a manipulação dos eventos de baixo nível (cliques, etc), e outra para eventos de alto nível (AppleEvents). O código atual que trabalho com esses comandos, uma vez decodificado, era para ser completamente separados e identicamente chamados a partir de ambos os blocos.

## AppleScript e Cocoa

A cada versão do Mac OS X, vem se tornando mais simples para desenvolvedors a implementação do AppleScript em seus aplicativos usando a interface de programação de aplicativos Cocoa. No Mac OS, os eventos são manipulados pelos aplicativos, mas, na API Cocoa, os eventos são decodificados num comando de "alto nível" pelo comando NSApplication, e as mensagens despachadas diretamente para o objeto correto. Todos os aplicativos feitos através do Cocoa vêm na escrita padrão; o desenvolvedor normalmente não escreve nenhum dos códigos de manipulação dos eventos, escrevendo apenas os "métodos de trabalho" utilizados por cada um deles.
Outra grande vantagem é que os objetos no Cocoa são apresentados ao mundo exterior (outros aplicativos e até mesmo computadores) em um formato padronizado que qualquer pessoa pode examinar diretamente. No Cocoa, AppleScript é mais compacto; o engine decodifica o script, traduz objeto humano a partir de nomes de leitura ao seu formato interno e, em seguida, direciona os métodos ao aplicativo de destino.

## Ferramentas de desenvolvimento AppleScript
### Automator

Automator permite edição gráfica, através de drag and drop (arrastar e soltar) de workflows AppleScript, não havendo necessidade do conhecimento de códigos. Automator está incluído no Mac OS X.

### Script Editor

Script Editor é um editor para AppleScripts incluído no Mac OS X. Scripts são escritos na janela de edição do documento, podendo ser compiladas e executadas pela janela do Script Editor, Scripts também podem ser salvos como aplicativos de AppleScript (applets) ou como scripts compilados. Script Editor também provém acesso à uma biblioteca de referências de dicionários de AppleScript correspondentes aos programas que podem executar tais scripts no computador do usuário.

### Script Menu

O Script Menu oferece acesso a AppleScripts pela barra de menus do Mac OS X. O menu Script pode ser ativado usando o AppleScript Utility application. Quando ativo, o Scrit Menu mostra uma biblioteca padrão de AppleScripts funcionais que podem ser usados como exemplos. Selecionar um script no Script Menu o executa. Atalhos de teclado também podem ser associados à AppleScripts no ScriptMenu através das configurações de mouse e teclado dentro das preferências do sistema.

### AppleScript Utility

É um aplicativo encontrado no diretório do AppleScript dentro do diretório de aplicativos do Mac OS X. O AppleScript Utility pemite ao usuário: Selecionar o editor de scripts padrão; permitir a escrita de scripts no modo de interface gráfica do utilizador; definir ações em diretórios e exibir o Script Menu na barra de menus.

### AppleScriptObjC

É um ambiente de desenvolvimento do Mac OS X e pode utilizar AppleScript como linguagem de programação primária, em conjunção com a framework Cocoa utilizada para a construção de interfaces gráficas do utilizador (GUI - Graphical User Interface).

### Xcode

AppleScript Studio é um ambiente de desenvolvimento, nativo do Mac OS X, e pode utilizar AppleScript como linguagem de programação primária, juntamento como o framework Cocoa, utilizado para construção de interfaces gráficas do utilizador.

## Open Scripting Architecture

Um aspecto importante da implementação do AppleScript foi o Open Scripting Architecture (OSA). Apple fornece OSA para scripts / produtos de terceiros, tais como automação e QuicKeys Userland Frontier, para funcionar igualmente ao AppleScript. AppleScript foi implementado como um componente scripting, e as especificações de interface básicas são públicas, permitindo que outros desenvolvedores adicionem seus próprios scripts para componentes do sistema. API públicas para carregar, salvar e compilar scripts devem funcionar do mesmo jeito para todos esses componentes, significa também que applets e droplets deveriam assegurar scripts em qualquer uma dessas linguagens de programação.
No Mac OS X, o componente JavaScript OSA continua a ser a única alternativa para o AppleScript, embora o Macintosh possua versões de Perl, Python, Ruby e Tcl todas tem suporte nativo com AppleEvents sem serem componentes OSA.
Uma das características mais interessantes do OSA são "scripting additions", ou OSAX para Open Scripting Arquitetura eXtension, que são baseadas em Hypercard's External Commands. Scripting Additions permite que os programadores ampliem a função do AppleScript. Comandos incluídos como Scripting Additions estão disponíveis amplamente no sistema, e não são dependentes de uma aplicação. O Mac OS X inclui uma coleção de scripting additions referidos como Standard Additions, que amplia a função do AppleScript com uma variedade de novos comandos, incluindo dialogos de interação com os usuários, ler e escrever arquivos, comandos de sistema de arquivos, funções de data, texto e operações matemáticas.