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に値を挿入する