ここ最近インストーラーを作る機会が多い。
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 コメント:
コメントを投稿