0 votes

Comment ajouter une version à un flux de travail de service Automator

J'ai un workflow qui est installé en tant que Service. Il est utilisé pour appeler du code dans mon applet AppleScript. Le Service a une action : une action "Exécuter AppleScript". Je mets souvent à jour le Service avec des améliorations.

J'ai besoin d'un moyen de savoir que la version installée de mon Service est ancienne. Une façon pourrait être de lui donner une "version".

J'ai essayé de nombreuses façons, aucune n'a fonctionné. En particulier, il y a généralement une clé CFShortVersionString dans le fichier info.plist d'une app. Je peux ajouter cela au fichier info.plist de mon Service. Mais, lorsque j'ouvre mon Service dans Automator.app, apporte des modifications puis enregistre, toutes mes entrées personnalisées dans le fichier info.plist sont supprimées.

Y a-t-il un éditeur de workflows pour Automator qui ne supprime pas les clés personnalisées dans le fichier info.plist ?

Merci.

MISE À JOUR : Ajouter une variable au workflow est une bonne idée. Mais, je n'arrive pas à le faire fonctionner pour moi. Hier, j'ai ajouté la variable appelée "Version" et lui ai donné une valeur "1.21". Aujourd'hui, la variable est toujours là mais est vide. Probablement parce que je ne comprends toujours pas comment cela fonctionne et j'ai tout mélangé.

En fin de compte, un fichier séparé dans le bundle du service contenant simplement la chaîne de version est facile pour moi car mon applet AppleScript peut la lire sans avoir à analyser un fichier XML compliqué (soit en texte brut, soit en utilisant des Événements Système).

De plus, je ne sais toujours pas comment les développeurs créent des workflows qui contiennent des clés de version et d'autres clés à l'intérieur du fichier info.plist. Automator supprime ces clés et donc les développeurs doivent utiliser un autre outil - Xcode ?

J'ai également trouvé certains services qui contiennent un fichier "version.plist". J'ai fait des recherches sur Google pendant des heures mais je ne trouve aucune documentation sur le contenu du fichier "version.plist" - qui semble dupliquer certaines clés à l'intérieur de info.plist. Le fichier "version.plist" ne semble pas être utilisé par Finder. Dans un service exemple fourni par Apple, si je supprime CFBundleShortVersionString du fichier info.plist, mais que je conserve le fichier version.plist, les informations Obtenir des infos de Finder ne montrent aucune version.

MISE À JOUR 2 : Apparemment, version.plist est utilisé par Installer. Plus de détails ici : http://mirror.informatimago.com/next/developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/Concepts/sd_pkg_version_info.html

Je ne trouve pas ces détails nulle part sur developer.apple.com donc, cela pourrait être obsolète/faux.

0voto

red_menace Points 1014

Le Info.plist est destiné aux paramètres de l'application, vous souhaitez définir une version pour un document (flux de travail, script, etc).

Dans un package de flux de travail Automator, le fichier /Contents/document.wflow est une liste de propriétés XML qui déclare les différentes actions et leurs paramètres (comme le script pour l'action Exécuter un script Apple), les connexions d'actions, les métadonnées du flux de travail et les variables. Cette liste de propriétés (ou certaines de ses parties) peut être lue dans une liste ou un enregistrement AppleScript régulier.

Solutions possibles :

  1. Une variable peut être ajoutée au flux de travail. Les variables peuvent être définies dynamiquement par le flux de travail, auquel cas elles n'auront des valeurs que lorsque le flux de travail s'exécute, ou des variables plus persistantes peuvent être créées en cliquant avec le bouton droit dans le volet des variables et en les éditant (certaines des variables intégrées peuvent être glissées dans le volet, mais devraient de toute façon être éditées). Un script pourrait regarder le fichier document.wflow pour le nom de variable dans la liste des variables (il y aura une clé variables) et en obtenir sa valeur.

  2. Un commentaire peut être ajouté dans le script d'une action Exécuter un script Apple. Cela fonctionne de manière similaire à l'ajout d'une variable, la différence étant qu'un script devrait rechercher l'action dans la liste des actions (il y aura une clé actions), obtenir le script source de l'action, puis rechercher le commentaire. Il n'est pas beaucoup plus difficile d'obtenir le texte du script, il est juste enfoui un peu plus profondément dans la hiérarchie (vous pouvez consulter la structure de l'enregistrement dans le journal de l'Éditeur de script).

  3. Ajouter un fichier texte contenant la version au package/bundle du document. Les fichiers ajoutés semblent être laissés tels quels, mais quelques inconvénients sont qu'il y aurait un autre fichier à éditer, et la version ne serait pas apparente lors de travailler avec le script ou le flux de travail.

  4. Un attribut étendu peut être ajouté au fichier, par exemple, /usr/bin/xattr -w com.myservice.version 2.9 /path/to/workflow. Cela semble également être laissé intact, un (dés)avantage peut être l'utilisation du Terminal ou d'un script shell pour lire et écrire l'attribut.

Notez que le Finder n'utilise pas les versions pour les documents et ne connaît pas les attributs personnalisés, donc rien de ce qui précède n'apparaîtrait dans une fenêtre Obtenir des infos.

L'exemple suivant utilise la Suite de listes de propriétés de Événements système pour obtenir des listes d'enregistrements à partir du fichier de liste de propriétés, qui sont utilisées pour obtenir le texte de la version à partir d'une variable ou le texte du script d'une action Exécuter un script Apple (ajuster le nom/le texte comme désiré) :

on run -- exemple
   set plistFile to (choisir un fichier en montrant le contenu du package) -- obtenir le fichier document.wflow
   # retourner commentaireDuScript(plistFile) -- décommenter pour utiliser le texte du script
   retourner commentaireVariable(plistFile)
end run

# Obtenir la version à partir d'une variable - la variable doit être persistante (non générée par le flux de travail).
on commentaireVariable(plistFile)
   dire application "Événements système" de définir variablesList à (obtenir valeur de l'élément de liste de propriétés "variables" du fichier de liste de propriétés (plistFile en tant que texte)) -- un enregistrement pour chaque variable de flux de travail
   si variablesList n'est pas dans {{}, valeur manquante} then répéter avec un enregistrement dans variablesList
      essayer -- sauter si pas de clé nom ou valeur (intégrée ou non persistante)
         si |nom| de un enregistrement est "Version" then -- ou autre chose
            retourner le premier élément de valeur de un enregistrement -- la valeur est une liste
         fin si
      fin essayer
   fin répéter
   retourner valeur manquante -- non trouvé ou pas de valeur
end commentaireVariable

# Obtenir la version à partir du texte du script - devrait être au début de la première action 'Exécuter un script Apple'.
on commentaireDuScript(plistFile)
   dire application "Événements système" de définir actionsList à (obtenir valeur de l'élément de liste de propriétés "actions" du fichier de liste de propriétés (plistFile en tant que texte)) -- un enregistrement pour chaque action de flux de travail
   si actionsList n'est pas dans {{}, valeur manquante} then répéter avec un enregistrement dans actionsList
      définir laAction à action de un enregistrement -- clé de base
      si l'identifiant de paquet de laAction est "com.apple.Automator.RunScript" then
         répéter avec un paragraphe dans les paragraphes de (source de paramètres d'action de laAction)
            si un paragraphe contient "# Version" then -- ou shebang, peu importe
               retourner le dernier mot de un paragraphe -- ou où qu'il soit dans le texte
            fin si
         fin répéter
      fin si
   fin répéter
   retourner valeur manquante -- non trouvé ou pas de valeur
end commentaireDuScript

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X