Edited at

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

More than 1 year has passed since last update.


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>