Automatisation : Workflow, après des années d’AppleScript

Nicolas Furno |

J’utilise un Mac depuis plus de dix ans et parmi toutes les choses que j’ai découvertes grâce au système d’Apple, la plus importante à mes yeux est l’automatisation. Avant de découvrir macOS, je n’avais jamais eu l’idée d’utiliser un script et encore moins d’en écrire pour réaliser une tâche simple et répétitive. C’était avant de tester Automator et surtout AppleScript, deux outils qui ont changé mon rapport à l’informatique.

Au début, je bricolais des scripts très simples, mais au fil des années, j’ai entrepris des projets plus ambitieux. Sans prétendre être un expert, j’ai suffisamment d’expérience en AppleScript aujourd'hui pour automatiser une bonne partie des tâches répétitives sur mon Mac, notamment tout ce qui est lié à mon travail pour MacGeneration.

Extrait de l’un des scripts écrits pour MacGeneration. Cliquer pour agrandir

Mais cet article n’est pas consacré à AppleScript, ni même au Mac. Profitant de quelques jours de congés, j’ai entrepris d’adapter l’un des scripts utilisés pour MacGeneration aux appareils iOS. J’avais écrit la version macOS et j’étais curieux de voir si je pouvais reproduire la même chose sur iPhone et iPad.

Quelques heures de découverte et de manipulation plus tard, j’avais un workflow fonctionnel. Cet article revient sur cette première expérience d’automatisation sur iOS, avec le regard d’un scripteur sur Mac.

Démonstration du workflow, ici à partir de notre app. Il est conçu pour fonctionner à partir de n'importe quel menu de partage d’iOS.

Workflow, quasiment la seule solution pour automatiser iOS

L'application Workflow, qui permet de réaliser des scripts pour iOS, a gagné beaucoup en visibilité en se faisant acheter par Apple, en mars dernier. Depuis, le constructeur a retiré quelques fonctions à la marge, mais l’app est restée largement inchangée, si ce n’est qu’elle est proposée gratuitement sur l’App Store. La WWDC est passée sans même une mention de l’app et on ne sait toujours pas, à ce stade, ce que l’entreprise compte en faire.

Est-ce qu’une future version d’iOS intégrera une relecture mobile d’Automator basée sur Workflow ? Après tout, les deux apps partagent le même concept de base et on pourrait avoir une intégration bien plus poussée qu’aujourd'hui côté mobile.

La galerie intégrée Workflow est un bon moyen de découvrir de quoi est capable l’app. Cliquer pour agrandir

À défaut de savoir quel futur Apple réserve à Workflow, elle reste quasiment la seule solution pour automatiser iOS. D’autres voies peuvent être suivies, en particulier si vous maîtrisez Python (Pythonista offre alors un environnement complet), mais ces solutions sont assez fermées sur elles-mêmes, là où la force de Workflow est précisément son ouverture. L’app est bien intégrée à iOS, elle peut agir avec les apps installées en local et avec des services en ligne.

Le plus gros point fort de l’app est probablement son intégration dans le menu de partage d’iOS, ce qui est indispensable pour ce que je voulais faire. C’est pourquoi le choix de l’outil a été très simple : pour mes besoins, c’était à ma connaissance la seule solution pour adapter le script que j’avais créé à l’origine sur Mac.

Workflow, l’automatisation simplifiée…

Ce n’est pas la première fois que j’utilisais Workflow, j’ai même été certainement le premier à l’utiliser à la rédaction, en tout cas, j’avais annoncé son lancement, fin 2014. Mais je n’avais jamais utilisé l’app sérieusement, au-delà de quelques minutes d’expérimentations pour rédiger un article ou essayer une fonction.

Workflow sur un iPad Pro. Cliquer pour agrandir

Cette expérience a donc été ma première utilisation poussée de l'app. C’est la première fois que j’ai créé un processus de A à Z et que je l’ai utilisé ensuite régulièrement sur mes appareils iOS. Les débuts n’ont pas été faciles ; tant que vous vous contentez de choses assez simples, l’app est bien plus agréable à utiliser que les solutions d’automatisation sur Mac, mais elle devient plus complexe dès lors que l’on passe un certain cap.

Commençons par le positif. L’idée de composer un processus en enchaînant des briques qui correspondent à chaque fois à une fonction n’est pas nouvelle, mais elle est toujours aussi pertinente. C’est sans doute la mieux adaptée par ailleurs à un environnement tactile et l’interface de l’app sur un iPad est particulièrement bien conçue, avec le processus sur la droite et la liste exhaustive des briques à disposition sur la gauche.

Depuis 2005, Automator permet d’automatiser des tâches simples en combinant plusieurs briques. C’est en quelque sorte l’ancêtre de Workflow, en tout cas le concept est identique. Cliquer pour agrandir

Tout comme Automator avant elle, Workflow excelle pour réaliser des opérations simples. Faire quelques calculs, récupérer des images depuis une page web, créer un PDF à partir de plusieurs sources, envoyer un message avec votre position ou l’estimation du temps pour rentrer, créer une nouvelle liste de lecture, etc. Les exemples de base dans la galerie sont très utiles et très simples.

… mais qui atteint vite ses limites

Dans mon cas, j’avais besoin d’un workflow plus complexe. Pour résumer, l’idée est de récupérer l’adresse et le titre d’une page web pour ensuite l’envoyer sur le serveur Gitlab qui sert de gestionnaire de tâches en interne à la rédaction. L’envoi doit se faire en utilisant l’API fournie par Gitlab et je savais que Workflow était capable de le faire depuis l’automne dernier.

La principale difficulté du processus est son cadre très souple. S’il ne devait fonctionner que depuis le partage de Safari, le workflow serait très simple. Mais il doit servir à tout et n’importe quoi : une app dans l’App Store, un tweet, un lien pioché dans un lecteur de flux RSS… Par ailleurs, je voulais pouvoir le lancer sans partir d’une URL, mais directement dans Workflow, ou via le widget de l’app. Dans ce cas de figure, le processus peut récupérer l’URL dans le presse-papier pour l’utiliser comme source, ou en dernier recours, demander à l’utilisateur de saisir manuellement le nom de la tâche à ajouter.

Workflow permet de lancer un processus en utilisant un widget, ce qui est très pratique pour un accès rapide. Cliquer pour agrandir

Mes débuts ont été compliqués et c’est l’un des plus gros points faibles de Workflow : il y a beaucoup d’exemples qui circulent sur internet et ils forment une base pleine d’enseignements. Néanmoins, ils sont souvent difficiles à trouver et l’app manque d’une documentation vraiment exhaustive.

La documentation officielle mérite d’être lue, mais elle est beaucoup trop courte et ne couvre pas tous les sujets, loin de là. Si vous cherchez à comprendre comment fonctionnent certaines briques avancées, comme celle qui est dédiée aux API web, vous aurez vite fini votre lecture et vous n’aurez pas toutes les informations. Sur ce point, la jeunesse de Workflow joue en sa défaveur et l’app aurait bien besoin d’une documentation beaucoup plus complète et détaillée.

Je ne suis pas sûr que cela viendra rapidement et c’est dommage, car je trouve que certaines actions de base ne sont pas très claires. Je vais prendre un exemple : mettons que vous voulez récupérer le titre d’une page web, et vous n’avez que son URL. Vous pensez que la brique « Get details of Safari Web Page » qui dispose justement d’une option pour récupérer le nom fera l’affaire ? Eh bien, pas du tout.

Pendant mes premières expérimentations avec Workflow, alors que j’essayais de récupérer le titre d’une page web à partir de son adresse. Ce n’est pas ainsi qu’il faut procéder. Cliquer pour agrandir

L’opération est en fait plus complexe. À partir de l’URL, vous devrez utiliser l’action « Get Contents of URL » sans option supplémentaire (ce composant peut servir à beaucoup de choses, ici on veut simplement télécharger la page web, en quelque sorte), puis la brique « Get Name » pour obtenir l’information.

Voici la bonne solution : prendre une URL, suivre les éventuelles redirections, puis deux briques spécifiques qui extraient le nom de la page. Cliquer pour agrandir

Ce n’est pas vraiment intuitif et pour être franc, ce n’est pas vraiment mieux en AppleScript, sauf si vous lancez le script à partir de Safari ou Chrome. Ce qui m’a semblé étrange, c’est que Workflow contient des actions qui semblent complètes, mais qui ne fonctionnent pas toujours de manière très instinctive.

C’est la même chose pour récupérer les informations sur une app de l’App Store. Il existe bien une action, mais elle elle est souvent trop restrictive. Le plus « simple », le plus fiable en tout cas, est d’utiliser la recherche fournie par Workflow et l’identifiant de l’app, préalablement récupéré dans son URL en filtrant le texte. C’est plus long à mettre en place, mais ce n’est pas très grave tant que le résultat est là.

Pour récupérer des informations sur une app, le mieux est d’extraire son identifiant unique et d’utiliser la brique de recherche de Workflow. Une meilleure solution serait toutefois d’améliorer la brique Get Details of App Store App pour qu’elle fonctionne aussi à partir d’une URL. Cliquer pour agrandir

Le vrai problème, c’est de trouver ces solutions. Si vous avez la chance d’avoir quelques personnes qui vous suivent sur les réseaux sociaux, vous pouvez faire comme moi, râler et obtenir des réponses (merci mille fois @MarcosIckx, au passage, sans qui j’aurais probablement abandonné à ce stade).

Sans cela, c’est beaucoup plus compliqué, sachant que la documentation est trop légère et que les exemples mis en avant dans la galerie restent très simples. Je n’ai jamais eu ce problème avec AppleScript : en sept ou huit ans de pratique, j’ai toujours trouvé quelques lignes de code quelque part pour faire ce que je voulais ou au moins me mettre sur la voie.

La galerie intégrée à Workflow permet de voir comment un processus est créé. C’est utile quand on débute, mais les exemples restent limités en nombre et en complexité. Cliquer pour agrandir

Mon conseil, faute de mieux, si vous cherchez de l’aide avec Workflow : commencez avec MacStories, vous y trouverez plusieurs conseils et de multiples exemples documentés de processus. Si cela ne suffit pas, le subreddit de Workflow est assez fréquenté et il contient pas mal de questions/réponses qui pourront aider. C’est aussi probablement le meilleur endroit pour poser vos questions… il va sans dire qu’une bonne maîtrise de l’anglais est indispensable.

Je voudrais un Workflow sur Mac

Workflow est une app strictement réservée à iOS et cela ne devrait pas vraiment changer avec l’acquisition d’Apple. Ce n’est pas un problème en soi et la simplicité de cette app, l’un de ses points forts, est aussi liée à cette restriction. Néanmoins, j’aurais vraiment apprécié une solution pour créer les workflow ailleurs que sur un iPhone ou un iPad. Sur mon Mac, par exemple, même si l’interface actuelle pourrait être améliorée pour répondre à mes critiques.

Ceci est un montage. Cliquer pour agrandir

Le premier workflow que j’ai créé compte 77 actions, toutes piochées une à une dans la liste de gauche et glissée à droite. À ce niveau de complexité, l’app commence à poser de sérieux problèmes. Par exemple, il est impossible de sélectionner plusieurs actions pour les déplacer en même temps, il faut le faire une par une. Quand vous voulez changer la logique du programme et intégrer toute une section à l’intérieur d’une action if/then, vous devez prendre chaque bloc et le positionner au bon endroit.

Pour être tout à fait juste, Workflow permet bien de déplacer plusieurs blocs à la fois, mais en utilisant plusieurs doigts. Sur un iPhone, c’est quasiment impossible et sur un iPad, la gymnastique est beaucoup trop complexe pour que ce soit confortable. Un système de sélection multiple réglerait ce problème, même si, de façon plus fondamentale, Workflow gagnerait à s’inspirer un petit peu plus de l’algorithmique.

Au fil des mises à jour, l’app a gagné des outils avancés, notamment pour ajouter des conditions ou encore des boucles pour traiter chaque élément d’une liste. Néanmoins, ses concepteurs n’ont pas été jusqu’au bout et il n’y a pas le concept de fonction. Ce serait pratique pour prendre quelques briques qui font une action précise, et ensuite pour les réutiliser à divers endroits. Ce serait aussi très pratique pour déplacer rapidement des morceaux entiers du processus, comme l’app le fait d’ailleurs avec ces outils avancés.

Quand vous déplacez une boucle ou une action if/then comme ici, Workflow déplace aussi automatiquement tout ce qu’elle contient. Ce serait le même principe avec des fonctions.

Là aussi, il existe bien une solution, mais elle n’est pas très pratique. Un workflow peut en appeler un autre, et vous pourriez ainsi créer des petits processus de base et constituer le workflow final en les appelant. Pour ma part, je préfère avoir tout un projet en un seul endroit, et ce n’est pas une solution fiable si on veut partager le projet, puisqu’il faut partager tous les processus séparément.

Le concept de fonctions apporterait beaucoup à Workflow et permettait d’aller nettement plus loin, de gagner du temps en réduisant les répétitions tout en simplifiant l’interface. En l’état, les actions sont empilées les unes sur les autres pour former une très longue liste qui devient vite ingérable. Et puis le catalogue d’actions aurait bien besoin d’attention lui aussi. J’ai passé mon temps à chercher des éléments, souvent les quatre ou cinq mêmes.

Workflow nécessite beaucoup de déplacements entre le processus et la liste d’actions, et souvent pour reprendre les mêmes éléments. Cette série d’actions (on récupére une variable, on agit dessus et on enregistre une variable ) est l’une des plus courantes en programmation. L’app oblige à multiplier les allers et retours, surtout sur un iPhone. Cliquer pour agrandir

Sur ce point, l’app pourrait facilement être améliorée. On peut ajouter des actions à ses favoris, mais la liste n’est pas synchronisée d’un appareil à l’autre et il faut la trier à la main (par défaut, c’est par ordre d’ajout). Workflow gagnerait à afficher les actions par fréquence d’utilisation, tout simplement, ou bien offrir un moyen de copier-coller des actions, ce qui serait encore plus simple.

Le partage de workflow reste un problème

La dernière critique que je ferais contre Workflow est assez spécifique à mes besoins. Le processus que j’ai créé n’était pas que pour mon usage personnel, il devait aussi servir à mes collègues. Et c’est là qu’un problème surgit : le partage de workflow n’est pas optimal, loin de là.

Même si un processus peut être sauvegardé comme un fichier depuis l’app, il n’est pas possible ensuite d’ouvrir ce fichier pour l’importer sur un autre appareil iOS. La seule solution de partage est de passer par une URL publique, ce qui est déjà problématique en soi. Une fois publié, le processus peut être utilisé par n’importe qui, ce qui veut dire que vous ne pouvez pas y laisser des informations personnelles.

Par exemple, la clé d’authentification au serveur Gitlab qui nous sert de gestionnaire de tâches ne doit pas être publiée, sinon n’importe qui pourrait utiliser le workflow. Il existe une solution à ce problème toutefois, et elle est bien trouvée. Vous pouvez définir des questions d’import qui permettent à l’utilisateur de saisir des données au moment où il ajoute le workflow à son iPhone et iPad.

Le système de questions posées à l’import est très bien pensé. À gauche, définition des questions avant le partage, à droite réponse aux questions au moment de l’import. Cliquer pour agrandir

Le plus gros problème du partage en l’état actuel, c’est qu’Apple a retiré la publication sur la galerie sans offrir d’alternative. Workflow ne permet plus vraiment de publier quelque chose et de le retrouver ensuite sur son profil. La seule solution est de conserver précieusement l’URL de partage, mais les problèmes ne s’arrêtent pas là.

Plus gênant en effet, on ne peut plus mettre à jour un workflow, ni en supprimer un. Une fois publié, un processus reste constamment disponible dans son état original. Pour modifier le processus, vous devrez le partager à nouveau et obtenir en échange une nouvelle URL. C’est pénible pour l’auteur du script, mais aussi pour les utilisateurs qui ne peuvent pas récupérer la mise à jour sans écraser l’ancienne version ou dupliquer le processus.

Voici à quoi ressemble un workflow depuis son URL de partage. Je mets la date dans la description pour m’y retrouver entre toutes les URL générées successivement… ce n’est pratique pour personne. Cliquer pour agrandir

Espérons qu’Apple a l’intention d’améliorer ce système de partage, c’est un point noir de l’app pour le moment. Au minimum, il faudrait un moyen de charger des workflow depuis n’importe quel emplacement, mais je comprends bien pourquoi Apple refuse de le faire. Tout comme je n’ai aucun espoir pour le suivi des modifications avec Git comme je le fais pour mes AppleScript. Tout est très fermé, essentiellement pour des raisons de sécurité, et cela ne devrait pas changer.

Le partage est une déception, par contre les workflow sont synchronisés d’un appareil à l’autre (sans passer par iCloud, mais toujours par un serveur tiers, bizarrement) et cela fonctionne vraiment bien.

Workflow reste une excellente solution pour automatiser iOS

Tout n’est pas négatif pour autant et certaines fonctions de Workflow sont bien mieux pensées qu’avec AppleScript, Automator ou n’importe quel autre système d’automatisation que j’ai pu tester jusque-là. La gestion des API Web est complète et simplifiée par rapport à un appel avec la ligne de commande curl comme j’ai appris à le faire dans mes scripts macOS.

Dans un autre domaine, la gestion des variables est exemplaire dans Workflow. Ces éléments sont indispensables dans la plupart des cas, ils servent à enregistrer une information puis la modifier et la retrouver à un autre endroit, la combiner avec une autre variable, etc. L’app permet d’enregistrer à peu près n’importe quoi dans une variable et l’exploiter ensuite, mais la vraie bonne idée, ce sont les « variables magiques » ajoutées en début d’année.

Les Magic Variable en action : sélection de la source à gauche, choix d’une option associée à droite. Cliquer pour agrandir

Pour en insérer une, Workflow change de mode et met en avant les variables reconnues automatiquement, en plus de celles que vous définissez. Par exemple, ce que le workflow récupère en entrée est une variable magique, les résultats de recherche sur l’App Store également. Si vous insérez une action pour poser une question à l’utilisateur, le résultat en est une aussi.

Dans certains cas, Workflow peut même aller plus loin. Reprenons l’exemple de l’App Store : la variable magique ne se contente pas de pointer vers toutes les informations, elle propose même de choisir un élément, comme le nom de l’app, son prix ou encore sa description. C’est très pratique et nettement plus rapide qu’en AppleScript, où je dois déchiffrer et trier moi-même les données fournies par l’App Store.

Workflow a des défauts, mais ce sont au fond souvent des points de détail ou des éléments qui peuvent facilement être corrigés. Une partie des problèmes recensés pendant cette expérience tiennent de sa jeunesse et de son équipe très limitée : avant son changement de propriétaire, l’app ne comptait que quatre développeurs.

Workflow a trouvé une place de choix dans le dock d’iOS 11. Cliquer pour agrandir

Certes, on ne sait pas ce qu’Apple en fera et peut-être que toutes les heures passées sur ce workflow et les suivants seront perdues dans quelques mois. Ce n’est pas du temps perdu pour autant et on peut rester confiant : Apple n’a jamais acheté une app ou un service pour ne rien en faire derrière. La plus grande inquiétude est peut-être le calendrier : s’il faut attendre iOS 12 sans aucune mise à jour, l’outil risque de perdre en pertinence.

Rien ne sert de paniquer aujourd'hui toutefois, Apple a peut-être prévu une nouvelle app présentée à l’automne. Workflow revu et corrigé, intégré au cœur d’iOS et enrichi avec l’intelligence artificielle désormais au cœur de la stratégie du constructeur, pourrait être bien meilleur que ce que l’on a aujourd'hui. Et pourquoi pas remplacer au passage AppleScript et Automator sur macOS ?

En attendant d’en savoir plus, Workflow reste la meilleure solution aujourd'hui pour automatiser un appareil iOS. Et malgré ses défauts, l’app permet bien de créer des processus, même complexes, même sur la plage… mon Mac et AppleScript ne peuvent pas en dire autant !

Accédez aux commentaires de l'article