[Mac]コマンドラインでPlistを書き変える方法

Macのplist形式のファイルを書き換えたい時にファイルを直接開いて編集しても良いのですが、コマンドラインから編集できるとスクリプトを組めるので便利です。
そういったニーズがあったので調べて見ました。
方法(コマンド)は2つあります。

  1. plutilを使う (Mac/iOSアプリのInfo.plistを編集するのはこれで十分)
  2. PlistBuddyを使う (少し複雑なplistを編集する時にはこちらの力が必要)

plutil

1階層しか内容なplist(Info.plistなど)ならこのコマンドで十分です。

$ plutil -replace <キー名> <-型> <値> <plistファイルパス>

使い方 例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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">
<dict>
 <key>CFBundleDevelopmentRegion</key>
 <string>en</string>
 <key>CFBundleExecutable</key>
 <string>$(EXECUTABLE_NAME)</string>
 <key>CFBundleIdentifier</key>
 <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 <key>CFBundleInfoDictionaryVersion</key>
 <string>6.0</string>
 <key>CFBundleName</key>
 <string>$(PRODUCT_NAME)</string>
 <key>CFBundlePackageType</key>
 <string>BNDL</string>
 <key>CFBundleShortVersionString</key>
 <string>1.0</string>
 <key>CFBundleSignature</key>
 <string>????</string>
 <key>CFBundleVersion</key>
 <string>1</string>
</dict>
</plist>

CFBundleVersionを変更するには以下の様にします。

$ plutil -replace CFBundleVersion -string 1.1 ./Info.plist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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">
<dict>
 <key>CFBundleDevelopmentRegion</key>
 <string>en</string>
 <key>CFBundleExecutable</key>
 <string>$(EXECUTABLE_NAME)</string>
 <key>CFBundleIdentifier</key>
 <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 <key>CFBundleInfoDictionaryVersion</key>
 <string>6.0</string>
 <key>CFBundleName</key>
 <string>$(PRODUCT_NAME)</string>
 <key>CFBundlePackageType</key>
 <string>BNDL</string>
 <key>CFBundleShortVersionString</key>
 <string>1.0</string>
 <key>CFBundleSignature</key>
 <string>????</string>
 <key>CFBundleVersion</key>
 <string>1.1</string>
</dict>
</plist>

この方法には欠点があって、1階層目しか追加、変更ができないことです。
2階層目以降にあるキーを編集したい時には、後述するPlistBuddyコマンドを使う必要があります。

参考URL

コマンドラインでplistを操作(データ追加・編集・削除)

PlistBuddy

高性能なplist編集コマンドです。その分使い方が少し複雑で、2階層以降のキーをどうやって編集するのか調べるのに少し苦労しました。
以下の様に使います。

$ /usr/libexec/PlistBuddy -C "Set Preference:0:DefaultValue 1.2"

使い方 例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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">
    <dict>
        <key>hogehoge</key>
        <string>en</string>
        <key>foobar</key>
        <array>
            <dict>
                <key>Jane</key>
                <string>Kitty</string>
            </dict>
        </array>
    </dict>
</plist>

上記の様なPlistのJaneキーの値を書き換えたい時には、以下の様にします。

$ /usr/libexec/PlistBuddy -c "Set foobar:0:Jane Lisa" test.plit

ポイントは、arrayの編集でインデックス番号を0オリジンで指定します。
最後のキーまで指定したら、設定する値を書けばOKです。
結果こうなります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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">
<dict>
 <key>foobar</key>
 <array>
  <dict>
   <key>Jane</key>
   <string>Lisa</string>
  </dict>
 </array>
 <key>hogehoge</key>
 <string>en</string>
</dict>
</plist>

PlistBuddyはplistの編集に知っておくと便利なコマンドです。

0 件のコメント :

コメントを投稿