0 votos

Cómo añadir una versión a un flujo de trabajo de servicio de Automator

Tengo un flujo de trabajo que está instalado como un servicio. Se utiliza para llamar al código de mi applet AppleScript. El Servicio tiene una acción: una acción "Ejecutar AppleScript". Actualizo el Servicio bastante a menudo con mejoras.

Necesito una forma de saber que la versión instalada de mi Servicio es antigua. Una forma podría ser darle una "versión".

He probado muchas formas, ninguna de las cuales ha funcionado. En particular, normalmente hay una clave CFShortVersionString en el archivo info.plist de una aplicación. Puedo añadirla al archivo info.plist de mi servicio. Pero, cuando abro mi Servicio en Automator.app, hago algunos cambios y luego guardo, todas mis entradas personalizadas en el archivo info.plist se borran.

¿Existe un editor para los flujos de trabajo de Automator que no elimine las claves personalizadas en el archivo info.plist?

Gracias.

UDATE: Añadir una variable al flujo de trabajo es una buena idea. Pero, no puedo trabajar para mí. Ayer, añadí la variable llamada "Versión" y le di un valor "1.21". Hoy, la variable sigue ahí pero está vacía. Probablemente porque todavía no entiendo cómo funciona todo y me he hecho un lío.

Al final, un archivo separado en el paquete del servicio que contenga sólo la cadena de la versión es fácil para mí, ya que mi applet AppleScript puede leerlo sin tener que analizar un archivo XML complicado (ya sea como texto plano o usando System Events).

Además, todavía no sé cómo los desarrolladores crean flujos de trabajo que SÍ contienen la versión y otras claves dentro del archivo info.plist. Automator elimina esas claves, por lo que los desarrolladores deben utilizar otra herramienta - Xcode ?

También he encontrado algunos servicios que contienen un archivo "version.plist". He buscado en Google durante horas, pero no he encontrado documentación sobre el contenido del archivo "version.plist", que parece duplicar algunas claves dentro de info.plist. El archivo "version.plist" no parece ser utilizado por Finder. En un servicio de ejemplo proporcionado por Apple, si elimino el CFBundleShortVersionString del archivo info.plist, pero conservo el archivo version.plist, la función Get Info de Finder no muestra ninguna versión.

ACTUALIZACIÓN 2: Aparentemente version.plist es utilizado por el Instalador. Más detalles aquí: http://mirror.informatimago.com/next/developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/Concepts/sd_pkg_version_info.html

No puedo encontrar ese detalle en ninguna parte de developer.apple.com así que, podría estar fuera de fecha/equivocado.

0voto

red_menace Puntos 111

El Info.plist es para aplicación se desea establecer una versión para un documento (flujo de trabajo, script, etc).

En un paquete de flujo de trabajo de Automator, el /Contenidos/documento.wflow es una lista de propiedades XML que declara las distintas acciones y su configuración (como el script para el Ejecutar AppleScript acción), conexiones de acción, metadatos de flujo de trabajo y variables. Esta lista de propiedades (o partes de ella) puede leerse en una lista o registro normal de AppleScript.

Posibles soluciones:

  1. Se puede añadir una variable al flujo de trabajo. Las variables pueden ser establecidas dinámicamente por el flujo de trabajo, en cuyo caso sólo tendrán valores cuando el flujo de trabajo se ejecute, o pueden crearse variables más persistentes haciendo clic con el botón derecho del ratón en el panel de variables y editándolas (un par de las variables incorporadas pueden ser arrastradas al panel, pero necesitarían ser editadas de todos modos). Un script podría mirar el documento.wflow para el nombre de la variable en la lista de variables (habrá una clave de variables) y obtener su valor.

  2. Se puede añadir un comentario en un Ejecutar AppleScript de la acción script. Esto funciona de forma similar a la adición de una variable, la diferencia es que un script tendría que buscar la acción en la lista de acciones (habrá una clave de acciones), obtener el script fuente de la acción, y luego buscar el comentario. No es mucho más difícil obtener el texto script, sólo que está enterrado un poco más profundo en la jerarquía (puedes comprobar la estructura de registros en el registro del editor script).

  3. Añadir un archivo de texto que contenga la versión al paquete/paquete de documentos. Los archivos añadidos parecen no tener problemas, pero un par de desventajas son que habría otro archivo que editar, y la versión no sería aparente cuando se trabaje con el script o el flujo de trabajo.

  4. Se puede añadir un atributo extendido al archivo, por ejemplo, /usr/bin/xattr -w com.myservice.version 2.9 /path/to/workflow . Esto también parece ser dejado solo, una (des)ventaja puede ser el uso de la Terminal o un shell script para leer y escribir el atributo.

Tenga en cuenta que el Finder no utiliza versiones para los documentos, y no conoce los atributos personalizados, por lo que nada de lo anterior aparecería en un Obtener información ventana.

El siguiente ejemplo utiliza el Suite de la lista de propiedades de Eventos del sistema para obtener listas de registros del archivo de listas de propiedades, que se utilizan para obtener el texto de la versión de una variable o el texto de script de un Ejecutar AppleScript acción (ajustar el nombre/texto como se desee):

on run -- example
   set plistFile to (choose file with showing package contents) -- get the document.wflow file
   # return scriptComment(plistFile) -- uncomment to use the script text
   return variableComment(plistFile)
end run

# Get version from a variable - the variable needs to be persistent (not generated by the workflow).
on variableComment(plistFile)
   tell application "System Events" to set variablesList to (get value of property list item "variables" of property list file (plistFile as text)) -- a record for each workflow variable
   if variablesList is not in {{}, missing value} then repeat with aRecord in variablesList
      try -- skip if no name or value key (built-in or not persistent)
         if |name| of aRecord is "Version" then -- or whatever
            return first item of value of aRecord -- the value is a list
         end if
      end try
   end repeat
   return missing value -- not found or no value
end variableComment

# Get version from script text - should be at the beginning of the first 'Run AppleScript' action.
on scriptComment(plistFile)
   tell application "System Events" to set actionsList to (get value of property list item "actions" of property list file (plistFile as text)) -- a record for each workflow action
   if actionsList is not in {{}, missing value} then repeat with aRecord in actionsList
      set theAction to action of aRecord -- base key
      if BundleIdentifier of theAction is "com.apple.Automator.RunScript" then
         repeat with aParagraph in paragraphs of (source of ActionParameters of theAction)
            if aParagraph contains "# Version" then -- or shebang, whatever
               return last word of aParagraph -- or wherever it is in the text
            end if
         end repeat
      end if
   end repeat
   return missing value -- not found or no value
end scriptComment

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X