# AppleScript

AppleScript est un langage de script créé par Apple, et intégré à Mac OS. Il est connu pour posséder une syntaxe riche et élaborée, la plus proche possible d'un pseudo-anglais limité. Plus largement, « AppleScript » est le mot qui désigne l'interface de script de Mac OS, qui est prévu pour fonctionner en parallèle de l'environnement graphique.

## Histoire

Le projet AppleScript est issu du projet HyperCard. HyperCard disposait lui aussi d'un langage de script basé sur un pseudo-anglais limité, HyperTalk qui permettait de manipuler les données des piles HyperCard. Les ingénieurs d'Apple ont reconnu qu'un langage similaire de script pouvait être utilisé avec toute application, et le projet AppleScript est né comme un sous-ensemble du Système 7.
La première version fut publiée en octobre 1993 avec le Système 7.1.1 (ou Système 7 Pro, première mise à jour majeure du Système 7). QuarkXPress dans sa version 3.2, fut l'une des premières applications importantes à supporter AppleScript, avec comme conséquence qu'AppleScript fut largement adopté par le secteur de l'édition et des arts graphiques de la clientèle d'Apple. On peut penser que si Apple a gardé une place importante dans le monde de la PAO après le portage de Quark (et d'autres applications) sur la plateforme Microsoft Windows, c'est, entre autres, parce que les utilisateurs du Mac ont pu automatiser des tâches complexes ou répétitives (ses problèmes rencontrés sous Windows pour le “flashage", c'est-à-dire le traitement entre mise en page et impression ayant aussi joué un rôle déterminant).
Le passage vers Mac OS X et son API Cocoa a permis à AppleScript de prendre son indépendance. Le scriptage basique des applications Cocoa demande peu d'effort de la part du développeur. AppleScript Studio, fourni depuis Mac OS X 10.2, permet à l'utilisateur de construire des applications complètes à partir d'AppleScript et les objets Cocoa. Cependant, depuis la version 3.2 des outils développeurs, AppleScript Studio a été remplacé par AppleScriptObjC et, dans Interface Builder, l'onglet AppleScript a disparu, bien que l'on puisse le remettre en modifiant le fichier Plist. De plus, le lien vers AppleScript sur le site d'Apple renvoie désormais sur Automator (https://web.archive.org/web/20090423191657/https://www.apple.com/applescript/).
Pour rétablir l'onglet applescript dans Interface Builder, ouvrez le terminal et entrez ou copiez-collez les lignes suivantes : defaults write com.apple.InterfaceBuilder3 IBEnableAppleScriptStudioSupport -bool YES
AppleScript est un composant des technologies d'automatisation de Mac OS X avec Services et Automator.

## Concept de base

AppleScript a été conçu pour offrir aux utilisateurs un mécanisme intelligent de contrôle d'applications, d'informations et de documents et ainsi mettre en œuvre une gestion automatisée des tâches. AppleScript est conçu comme une interface de script pour contrôler divers programmes. Automatiser des tâches avec AppleScript permet de réduire le temps qu'il faut pour accomplir ces tâches ainsi que de réduire les possibilités d'erreurs humaines.
Par exemple, un script pourrait ouvrir une photo dans une application d'édition photo, réduire sa résolution, ajouter une bordure, un titre, puis exporter la photo sur Internet et copier l'adresse de la photo dans un éditeur de texte, et enfin passer à la photo suivante de la série, et ainsi de suite à travers des centaines ou des milliers de photos, permettant la création d'une galerie photo sur Internet, le script pouvant utiliser un client FTP pour transférer les photos sur le site Web. Pour l'utilisateur, des centaines de mesures dans de multiples applications, utilisant des milliers de documents, ont été réduites à une seule : exécuter un script. Même si l'utilisateur ne devait utiliser un tel script qu'une seule fois, le temps de développement AppleScript peut être totalement exploité : dans la pratique, les scripts sont utilisés encore et encore, permettant un gain de temps considérable qui compense le temps de développement.
Un concept majeur de l'AppleScript est que les scripts manipulent les applications d'une manière fondamentalement différente de la façon dont les utilisateurs interagissent avec elles. L'utilisateur utilise l'application grâce à l'interface graphique, en choisissant des options dans les menus et en cliquant sur des boutons, alors que les scripts demandent et définissent les valeurs et les actions invoquées par l'application en mode interne. Ainsi, par exemple, plutôt que de simuler des frappes au clavier pour entrer du texte dans les champs d'une application, le script AppleScript utilise des commandes fixant directement les valeurs des champs souhaités de l'enregistrement, sans même que l'application n'affiche le dossier en cours d'actualisation. AppleScript a également la capacité de contrôler les applications non-scriptables grâce à l'interface graphique utilisateur (GUI) de scripts, ce qui permet au script de sélectionner des éléments du menu, cliquer sur les boutons, entrer du texte dans les champs de texte, et en général contrôler la plupart des interfaces de Mac OS X.
Étant donné que les applications sont toutes différentes les unes des autres, le nombre de commandes standards soutenues par toutes les applications est assez restreint. Chaque application scriptable publie les termes qu'elle comprend, sous la forme d'un dictionnaire d'évènements Apple (Apple Event), utilisé par AppleScript pour déterminer la validité des commandes qui peuvent être utilisées dans le contexte de chaque application.

## Hello World !

Dans AppleScript, le classique programme Hello World ! est écrit comme ceci :
Le résultat du premier script est que votre ordinateur va dire hello world avec la voix par défaut. Afin de changer cette voix, allez dans l’onglet voix des ≪Préférences Système≫. Ou vous pouvez écrire le script comme ceci :
”Alex” est juste un exemple ; il y a beaucoup d’autres voix.

## AppleScript dans Mac OS X

De nombreuses applications Mac OS X sont scriptables, tant des applications fournies par Apple que celles de tiers. Le Finder, Safari, iPhoto et iTunes d'Apple ; Illustrator, Photoshop et InDesign d'Adobe ; Word et Excel de Microsoft ; QuarkXPress, pour ne citer que quelques exemples parmi les plus connus.
Avant le Système 7, le moteur d'exécution d'application Mac OS avait une programmation événementielle rudimentaire ne pouvant produire qu'un nombre limité d'évènements de bas niveau tel que "touche enfoncée" ou "souris cliquée". Chaque application était responsable du décodage de ces évènements de bas niveau en actions utilisateur significative de haut niveau tel que "sélectionner l'article Couper du menu Édition". Dans de nombreux cas, le code gérant la lecture de l'évènement et celui gérant son décodage ont été fusionnés. Par exemple, le code gérant le "clic souris" pouvait lui-même le décoder comme "sélectionner l'article Quitter du menu "Fichier", puis quitter l'application immédiatement.
L'auteur qui veut rendre scriptable son application par AppleScript doit séparer le décodage et l'exécution des commandes, une tâche qu'Apple référence comme refactorisation (… de l'application). Les développeurs furent encouragés à écrire à deux « piles » complètes de gestion d'évènement. L'une pour gérer les évènements de bas niveau (clics, etc.) l'autre pour les évènements de haut niveau (AppleEvents). […]
Dans Mac OS X, AppleScript est plus simple à mettre en œuvre par les développeurs, particulièrement pour les applications développée en Cocoa. Contrairement à Mac OS où les évènements sont traités par les applications, dans Cocoa, les évènements sont décodés en commande de haut niveau par l'objet NSApplication, et les messages adressés directement au bon objet. Chaque application Cocoa est « refactorisée » par défaut, le développeur n'ayant (normalement) plus à écrire le code de gestion des évènements mais seulement les « méthodes » qui seront appelées par ces évènements.
Un autre grand avantage est que les objets Cocoa se présentent aux autres applications et même machines, sous un format standardisé que chacun peut étudier directement. Sous Cocoa, AppleScript est plus « mince ». Le moteur de script décode le script, traduit les noms d'objet depuis leur forme compréhensible pour l'humain vers leur format interne, puis appelle directement les méthodes de l'application ciblé.

## La métaphore du langage naturel

Considérant que les Apple Events sont une méthode d'envoi de messages aux applications, AppleScript est un langage conçu pour envoyer des Apple Events. Fidèle à sa tradition qui veut que Mac OS soit facile d'utilisation, AppleScript est conçu comme une métaphore de langue naturelle, tout comme l'environnement graphique utilisateur est conçu comme une métaphore du bureau. Le langage AppleScript est généralement lisible par tous ceux qui maîtrisent un minimum l'anglais et modifiable par la plupart de ceux-ci. Le langage est largement basé sur HyperTalk, le langage d'HyperCard, étendu pour ne plus se limiter au monde des cartes et piles d'HyperCard, mais pouvant s'adresser à théoriquement n'importe quel document. Pour atteindre cet objectif, l'équipe de développement a présenté l'"AppleScript AppleEvent Object Model" (AEOM), qui spécifie les commandes que chaque application est censée comprendre.
Le cœur d'AppleScript est formé de termes qui se présentent comme des noms et verbes qui peuvent être combinés. Par exemple, plutôt que d'avoir un terme pour imprimer une page, un pour imprimer un document ou imprimer une série de pages (imprimerPage, imprimerDocument, imprimerSerie), AppleScript utilise un seul verbe print qui pourra être combiné avec un objet, à savoir une page, un document ou une série de pages.
De manière générale, AEOM défini un certain nombre d'objets, tels que "document" ou "paragraphe", et les actions que l'on peut faire à leur égard, tels que "fermer" et "couper". Ce système permet également de se référer aux propriétés des objets. Par exemple, le "troisième paragraphe du document Bonjour", ou la "couleur du dernier mot de la fenêtre courante". AEOM utilise le dictionnaire des applications pour associer les Apple Events au langage AppleScript humainement compréhensible, permettant la traduction réciproque entre AppleScript compréhensible et le bytecode des Apple Events. Pour découvrir quels éléments sont scriptables pour une application donnée, il faut consulter son dictionnaire, accessible via l'article de menu "Ouvrir un dictionnaire" du menu "Fichier" de l'application "Éditeur de scripts".
Pour désigner quelle application est visée par le message, AppleScript utilise le verbe tell (dit à) :
Cette même demande peut s'écrire en une seule ligne en utilisant le verbe à l'infinitif :
Pour les événements de la "Core suite" (activer, ouvrir, rouvrir, fermer, imprimer et quitter), l'application pour être l'objet indirecte de la demande :
Le concept d'une hiérarchie d'objets est visible dans ces blocs imbriqués :
Le concept de hiérarchie d'objets peut également être exprimé à l'aide de prépositions imbriquées :
Hiérarchie qui dans un autre langage de programmation peut s'exprimer par l'appel séquentiel de fonctions :
AppleScript comprend les nombres ordinaux "le premier paragraphe", ainsi que les cardinaux "paragraphe 5". De même, les chiffres peuvent être mentionnés comme texte ou en nombres, les "cinq", "cinquième" et "5" sont compris. Ils sont appelés « synonymes ». Le mot anglais the peut également être utilisé dans un script afin d'améliorer la lisibilité sans avoir un impact sur la fonctionnalité du script.

## Outils de développement Applescript
### Éditeurs de scripts

Les éditeurs de script procurent un environnement de programmation unifié pour les Applescripts, incluant des outils pour les scripts de composition, validation, compilation, exécution et debuggage. Ils procurent aussi des mécanismes pour ouvrir et consulter les dictionnaires Applescript des applications scriptables, sauvegardant les scripts dans de nombreux formats (fichiers de script compilés, progiciels, et fichiers texte), et mettant habituellement des outils pratiques tels que la coloration syntaxique et l'auto-complétion de code.
AppleScript Editor (dont le nom est devenu Script Editor depuis la version 10.6 Snow Leopard de Mac OS X) est l'éditeur AppleScript fourni avec Mac OS X. Les scripts sont écrits dans des fenêtres d'édition où ils peuvent être compilés et exécutés, et ces fenêtres contiennent divers panneaux qui affichent les informations de log, les résultats de l'exécution, et d'autres informations dans un but de débogage. L'accès aux dictionnaires de scripts et aux modules pré-écrits est disponible dans les menus de l'application.
L'application "Script Debugger" est un éditeur Applescript commercial, qui peut être testé gratuitement pendant une durée limitée.
Xcode, d'Apple est une suite d'outils pour développer des applications ayant des capacités d'édition d'Applescripts ou la création d'applications à part entière écrites en AppleScript.
Smile et SmileLab, disponibles sur le site de Satimage est un logiciel tiers freeware/commercial. C'est un IDE pour Applescript, lui-même entièrement écrit en Applescript. Smile est gratuit, et à l'origine conçu pour le développement Applescript. SmileLab est un logiciel commercial avec des extensions supplémentaires pour l'analyse numérique, les graphismes, l'automatisation de la machine et la production web. Smile et SmileLab utilisent un assortiment de fenêtres - fenêtres Applescript pour l'exécution et la sauvegarde de scripts entiers, terminaux AppleScript pour tester le code ligne par ligne, fenêtres unicode pour travailler avec du texte et du XML. Les utilisateurs peuvent créer des interfaces complètes - appelées dialogues - pour des situations où les dialogues intégrés à AppleScript sont insuffisants.