plutil -replaceは、plist(property list)ファイルの既存の値を新しい値で上書きする。
既存の値を上書きする
-replace <keypath> -<type> <value>の形式で指定する。
$ plutil -replace Count -integer 99 sample.plist
$ plutil -p sample.plist
{
"Count" => 99
...
}
-insertと違い、既に値が存在するキーパスを指定してもエラーにならず上書きされる。
型を変えて上書きすることもできる
上書き前の値の型と異なる型を指定しても、そのまま置き換わる。
$ plutil -replace Name -array sample.plist
$ plutil -p sample.plist
{
"Name" => [
]
...
}
文字列だったNameが空の配列に置き換わった。型チェックは行われないため、意図しない型を指定しないよう注意する。
存在しないキーを指定すると新規追加される
man plutilには「既存の値を上書きする」と説明されているが、実機で確認したところ、存在しないキーパスを-replaceで指定してもエラーにならず、-insertと同様に新しい値として追加される。
$ plutil -replace NoSuchKey -string "x" sample.plist
$ echo $?
0
$ plutil -p sample.plist
{
"NoSuchKey" => "x"
...
}
キーが存在するかどうかに関わらず値を設定したい場合は-replace、新規追加であることを保証してエラーで気付きたい場合は-insert、と使い分けられる。
参考
【plutil】-insertでplistに値を挿入する\第一線のプログラマーの行動原理を学べる!/
