web-dev-qa-db-ja.com

シェルスクリプトを使用したplistファイルの編集

私はpkgbuildを使用してデフォルトのコンポーネントプロパティリストファイルを作成しました。ファイルは次のようになります。

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

シェルスクリプトを使用してこのファイルを変更したいと思います。 defaults writeを使用してみましたが、何も実行されませんでした。

それを行う方法は何ですか?(例:BundleIsRelocatableをfalseに設定したい)

21
user2653062

また:

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

PlistBuddy、ここでは簡単なチュートリアルを使用します。

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

キー/値を更新する1つのコマンドラインとして実行できます。私は一般的にCFBundleVersionを更新するために使用します。これは この投稿内 で見つかります。

4
AechoLiu

文字列用

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

少し遅れますが、レコードの場合は、絶対パスを指定して、ファイル名に。plist拡張子を追加するだけです。 plistファイルと同じディレクトリでスクリプトを実行している場合、ケースは次のように変換されます。

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

PlistBuddy を使用してください!

非常にシンプルでわかりやすい。例:

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

それでおしまい!今BundleIsRelocatableはfalseです:D

2
hola

sedの使用:

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

PlistがXMLでない場合は、最初にplutil -convert xml1 file.plistを実行します。

1
Lri

Phil-CBの最後の応答 here が役立つはずです。

0
Sérgio