BathyScaphe のディスクイメージを作る過程でのネタ

ファイルを不可視にする

ディスクイメージの背景画像は、不可視ファイルにしておかないとみっともない。/Developer/Tools/SetFile を使って、

./SetFile -a V "/Volumes/BathyScaphe 1.2/background.png"

などとやると background.png ファイルを不可視にできることになっている。しかし、そのファイルを含むフォルダ/ボリューム(この場合は「BathyScaphe 1.2」)のウインドウが開いた状態で SetFile コマンドを実行しても、うまく反映されなかった。親フォルダのウインドウを閉じた状態で SetFile コマンドを実行し、それからフォルダを開いてみるとちゃんと消えていた。

ディスクイメージのマウント時に自動的に開くウインドウ

http://developer.apple.com/jp/qa/qa2005/qa1449.html に記載されているコードを Xcode の新規プロジェクトに流し込んでビルドして(そのまま、SetOpenWindow という名前にした)、出来上がった実行ファイルを使い

./SetOpenWindow "/Volumes/BathyScaphe 1.2"

と叩いてやると、ディスクイメージマウント時にウインドウを自動的に、確実に開かせることができる。…はずだったのに、なぜか「Undefined symbol: なんたらかんたら」などと表示して実行できなくて焦る。さんざん弄り回した末、なんとまぁ、CoreServices.framework をリンクしなければならないのに間違えて CoreFoundation.framework をリンクしてビルドしてるじゃないの。俺のアホアホアホ!!!皆さんはこんなミスをしないように気をつけてください。二つのフレームワークはまったく別物です。ビルドし直したらちゃんと動作した。

なぜ今ごろこんな話を?

実は、上記の方法を使ったのは今回が初めてだったんだ。今までは

  • ファイルを不可視にするのは、Coela
  • マウント時にウインドウを自動で開かせるのは、.DS_store を強制的に更新させて(ウインドウを開いたまま Finder を再起動して、その後すぐにディスクイメージをアンマウントする)

それぞれ行っていたためだ。この方法でもとくに問題なく作成できていたのだけど、せっかくだから別の方法も一度やってみようと思った訳で。まぁ、作業の自動化とかをにらむと、今回の方法をベースにする方が有利かもしれない。