2014-10-05 17 views
13

Ho usato pkgbuild per creare un file di elenco di proprietà componenti predefinito. Il file ha il seguente aspetto:Modifica del file plist tramite script di shell

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

Desidero modificare questo file utilizzando lo script di shell. Ho provato a utilizzare le impostazioni predefinite scrivendo ma non ha fatto nulla.

qual è il modo per farlo? (Per esempio: Voglio impostare BundleIsRelocatable su false)

risposta

21

anche:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist 
2

Usa PlistBuddy!

Molto semplice e diretto. Esempio:

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

questo è tutto! Ora BundleIsRelocatable è falso: D

-1

Utilizzando sed:

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

Se il plist non è XML, eseguire plutil -convert xml1 file.plist prima.

0

L'ultima risposta di Phil-CB here dovrebbe essere utile.

2

Uso PlistBuddy, a simple tutorial HERE.

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

può funzionare una sola riga di comando per aggiornare la chiave/valore. Io lo uso per aggiornare CFBundleVersion in generale, che può essere trovato in this post.

0

Per String utilizzare

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

un po 'tardi, ma per la cronaca, è sufficiente specificare il percorso assoluto e aggiungere l'estensione .plist al nome del file. Se stai eseguendo il tuo script nella stessa directory del file plist, il tuo caso verrebbe tradotto in:

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