OS X Mountain Lion : nouveautés AppleScript et Shell

Nicolas Furno |

Éditeur AppleScript



L'Éditeur AppleScript est l'utilitaire fourni par Apple pour créer et modifier des scripts écrits en AppleScript, langage très simple. Dans OS X Mountain Lion, l'application reste globalement la même, mais on note un changement bienvenu : la prise en charge de la sauvegarde automatique et des versions.



L'application avait été privée jusque-là de ces deux nouveautés pourtant liées à OS X 10.7. La raison est technique : l'Éditeur AppleScript avait l'habitude de compiler le script au moment de la sauvegarde et ainsi de bloquer celle-ci en cas d'erreur dans le code. Ce modèle pose problème dans un environnement où le système sauvegarde automatiquement les fichiers et permet à l'utilisateur de quitter à tout moment une application, sans perdre ses données.


Ce script contient une erreur, il ne peut pas être sauvegardé.


Dans OS X Mountain Lion, l'éditeur sauvegarde automatiquement votre travail, même s'il n'est pas possible de le compiler. Pour y parvenir, Apple utilise une astuce : si vous n'enregistrez pas manuellement un script, l'Éditeur AppleScript sauvegarde à la fois la version compilée pour la dernière fois, et une copie du code au format RTF. La prochaine fois que vous ouvrirez l'éditeur, vous retrouverez le code complet et vous pourrez alors effectuer les modifications nécessaires.


Ce script est faux, mais l'Éditeur AppleScript l'a quand même enregistré et a placé le code impossible à compiler dans un fichier RTF.


Si vous tentez d'utiliser un script qui n'a pas été compilé, un message d'erreur apparaîtra pour vous faire comprendre qu'il y a un problème. Concrètement, Apple remplace le contenu du script original par une simple ligne qui provoque l'affichage de l'erreur.



Seul problème pour ce nouveau dispositif, le partage de script. Si vous envoyez un script qui n'a pas été compilé à un utilisateur d'OS X Lion ou d'une version antérieure, il ne pourra pas l'exploiter facilement. Dans ce cas, vous pouvez utiliser Read My Script, un utilitaire gratuit chargé d'extraire le code non compilé pour l'utiliser ensuite dans l'Éditeur AppleScript.

Autre changement à relever dans l'Éditeur AppleScript livré avec OS X 10.8, l'apparition d'une nouvelle commande "Exporter…" dans le menu "Fichier". Son fonctionnement est strictement la même que la commande "Enregistrer sous…" à une exception près : c'est désormais le seul moyen de bloquer un script en lecture seule.



Nouvelles commandes Shell



Apple a ajouté à son dernier système plusieurs commandes UNIX à utiliser dans le Terminal ou à intégrer à un script.


  • caffeinate : bloque la mise en veille du Mac pendant une période donnée (en secondes), ou tant qu'une autre commande est en cours.


    • Bloquer la mise en veille pendant une heure :

      caffeinate -u -t 3600

    • Bloquer la mise en veille du Mac tant que le processus qui suit n'est pas terminé :

      caffeinate -s any-long-running-command -with arguments


  • tccutil : gère la base de données associée aux données privées. Dans OS X Mountain Lion, l'accès aux contacts ou à la géolocalisation est (dés)activée pour chaque application. Pour le moment, cette commande permet uniquement de réinitialiser la liste des applications autorisées :

    tccutil reset AddressBook

  • fdesetup : outil qui active et contrôle le chiffrement FileVault. La commande permet notamment de forcer l'activation de la fonction sur tous les Mac sur le réseau.

  • pgrep et pkill : deux commandes qui trouvent et arrêtent tous les processus associés à une application et à un utilitaire. pkill -U bob Chrome va interrompre tous les processus qui concernent Chrome pour l'utilisateur Bob, par exemple.

  • sharing : crée ou arrête des points de partage avec l'un des protocoles pris en charge par OS X (AFP, FTP ou SMB).

  • serverinfo : détermine l'état d'un serveur, on peut l'utiliser dans une boucle conditionnelle.



Centre de notifications et script



Vous pouvez utiliser les notifications d'Apple pour afficher un message lié à votre script, ce qui peut être utile pour remonter une erreur ou signaler la fin d'un long processus. Apple n'offre pour l'heure aucun moyen d'afficher des notifications sans passer par une application, mais un développeur a conçu terminal-notifier.

Cette application contient simplement un outil en ligne de commande qui affiche une notification et ajoute une action en cas de clic. On peut l'utiliser avec le Terminal, directement dans un script Ruby, ou même dans un script AppleScript. Dans ce cas, le mieux est d'intégrer l'application terminal-notifier à un script enregistré sous la forme d'un paquet (fichier .scptd) ou d'une autre application.



Dans tous les cas, cette méthode n'est pas idéale : les notifications affichent toujours l'icône du Terminal et il faut appeler non pas l'application, mais un fichier précis à l'intérieur de l'application pour l'activer :

./terminal-notifier.app/Contents/MacOS/terminal-notifier -message Essai -title "Essai de titre"




Les sources de cet utilitaire étant disponibles sur GitHub, rien ne vous empêche toutefois de modifier le projet dans Xcode et de changer l'icône, par exemple. Si vous souhaitez simplement l'utiliser dans vos scripts, vous pouvez télécharger une version prête à l'emploi et signée pour GateKeeper à cette adresse.

AppleScript dans Notes et Rappels



Avec OS X Mountain Lion, Apple n'abandonne pas l'AppleScript dans les applications qui étaient déjà compatibles. Mieux, Notes et Rappels sont compatibles avec le langage de script d'Apple. Le site Mac OS X Automation a publié un dossier complet sur les possibilités offertes par Apple pour Notes. On trouvera quelques exemples, dont un script qui archive les notes du mois dans un dossier spécifique.



La possibilité de scripter Rappels permet d'envisager l'ajout de tâches automatiquement en utilisant une règle mail, ou depuis une page Internet. Dans les deux cas, on peut gérer les comptes et accéder à la majorité des fonctions.


Ce script très simple ajoute une tâche dans la première liste de Rappels avec le nom de la page en cours de Safari comme titre de tâche, l'URL de la page dans les notes et une notification une heure après l'ajout.


Sur le même sujet :

- OS X Mountain Lion : Gatekeeper, sandboxing et AppleScript
avatar frodon27 | 

ca fait plaisir un petit article un peu technique!

avatar Aphelion | 

Comme quoi, Mountain Lion ce n'est pas que pour les "kikoo lol" comme disent certains...

avatar alitaliano | 

Génial, merci pour ces infos ! Je me sers d'Applescript à longueur de journée et ces nouveautés sont intéressantes, surtout la prise en compte des versions !

avatar l3aronsansgland | 

kill all 9 !!

avatar MacGyver | 

lol applescript

avatar albinoz | 

Sympa, Merci bien

avatar freshou | 

AppleScript existait bien avant os x .....

avatar pacou | 

@freshou

Oui, mais encore?

avatar Tomn | 

Cet article est génial ! Merci
Je vais aller créer mes scripts …
Content de voir que l'AppleScript n'est pas délaissé sur Mac

avatar Florian Innocente | 

[b] freshou : AppleScript existait bien avant os x ..... [/b]

Oui, mais Nicolas est né après AppleScript...
C'est corrigé et demain on lui enlèvera son paquet de BN et sa Gameboy.

avatar Pio76 (non vérifié) | 

Comme Frodon27, merci pour la touche technique (et Applescript de surcroît).

avatar oomu | 

J'apprécie particulierement caffeinate.

avatar misterbrown | 

C'est bien beau de parler des nouveautés.....

MAIS LES PERFS??

A une époque quand une nouvelle version d OsX sortait, on la comparait en terme de performance à ses prédécessrices en Open Gl, vitesse transfert, voir même filtres sous photoshop, décompression, utilisation de la ram, et je ne sais quoi.

Aujourd hui depuis Lion, je ne vois plus ça.
Est ce tabou?

avatar expertpack | 

ne sont ce pas les relants de l'editeur texte de windows pour les fameux fichiers .BAT ?
il y avait deja variable, parametres, test et boucles en 96

avatar iGates | 

Je ne sais pas vous, mais chez moi, après ML applescript est incapable de travailler avec des calendriers Google visibles dans Calendar, par exemple un script très simple qui marchait sur Lion dans lequel je copie tous les événements compris dans une tranche de dates d'une agenda Google dans un fichier .txt ne marche plus sur ML, la machine se met à ramer, les ventilateurs se mettent à fond et Calendar se met en rouge dans le Moniteur d'activité. Si j'exécute le même script avec un calendrier local, le script marche. Quelqu'un a eu ce problème on en a entendu parler?

avatar sabearts | 

@innocente

Excellent j'ai bien ri...

avatar bompi | 

Pour compléter un peu dans l'autre sens : il y a aussi des commandes en moins.
Au moins une en tout cas : [i]fetchmail[/i].

avatar Steeve J. | 

@expertpack :
Tu n'as pas l'air de savoir à quoi sert réellement AppleScript ???

D'ailleurs il existe depuis le système 7.1.1 c'est à dire en 1993 et pour la petite histoire une des premières grosses applications scriptable avec fut QuarkXpress et c'est grâce à AppleScript qu'Apple a perduré dans la PAO face à Windows grâce à l'automatisation des tâches.
De plus il est un descendant d'Hypercard et de son langage HyperTalk fournit avec le système 5 en 1987.

avatar ovea | 

@iGates :
j'en est un autre (AppleScript qui ne fonctionnait déjà plus sous Lion) qui me permettait de mettre une image contenu dans un dossier sur son icône …

avatar Mac Mac | 

Et comment apprend t'on le langage "très simple" d'applescript svp ?

avatar bugman | 

@ oomu : +1 Idem (et pkill aussi pour ma part)

avatar pwetpwet | 

oooh caffeinate :) il va bien me servir lui

@Mac mac
autodidaxie ! ;) il y a plein de tutos disponibles sur internet pour bien commencer, le reste s'apprend naturellement. Exemple de commande que j'utilise pour mettre en veille mon Mac :
[quote]tell application "System Events" to sleep[/quote]
pas franchement obscur, n'est-ce pas ? :)

avatar Johnny B. Good | 

@ Mac mac :

C'est dommage parce que sans le "et" au début et les guillemets, ton message pourrait presque passer pour une vraie question.

avatar Nesus | 

À part avec la commande en cours, pour le reste de caffeinate il suffit d'aller dans l'économiser d'énergie et de déterminer à quelle heure on veut qu'il s'arrête. Je ne l'utilise jamais parce que je ne sais jamais combien de temps il lui faut xD

avatar pwetpwet | 

@nesus
ça reste par exemple très pratique pour un déploiement ou une "administration" à distance.
J'accède beaucoup à mon Mac à distance depuis le bureau (booouh pas bien :p) et la ligne de commande est plus rapide/sûre/discret que VNC. ça donne même l'impression de réellement travailler haha
Toute commande de ce type est toujours la bienvenue !

avatar bugman | 

@ bompi :
Je test actuellement pour ma part MailServe de chez CutesdgeSoftware qui le prend en compte sur Mountain (bien que je n'utilise pas fetchmail personnellement).
C'est juste au cas où.

CONNEXION UTILISATEUR