LoginSignup
15
19

More than 5 years have passed since last update.

plistをコマンドラインから作成・編集する[PlistBuddy]

Last updated at Posted at 2017-03-07

Env

  • OS X ElCapitan 10.11.6

使用するツール

defaultsとかplutilとかPlistBuddyなど、用意されているツールにもplistをいじれるものは複数あるが、それぞれの使用する用途は以下のような感じ(だと思っている)

  • defaults: 各設定ファイル(Library/Preferences/*.plist)を作成・編集する
  • plutil: plistの文法チェック・xml,jsonへのコンバート・閲覧(編集も一応出来るけど、arrayやdictの中の値の編集ができない?)
  • PlistBuddy: plistの作成・編集・閲覧

ちなみにどっかの記事でPlistBuddyはElCapitanから使用できない、と記載されてあったが、特に問題なく使用出来るみたい

PlistBuddy

作成

特に気にする必要はなし

存在しないファイルを編集しようとすると、
以下のような文言が出てきて自動でplistが作成される

File Doesn't Exist, Will Create: hoge.plist

編集

基本的には以下のような文法でコマンドを叩く

# ワンライン
/usr/libexec/PlistBuddy -c "コマンドアクション" ファイル名

# 対話型
/usr/libexec/PlistBuddy ファイル名
Command: コマンドアクション

よく使うコマンド一覧

コマンド 概要
add 名前 タイプ [値] 要素を追加する
set 名前 値 要素の値を変更する
print [名前] 要素をダンプする
delete 名前 要素を削除する
copy コピー元 コピー先 要素を複製する
save ファイルを保存する※
exit 編集を終了する※
help ヘルプ

※ 対話型でコマンドを叩く場合のみ

よく使う値のタイプ一覧

タイプ 概要
string 文字列
integer 数値
bool 真偽値
array 配列
dict 連想配列

Example

文字列要素を追加する

$ /usr/libexec/PlistBuddy hoge.plist
File Doesn't Exist, Will Create: hoge.plist
Command: add str string "fuga"
Command: print
Dict {
    str = fuga
}

配列を操作する

複数階層ある要素については:で要素名をつなぐ

Command: add arr array
Command: add arr:0 string "piyopiyo"
Command: print
Dict {
    str = fuga
    arr = Array {
        piyopiyo
    }
}
Command: add arr:1 string "piyopiyo2"
Command: print
Dict {
    str = fuga
    arr = Array {
        piyopiyo
        piyopiyo2
    }
}
Command: add arr:0 integer 3
Command: print
Dict {
    str = fuga
    arr = Array {
        3
        piyopiyo
        piyopiyo2
    }
}

連想配列を操作する

Command: add dic dict
Command: add dic:str string "foo"
Command: print
Dict {
    str = fuga
    arr = Array {
        3
        piyopiyo
        piyopiyo2
    }
    dic = Dict {
        str = foo
    }
}
Command: copy arr dic:dic2:arr
Command: print
Dict {
    str = fuga
    arr = Array {
        3
        piyopiyo
        piyopiyo2
    }
    dic = Dict {
        str = foo
        dic2 = Dict {
            arr = Array {
                3
                piyopiyo
                piyopiyo2
            }
        }
    }
}
Command: delete dic:dic2:arr:1
Command: print
Dict {
    str = fuga
    arr = Array {
        3
        piyopiyo
        piyopiyo2
    }
    dic = Dict {
        str = foo
        dic2 = Dict {
            arr = Array {
                3
                piyopiyo2
            }
        }
    }
}

保存

対話的なコマンドで編集したファイルは最後にSaveするのを忘れないこと!!!

Command: save

以上の操作で以下のようなplistが作成される

hoge.plist
<?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>arr</key>
        <array>
                <integer>3</integer>
                <string>piyopiyo</string>
                <string>piyopiyo2</string>
        </array>
        <key>dic</key>
        <dict>
                <key>dic2</key>
                <dict>
                        <key>arr</key>
                        <array>
                                <integer>3</integer>
                                <string>piyopiyo2</string>
                        </array>
                </dict>
                <key>str</key>
                <string>foo</string>
        </dict>
        <key>str</key>
        <string>fuga</string>
</dict>
</plist>
15
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
19