3 votos

¿Cómo puedo acceder a mi .plist con JXA (Javascript for Automation)?

Según el diccionario script:

PropertyListFileObject [inh. Archivo] : Un archivo que contiene datos en formato de lista de propiedades

propiedades:
(PropertyListItem) : el contenido del archivo de la lista de propiedades; se puede acceder a los elementos y propiedades del elemento de la lista de propiedades como si fueran elementos y propiedades del archivo de lista de propiedades

y en la de Apple Notas de la versión de JavaScript for Automation

... el objeto devuelto es un especificador de objeto - una referencia a la propiedad a la que se ha accedido- en lugar del valor real. Para enviar el evento get a la entidad externa y devolver su valor llame a la propiedad como una función:

Pero no sé cómo utilizar correctamente el especificadores de objetos Me devuelven, ni puedo ver cómo proporcionar el particular plistPath a la PropertyListFile . Esto es lo que he probado:

let app = Application.currentApplication()
app.includeStandardAdditions = true

let systemEvents = Application("System Events")
let plistPath = Path("/Users/iain/testing.plist")
let cats = systemEvents.PropertyListFile(plistPath).catsList

console.log(cats)     /* --> undefined */

Estoy tratando de emular el Applescript:

to getCats()

    tell application "System Events"

        tell property list file plistPath
            set availableCategories to value of property list item "catsList"
        end tell

    end tell

end getCats

Este es el archivo .plist:

 nodejxa % cat ~/testing.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>blogPath</key>
    <string>/Users/iain/WebDev/iainhouston.github.io/_posts/</string>
    <key>catsList</key>
    <array>
        <string>Blog</string>
        <string>Devops</string>
        <string>Drupal</string>
        <string>Formal Methods</string>
        <string>Parish Councils</string>
        <string>Scripting</string>
    </array>
    <key>scriptFilePath</key>
    <string>/Users/iain/bin/makepost.py</string>
</dict>
</plist>

2voto

Dave Puntos 36

Yo mismo tuve que averiguar cómo abrir y leer un plist con JXA, y no fue nada intuitivo. La documentación de JXA es francamente terrible. Busqué en los diccionarios en script Editor, pero también hice un uso liberal del properties() en el Editor de script, que le mostrará todas las propiedades de muchos objetos.

Finalmente lo descubrí por mí mismo, y creo que esto te servirá:

let app = Application.currentApplication()
app.includeStandardAdditions = true

let systemEvents = Application("System Events")
let cats = systemEvents.propertyListFiles.byName("/Users/iain/testing.plist").contents.value()['catsList'];

Resultados en el registro:

/* Blog,Devops,Drupal,Formal Methods,Parish Councils,Scripting */

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