2014-10-05 30 views
13

Użyłem pkgbuild do utworzenia domyślnego pliku listy składników. Plik wygląda następująco:Edytowanie pliku plist przy użyciu skryptu powłoki

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

Chcę zmodyfikować ten plik przy użyciu skryptu powłoki. Próbowałem użyć wartości domyślnych napisz, ale nic to nie dało.

Jaki jest sposób, żeby to zrobić? (Na przykład: Chcę ustawić BundleIsRelocatable false)

Odpowiedz

21

również:

plutil -replace BundleIsRelocatable -bool false plistfilename.plist 
2

użytkowania PlistBuddy!

Bardzo prosto i prosto do przodu. Przykład:

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

To wszystko! Teraz BundleIsRelocatable jest fałszywe: D

-1

Korzystanie sed:

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

Jeśli plist nie jest XML, uruchom plutil -convert xml1 file.plist pierwszy.

0

Ostatnia odpowiedź Phil-CB here powinna być przydatna.

2

Korzystanie PlistBuddy, a simple tutorial HERE.

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

To może działać jako jeden wiersz polecenia, aby zaktualizować klucz/wartość. Używam go do aktualizacji CFBundleVersion ogólnie, które można znaleźć in this post.

0

STRING używać

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

Trochę późno, ale dla porządku, wystarczy podać ścieżkę bezwzględną i dodaj rozszerzenie .plist do nazwy pliku. Jeśli uruchamiasz skrypt w tym samym katalogu, co plik plist, Twój przypadek zostanie przetłumaczony na:

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