Macインストーラーの作成方法
Mac OSXで作ったアプリケーションを配布するためのインストーラーの作り方をまとめてみました。
本当はPackageMakerで作りたかったのですが、XCode4.6からはdeprecatedになってしまい、使用は推奨されていません。実際動作させてみても、挙動がおかしくなることが度々ありましたので、新しい作成方法であるpkgbuildとproductbuildコマンドを使って、インストーラーを作成しています。
全体の流れは次のようになります。3ステップで完了します。
◆Macでのインストーラー作成の流れ
1.インストールするアプリケーション(ファイルやプログラムを含む)をパッケージ化する。
2.xmlファイルを生成し、インストーラーの内容を記述する。
3.最終的な配布用インストーラー(パッケージ)を作成する。
1.インストールするアプリケーション(ファイルやプログラムを含む)をパッケージ化する。
2.xmlファイルを生成し、インストーラーの内容を記述する。
3.最終的な配布用インストーラー(パッケージ)を作成する。
インストールするアプリケーションのパッケージ化
pkgbuildコマンドを使うとプログラムをパッケージ化できます。複数の.app形式のファイルをまとめることもできますし、1つのフォルダに入っている複数のファイルやプログラムを丸々パッケージ化することも可能です。
コマンドの実行形式は以下のような形になります。
pkgbuild --root プログラム保存場所 --identifier 固有識別子 --install-location インストール先 --version バージョン --scripts インストール時に実行するスクリプトの配置フォルダ --ownership 所有権パラメーター パッケージ名
オプションの詳細は以下のようになります。
--root: インストールするプログラム一式の保管パス
--identifier: jp.co.companyなど、一意になるように。
--install-location: インストール先のパス。
--version:プログラムのバージョン。
--scripts: scriptディレクトリを作ってその中にpreinstallまたはpostinstallというシェルスクリプトファイルを作ると、インストーラー実行時に起動される。スクリプトの作成方法や取得できるパラメータについてはpkgbuildコマンドによるスクリプト実行方法とパラメーターのページを参照。
--ownership: 指定しない場合は、所有権がroot:wheelに設定されてしまう。変えたくない場合は、preserveを指定する。
--scriptsオプションや--owenershipオプションなどは省略しても問題ないです。
ほかにもいくつかオプションがあります。Appleの以下のページにまとまっていますので、ご参照ください。
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pkgbuild.1.html
以上を具体的に書くと、以下のようになります。
pkgbuild --root /Applications/development/test/App --identifier jp.co.company --install-location /Applications/App --version 1.0.0 --scripts /Applications/development/script --ownership preserve App.pkg
実行すると、App.pkgというファイルが作成されます。
これだけでもインストーラーとして実行することが可能です。ただ、インストーラーに使用許諾同意書を表示させたり、インストーラーのタイトルを変更したりなど、画面を細かくカスタマイズするためには、次のようにxmlファイルを作成してあげる必要があります。
XMLファイルの生成と編集
初めてインストーラーを作成する場合は、次のコマンドを実行してXMLファイルを作成する必要があります。
productbuild --synthesize --package 上記1で生成したパッケージ名 XMLファイル名
具体的には次のようになります。
productbuild --synthesize --package App.pkg ./distribution.xml
上記コマンドを実行するとdistribution.xmlが生成されます。
できたxmlファイルを編集すると、インストーラーのタイトルを変更したり、使用許諾書を表示させたりすることができるようになります。
<使用許諾書の表示>
<options customize="never" require-scripts="false"/>下あたりに以下のように記述。
<license file="/Applications/development/licenseAgreement.txt"></license>
<インストーラーのタイトル変更例>
<installer-gui-script minSpecVersion="1">の下あたりに以下のように記述。
<title>App Installer</title>
どのような記述子が使えるかは以下のぺーじにまとまっていますので、ご参照ください。
インストーラーとしてまとめる
ここまでできるとあと一息です。productbuildコマンドでインストーラーを作成します。
productbuild --distribution 2.で生成したXMLファイル名 --package-path . 1.で作成したパッケージ名
具体的には以下のようになります。
productbuild --distribution distribution.xml --package-path . Setup.pkg
これでインストーラーの完成です。ここでは実行していませんが、--signオプションを使うと、Developer IDを使ってサインすることができます。
productbuildコマンドのオプションについては以下のページにまとまっています。
ご参照ください。
インストーラーの中身を確認するには?
以前は、.pkgはディレクトリ構成になっていて、cdコマンドで中に入って個々のファイルを見ることができました。しかし、その仕様は変更になってしまい、現在.pkgは単一のファイルとして扱われます。
できたpkgの中身を確認するには以下のようなコマンドを発行すると良いです。
pkgutil --expand pkg名 適当なディレクトリ名
指定したディレクトリ中に解凍されたファイル群が生成されます。これを確認すれば大丈夫ですね。