macos shell scripting plist pkgbuild

macos - Edición de archivo plist usando shell script



scripting pkgbuild (7)

He utilizado pkgbuild para crear un archivo de lista de propiedades de componentes predeterminado. El archivo se ve como:

<?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"> <array> <dict> <key>BundleHasStrictIdentifier</key> <true/> <key>BundleIsRelocatable</key> <true/> <key>BundleIsVersionChecked</key> <true/> <key>BundleOverwriteAction</key> <string>upgrade</string> <key>RootRelativeBundlePath</key> <string>MyApp.app</string> </dict> </array> </plist>

Quiero modificar este archivo usando shell script. Intenté usar la escritura por defecto pero no hizo nada.

¿Cuál es la forma de hacerlo? (Por ejemplo: quiero establecer BundleIsRelocatable en false)


La última respuesta de Phil-CB here debería ser útil.


Para uso de cuerdas

plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist


También:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist


Un poco tarde, pero para el registro, solo necesita especificar la ruta absoluta Y agregar la extensión .plist al nombre de archivo. Si está ejecutando su script en el mismo directorio que el archivo plist, su caso se traduciría a:

defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false


Usando PlistBuddy, un sencillo tutorial AQUÍ.

/usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist

Puede ejecutarse como UNA línea de comando para actualizar la clave / valor. Lo uso para actualizar CFBundleVersion general, que se puede encontrar en esta publicación .


Utilice PlistBuddy !

Muy simple y directo. Ejemplo:

/usr/libexec/PlistBuddy ComponentPropertyList.plist Command: Set :0:BundleIsRelocatable false Command: save Saving... Command: exit

¡Eso es! Ahora BundleIsRelocatable es falso: D


Utilizando sed :

sed -i '''' ''/<key>BundleIsRelocatable</{n;s/true/false/;}'' file.plist

Si el plist no es XML, ejecute plutil -convert xml1 file.plist .