2013年3月12日火曜日

pkgbuildとproductbuildでMacのインストーラーを作ろう

ここ最近インストーラーを作る機会が多い。

Windowsでのインストーラー作りは、NSISやWiXを使う方法で書いた形で作れた。で、今回はMacでのお話。

Macのインストーラーは、Package MakerがXcodeに付属していて、これを使えばGUIベースで簡単にインストーラーが作れたらしい。Snow LeopardかLionあたりまでは。Mountain Lionな今、どうやらPackage Makerは標準ではなくなり、AppleのDeveloperサイトからAuxiallery Tool (Late July 2012)をインストールしなければ使えないらしい。

Auxiallery ToolをインストールしてPackage Makerで作ってもいいんだけど、どうせならMountain Lion時代の標準でと思い、色々調べてみた。その結果、pkgbuildとproductbuildというコマンドを使うのが良さそうだと行き着いた。ちなみに、両コマンドともSnow Leopardには既に入ってたコマンド。

pkgbuildとproductbuildを使うのに行き着いたのはいいけど、これらを使う情報が非常に少ない。特に日本語の解説は見当たらなかった。しかも、pkgbuildはArchLinuxにもあるらしく、そっちばかり検索に引っかかる…。そんな中、どう検索しても最終的に行き着く解説ページがStack Overflowにあった。

Making OS X Installer Packages like a Pro - Xcode4 Developer ID Mountain Lion ready pkg

↑では、単にインストーラーを作るだけじゃなくて、Developer IDを埋め込む方法も書いてある。

んで、今回のやりたいことはこんな感じ。

  • 1つに集めたディレクトリ内のファイルを/Applicationsにコピー
  • インストール過程で使用許諾を表示して同意させたい
  • 使用許諾は、日本語と英語で表示する文言を変えたい

1つ目の要求だけだったら、pkgbuildだけで実現できるんだけど、2つ目も実現しようとするとproductbuildが必要になってくる。なので、ここから個別に解説。

pkgbuildでインストールパッケージを作る

下のコマンドを発行すれば、とりあえずファイルを指定ディレクトリへコピーするインストーラーが作れる。

pkgbuild --root コピー元ディレクトリ \        --identifier jp.hoge.pkgみたいなやつ \        --install-location コピー先ディレクトリ(/Applicationsとか) \        --version バージョン番号 \        パッケージ名

productbuildでビルドするためのXMLファイルを作る

続いて、pkgbuildで作ったパッケージをproductbuildで仕上げるために、XMLファイルを作る。手でXMLファイルを作っても良いんだけど、このコマンドで発行した方がラク。

ちなみに、このコマンド発行は最初の1回だけで良い。

productbuild --synthesize \            --package pkgbuildで指定したパッケージ名 \            ./Distribution.xml(XMLの名前は何でも良い)

これによって、以下のようなXMLが得られる。

                                                                    pkgbuildで指定したパッケージ名

Distribution.xmlのカスタマイズ

これに2点手を加える。

まずは、タイトルを入れること。入れておかないと、インストーラーのタイトルがない状態になる。タイトルは、こんな感じで<installer-gui-script>の下にでも入れる。

The VDM++ Toolbox

続いて、使用許諾の表示。これは<options>の下あたりに以下を入れる。使用許諾のファイル名は何でもOK。

使用許諾を日英別々のファイルにするには、ディレクトリ構成を以下のようにして入れる必要がある。English.lprojとJapanese.lprojにそれぞれの言語の使用許諾ファイルを入れれば準備OK。

Resources├── English.lproj│   └── License.rtf└── Japanese.lproj    └── License.rtf

productbuildでインストーラーを仕上げる

ここまで準備できたら、後はインストーラーを仕上げるためにproductbuildをかける。

productbuild --distribution productbuildで指定したXML \            --package-path . \            --resources 各種リソースがあるディレクトリ \            最終的に作りたいインストーラーパッケージ名

まとめ

長くなったけど、これでMacのインストーラーができる。productbuildのsynthesizeは一度だけで良いので、インストーラーを作るシェルスクリプトを作っておくと便利。例えばこんな感じ。バージョンは引数で与える想定。

0 コメント:

コメントを投稿