Scriptarian ambitionne de remplacer AppleScript par Swift

Nicolas Furno |

Scriptarian est un nouvel outil extrêmement ambitieux, puisque son objectif est de remplacer AppleScript par Swift. Le premier est un langage historique, mais vieillissant qui n’a plus vraiment les faveurs d’Apple depuis des années. Le deuxième au contraire est à la pointe en ce moment à Cupertino, c’est le nouveau langage plus moderne qui doit servir à tout, des apps au noyau des systèmes, en passant par les scripts utilisateurs justement.

Scriptarian en action avec un script qui teste l’URL de l’onglet ouvert dans Safari sur la droite, et la documentation sur la gauche. En bas à droite, la fenêtre affichée par le script. Cliquer pour agrandir
Scriptarian en action avec un script qui teste l’URL de l’onglet ouvert dans Safari sur la droite, et la documentation sur la gauche. En bas à droite, la fenêtre affichée par le script. Cliquer pour agrandir

À notre connaissance, cet utilitaire est le premier à offrir une solution complète pour exploiter Swift à des fins d’automatisation sur Mac. Pour cela, il propose une partie des fonctions de base du langage et l’éditeur est très complet, avec une autocomplétion bien pratique quand on débute. Mais son plus gros travail consiste à « convertir » les fonctions AppleScript de chaque app pour les exploiter en Swift.

C’est une opération que Scriptarian doit réaliser au premier lancement, puis après chaque mise à jour des logiciels. Quand c’est fait, l’application génère automatiquement un dictionnaire qui permet d’utiliser les fonctions AppleScript en Swift. À partir de là, tous les logiciels qui pouvaient être automatisés avec le langage de script d’Apple peuvent servir dans le nouveau langage. Toutes les fonctions sont préservées, ce qui facilitera le passage d’un langage à l’autre.

Scriptarian est une excellente idée et les possibilités sont immenses, encore plus qu’avec AppleScript dans la majorité des cas. Ce logiciel est encore jeune et il lui manque des choses, en particulier le GUI Scripting qui permet de manipuler l’interface et qui est utile pour aller au-delà des apps prises en charge. Le framework ScriptingKit qui ajoute des fonctions spécifiques à Swift sera probablement enrichi au fil des versions et c’est déjà prometteur.

Le plus gros défaut de cette solution, c’est qu’elle implique d’apprendre un nouveau langage. Scriptarian est sans doute davantage recommandé au développeur iOS ou macOS qui veut écrire quelques scripts, plutôt qu’à l’amateur qui maîtrise bien AppleScript, mais qui n’a que de vagues notions de Swift. La logique est totalement différente et on est très vite perdu, même pour les tâches les plus simples.

Scriptarian représente sans doute le futur de l’automatisation sur Mac, plus en tout cas qu’AppleScript. Néanmoins, ce dernier garde pour lui une simplicité d’accès inégalée et aussi quelques solutions qui, à défaut d’être très élégantes, sont bien pratiques pour s’en sortir dans tous les cas. Cela étant, il faut être honnête : un débutant ferait mieux de commencer directement avec le nouveau langage d’Apple, c’est un meilleur investissement sur l’avenir.

Un script très simple dans Scriptarian : il récupère l’URL du premier onglet dans Safari et affiche une boîte de dialogue qui indique s’il s’agit de MacGeneration ou non.
Un script très simple dans Scriptarian : il récupère l’URL du premier onglet dans Safari et affiche une boîte de dialogue qui indique s’il s’agit de MacGeneration ou non.

Le plus gros problème de cette solution à l’heure actuelle, c’est qu’elle est payante et qu’on ne peut pas la tester avant achat. Scriptarian doit être acheté 10 $ (9 €) sur le site de l’éditeur et il n’y a aucun moyen de le télécharger avant cela pour un essai. C’est dommage, mais nous avons contacté les développeurs pour savoir si c’était prévu. En revanche, les scripts sont exportés sous la forme d’exécutables indépendants qui fonctionneront sur n’importe quel Mac.

[MàJ 3/11/2016 18h39] : l'éditeur nous a confirmé qu'une version de démonstration était bien prévue. D'ici là, vous obtiendrez un remboursement sur simple demande si le logiciel ne vous convient pas.

OS X 10.11 est nécessaire au minimum et l’interface n’est proposée qu’en anglais.

avatar cenker | 

Quelqu'un aurait un site pour des Tuto avec Swift/Xcode
Car pour un simple slide menu à la Facebook je galère comme pas possible ..

avatar stivjobs | 

Si l'anglais ne te dérange pas, c'est le meilleur site que je connaisse sur le sujet : https://www.raywenderlich.com

avatar zarghol | 

Tu trouveras ce que tu veux sur openclassroom ou en lisant le guide du Swift d'Apple dispo dans l'iBook Store :)

avatar BooBoo | 

Ha, enfin... je suis développeur, mais je n'ai jamais reussi à me faire à la syntaxe d'applescript !

avatar Nicolas Furno | 
@ BooBoo : je crois qu'il faut ne pas être développeur pour apprécier l'AppleScript. :-)
avatar mbritto | 

+1, j'ai jamais réussi à me motiver pour m'y investir, cette app pourrait changer la donne pour moi :)

avatar Nicolas Furno | 
@ mrbitto : à quand la formation Swift light pour créer des scripts ? Moi je serais preneur !
avatar mbritto | 

he he :) Pour le moment je n'ai pas encore exploré Scriptarian, mais je pense le regarder en décembre et si c'est vraiment sympa pourquoi pas une mini formation !

avatar C1rc3@0rc | 

@BooBoo

Oui AppleScript est un immondice en terme de langage de programmation, parce qu'en fait c'en est pas un... c'est une soupe grasse a base de peudo-anglais ou baignent des principes immaitrisables de programmation tellement ils sont dilués. Ce herrisse le vrai developpeur et ça rebute l'utilisateur. Finalement il n'y a qu'une petite poignée de sur-motivés qui se sont specialisés dans cette chose, qui arrive a gros efforts a finir par lui trouver une utilité..

En theorie, AppleScript n'est qu'une sauce, fort grasse et amere, qui accomode l'IAP standard. En principe n'importe quel langage de scripting peut remplacer l'infame Applescript. Il y a eu des tentatives avec Ruby, Python et Closure, mais aprés les avoir soutenue, Apple les a abandonnées au profit de Javascript.
Le probleme avec AS et l'IAP c'est qu'Apple n'a jamais ete ni constante, ni precise et surtout c'est une fonction qui n'a jamais ete mise en avant.
Apres Apple se focalise surtout sur iOS et la pas question de scripting!

L'idée de cette boite est bonne, on pourrait meme dire que c'est une évidence. Maintenant j'ai dans l'idée qu'ils se sont lancés intelligemment avec l'intention de se faire racheter par Apple avec un solution qui marche. Le pari est risqué puisque Apple va sortir certainement une version native de Swift -scripting- dans MacOS dans la prochaine ou la suivante version.

avatar ovea | 

@C1rc3@0rc :
«…AppleScript est un immondice…»

C'est pas vraiment l'enjeu !

L'accès au fonctionnalités demande un dictionnaire structuré
… je m'explique :
Telle application pourra être scriptée* par l'utilisateur, mais le développeur doit faire son travail pour ouvrir cet accès, voir et surtout sur des composantes d'accès en dehors des clous documentés par Apple ;)

* c'est aussi un point d'accès du même tonneau pour les commandes d'accès vocales pour l'utilisateur

avatar Eurylaime | 

Ce qui est important dans AppleScript (OSA en fait), ce n'est pas le language mais le mécanisme des Apple Events.

avatar byte_order | 

sinon y'a a peu près la même chose de possible pour Python : le module gensuitemodule génére du code python a partir du dictionnaire AS d'un application macOS scriptable, et ensuite y'a plus qu'à importer le code généré pour l'utiliser depuis du code python natif.

avatar occam | 

@byte_order

Justement, si mes expériences avec gensuitemodule, aepack et appscript m'ont appris une chose, c'est que pour ce genre de scripting, il faut qu'une communauté de développeurs soit suffisamment active.

Swift évoluera certainement plus vite que Python ; et qui garantit que Scriptarian suivra, et ne subira pas le même sort que appscript (qui avait au moins l'avantage d'être open source et d'avoir une communauté ) ?

avatar Nicolas Furno | 

@occam

C'est vrai que c'est ce qui m'inquiète le plus pour cette app. Cela dit, Apple elle-même avait parlé de script en présentant Swift donc je suis persuadé que c'est la solution d'avenir désormais.

avatar occam | 

@nicolasf

Nicolas, merci du retour.
Mais pour que Scriptarian (ou une autre app de scripting pour Swift) soit viable, il faudrait qu'elle soit embarquée par Apple. Officiellement.
Avez-vous des indications à ce sujet ?

Apple a une certaine tradition du lâchage dans le domaine de ses langages.

avatar Nicolas Furno | 

@occam

Rien depuis la première présentation à ma connaissance. Peut être avec Swift 4 ?

avatar byte_order | 

> Justement, si mes expériences avec gensuitemodule, aepack et appscript m'ont appris
> une chose, c'est que pour ce genre de scripting, il faut qu'une communauté
> de développeurs soit suffisamment active.

Et pour ça, il faut une demande suffisante.
Hors force est de constater que coté Python sur Mac y'a pas assez de demande pour que la communauté des devs Mac se soient chargé de tenir à jour appscript, en effet.

C'est l'inconvénient des plateformes minoritaires: atteindre la masse critique de demande.
Je suis d'accord sur vos inquiétudes autour de Scriptarian.

Y'a SwiftAE en open source qui pourra vous intéresser éventuellement, dans ce cas. Je suppute que c'est ce que Scriptarian utilise en interne, d'ailleurs.

https://bitbucket.org/hhas/swiftae/

avatar occam | 

@byte_order

Merci pour le lien, je ne connaissais pas encore SwiftAE.

avatar ovea | 

«…en particulier le GUI Scripting qui permet de manipuler l’interface et qui est utile pour aller au-delà des apps prises en charge.»

Il y a un logiciel qui permet de déterminer de façon interactive les éléments de l'interface qui ne sont pas documentés par Apple : UI Browser (http://pfiddlesoft.com/uibrowser/)

avatar Nicolas Furno | 

@ovea

Je ne connaissais pas tiens, c'est vrai que ça a l'air complet. J'essaie d'éviter au maximum le GUI Scripting mais dans certains cas, ça pourrait bien aider.

avatar hhas01 | 

"À notre connaissance, cet utilitaire est le premier à offrir une solution complète pour exploiter Swift à des fins d’automatisation sur Mac."

Mais non. ScriptingBridge.framework [1] du macOS est le premier (mais il est merde).

Le deuxième est le SwiftAutomation.framework [2] que j'ai écrit (j'ai écrit appscript aussi). Il est gratuit, fonctionne très bien, et presque fini, mais vous devez utiliser Xcode (SwiftAutomation n'est pas une app d'écriture).

Scriptarian.app est le troisiéme, et le idée du app complète est très bon, mais le capacités de son automation est très limité et une alternative pauvre au AppleScript. (Moi, je voudrais Mark Alldritt, auteur du Script Debugger, a écrit a release pour Swift aussi❣️ Peut être dans futur…?)

(Avec des excuses pour mon mauvais français.:)

[1] https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/Introduction/Introduction.html

[2] https://hhas.bitbucket.io/

avatar Nicolas Furno | 

@ hhas01 : merci pour ces précisions. Ce que je voulais dire avec solution complète, c'est aussi que l'éditeur est intégré.

Mais votre solution semble effectivement bien plus ambitieuse. Malheureusement, pour quelqu'un comme moi qui maîtrise bien AppleScript, mais pas du tout Swift, c'est encore plus compliqué j'ai l'impression.

avatar hhas01 | 

@nicolas: Pas plus ambitieuse; 100% complet. Aussi simple que possible, mais pas plus.
La suppression de fonctionnalités n'est pas une solution. Oui, c'est plus complexe (parse que AppleScript est plus complexe aussi! et Swift est trés trés compliquée!), mais il dispose de beaucoup plus de documentation et d'outils. S'il fonctionne dans AppleScript il ne manquera pas dans SwiftAutomation.

(Si vous avez Xcode, créer et exécutez l'application 'AppleScriptToSwift' dans SwiftAutomation pour une grande surprise. Ce n'est pas un éditeur, mais c'est le "Google Translate" d'AppleScript!:)

Le ScriptingBridge du Apple a prouvé qu'une solution limitée ou cassée échouera. Mon appscript a prouvé une solution aussi bonne que X allait réussir. Nous avons enseigné aux utilisateurs de Python et Ruby à l'utiliser. Nous pouvons enseigner aux utilisateurs de Swift à l'utiliser.

Mais occam et moi et des autres sont corrects: Il moût être intégré par Apple. Officiellement. Et je vais le donner à Apple aussi (je l'ai déjà offert), mais ils ne vont pas me écouter seul. Tout le monde doit demander à Apple de l'adopter en premier – les voix de milliers (ou dizaines de milliers) de clients seront plus difficiles à ignorer! :)

avatar occam | 

@hhas01 :

Thanks, you made my day!

D'abord, merci pour SwiftAutomation, que j'ai hâte d'essayer !

Ensuite, j'aimais beaucoup appscript ("while it lasted...").
Merci pour cet effort. C'était vraiment bien. Neat, clean and clear.

À qui s'adresser, chez Apple, pour demander que SwiftAutomation soit adopté officiellement ?

avatar hhas01 | 

Thank you, you are very kind. I still regret that I let appscript's users down. It was the first and only genuine alternative to AppleScript in the last 20 years – Apple even considered including it in OS X 10.5 – but I failed to do the promotion and education work that could have made it it a popular and lasting success.

I am happy to write the SwiftAutomation code, but I do not have the time to promote and support it in the long term, so I ask everyone who wants a true alternative to AppleScript to submit a feature request to Apple, asking them to take possession of SwiftAutomation and add it to macOS:

https://bugreport.apple.com/">https://bugreport.apple.com/

If you know anyone in Apple or the Swift team who might be interested in it, then please tell them about it too.

-----

Merci, vous êtes très gentils. Je regrette toujours que je laisse les utilisateurs d'appscript en panne. Il a été la première et la seule alternative authentique à AppleScript au cours des 20 dernières années - Apple a même envisagé de l'inclure dans OS X 10.5 - mais je n'ai pas réussi le travail de promotion et d'éducation qui aurait pu le faire Un succès populaire et durable.

Je suis heureux d'écrire le code SwiftAutomation, mais je n'ai pas le temps de le promouvoir et de le supporter à long terme, donc je demande à tout le monde qui veut une véritable alternative à AppleScript de soumettre une demande de fonctionnalité à Apple, leur demandant de prendre possession de SwiftAutomation et de l'ajouter à macOS:

https://bugreport.apple.com/">https://bugreport.apple.com/

Si vous connaissez quelqu'un d'Apple ou de l'équipe Swift qui pourrait être intéressé par elle, alors s'il vous plaît leur dire à ce sujet aussi.

avatar hhas01 | 

byte_order: "Y'a SwiftAE en open source qui pourra vous intéresser éventuellement, dans ce cas. Je suppute que c'est ce que Scriptarian utilise en interne, d'ailleurs."

Non. Hélas. L'auteur de Scriptarian ne comprendre pas AppleScript et refuse de me parler. :(

CONNEXION UTILISATEUR