さわらブログ

さわら(@xhiroga)の技術ブログ

書評 - Property Lists, Preferences and Profiles for Apple Administrators

dotfiles 好きが高じて、plistファイルとdefaultsコマンドの歴史に興味を持つようになりました。

なかなか体系的に学ぶための情報を見つけられずにいたのですが、この本はまさにピッタリの一冊です(ちなみに洋書です)

books.apple.com

Appleでのソフトウェア開発経験を持ち、かつ現在は情シスとしてApple製端末の管理に情熱を燃やしている方が書かれた本です。

TL;DR

  • タイトルの通り、plist, preferences, profileの3部に分類できる
  • iOS/macOSアプリ開発者以外には馴染みのない plist ファイルについて、エコシステムと合わせた紹介
  • アプリケーションが設定を読み込む仕組みについて(defaults や cfprefsdの挙動)
  • WiFi設定などで目にするProfileの設定方法や作り方

Property Lists

そもそも .plist ファイルって何?という方に説明すると、macOSで動くアプリケーションがユーザーごとに個別の設定を持つためのファイルの一般的な形式です。

本の中でも解説されていますが、例えばアプリバンドル内の info.plist など、様々な用途で使われています。

しかしながら、同じ .plist 拡張子のファイルだとしてもファイルごとに形式が異なります。NeXTSTEP時代のASCIIテキスト形式や、OS X初期のXML形式、その後のバイナリ形式など。

plistを読み書きするユーティリティはたくさんありますが、本章では読み書き可能な形式などに注目してそれらを整理しています。

個人的な発見は以下の通り。

  • PlistBuddy で対話実行ができること
  • /usr/libexec には様々なライブラリが含まれるので、うかつにパスを通してはいけないこと
  • file コマンドでファイル形式が確認できること

Preferences

macOSの設定を管理するデーモン cfprefsd について初めて知りました。cfが気になって調べたところ、Core Foundation の略のようです。

前章までの内容と合わせ、 defaults, PlistBuddy, plutil の使い分けが整理できたのが良かったです。

  • 基本的に defaults を用いる。defaults だけが cfprefsd にも設定変更を通知するため、アプリ側の変更のファイル書き込みキューに後から設定ファイルを上書きされる心配がない。
  • 2階層以上ネストしている項目を編集したい場合、PlistBuddy を用いる。
  • plistファイルを丸ごと変換するようなケースでは plutil を用いる。

なお、この本では取り上げられていないものの、他に pl というコマンドもあるようです(NeSTSTEP時代の形式を表示するためのコマンド)

また、なぜdefaults コマンドだけはplistファイルのパスを指定しないでも設定を編集できるかについても解説がありました。

Profiles

この章は現時点では私の興味の範疇ではないものの、いずれはProfileを使って管理することもあるのかな、と思って眺めました。

会社などでDEP(Device Enrollment Program)を使うことになるような場合、Profileからシェルスクリプトを実行してplistを編集できることを知っているのは嬉しいかもしれません。

まとめ

断片的な知識しかなかったplistについて、Apple端末の管理者という観点と確かなバックグラウンドから書かれた良書でした。dotfilesやdefaultsコマンドのオプションの解析が好きな人は読んで損しないと思います。