web-dev-qa-db-fra.com

Editer un fichier de plist en utilisant un script shell

J'ai utilisé pkgbuild pour créer un fichier de liste de propriétés de composant par défaut. Le fichier ressemble à:

<?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>

Je souhaite modifier ce fichier à l'aide d'un script Shell. J'ai essayé d'utiliser par défaut write mais cela n'a rien fait.

Quel est le moyen de le faire? (Par exemple: je veux définir BundleIsRelocatable sur false)

16
user2653062

Également:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist
25
jm666

Utiliser PlistBuddy, un simple tutoriel ICI.

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

Il peut s’exécuter en tant que UNE ligne de commande pour mettre à jour la clé/valeur. Je l’utilise pour mettre à jour CFBundleVersion généralement, ce qui peut être trouvé dans cet article .

3
AechoLiu

Pour une utilisation de chaîne 

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

Un peu tard, mais pour l'enregistrement, il vous suffit de spécifier le chemin absolu ET d'ajouter l'extension .plist au nom du fichier. Si vous exécutez votre script dans le même répertoire que le fichier plist, votre cas sera traduit en:

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

Utilisez PlistBuddy !

Très simple et direct. Exemple:

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

C'est tout! Maintenant, BundleIsRelocatable est false: D

2
hola

Utilisation de sed:

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

Si le nom de la liste n'est pas XML, exécutez d'abord plutil -convert xml1 file.plist.

0
Lri

La dernière réponse de Phil-CB ici devrait être utile.

0
Sérgio