PackageMaker のコマンド ライン インターフェイスを介して Mac OS X パッケージのビルドを自動化しようとしています。これまでのところ、パッケージをビルドして postinstall スクリプトを実行することができました。コマンドライン経由でビルド中に選択肢を追加する方法はありますか? postinstall スクリプトを実行するかどうかをユーザーに選択してもらいたいからです。PS: ".pmdoc" は使いたくありません。このオプションはひどいです。
3 に答える
packagemaker のコマンド ライン パラメータでしばらく苦労した後、最新の関連ツールが他にもあることがわかりました: pkgbuildとproductbuild。
パッケージメーカーを苦しめたいと思っていたことを行う方法を見つけたので、今のところそれらを使用していません。
これが不幸な Mac 開発者に役立つことを願っています。
コメントで述べたように、PackageMaker はプロジェクトに追加したファイルのリストを作成し、そのプロジェクトに書き込みます。したがって、1 つのファイルを追加する場合は、プロジェクトを開く必要があり、そのファイルを含む選択肢を削除し、最後に、新しいファイルを含めてすべてのファイルを再度追加します。または、プロジェクトの XML ファイルを直接編集します。PackageMaker を使用してプロジェクトのパッケージのビルドを自動化するのは耐えられません。ということで、ツールを変更しました。いくつかのグーグルは、パッケージをfingするのに役立ちました 。このツールも理想的ではありませんが、Apple のツールよりもはるかに優れています。Mojca は、PackageMaker で私がこれまで行ってきたことについて、おおまかに説明してくれました。パッケージを使用している間、プロジェクトファイルも使用する必要がありました。ただし、このソフトウェアは、明示的に指示しない限り、プロジェクトに追加するすべてのファイルに関する情報を収集するわけではありません。
どの深さのファイルをプロジェクトに含めるべきかを選択できることを画像で確認できます。.appフォルダーの下のすべてのフォルダーは手動で展開され、新しいファイルを含めることができるフォルダーも展開されていないことを確認しました。この場合、それはJavaフォルダーです。次の最後のステップは、 Antを使用してパッケージを組み立てることです。
<exec executable="/usr/local/bin/packagesbuild">
<arg value="-v"/>
<arg value="${basedir}/Installer/MyProject.pkgproj"/>
</exec>
これはあなたの質問に対する正確な答えではありませんが、PackageMaker のテストと格闘に多くの時間を費やした経験豊富な Mac 開発者が最近、次のヒントを教えてくれました。
コマンド ラインから PackageMaker を呼び出すこともできますが、Apple はそれにあまり力を入れていないようで、多くのことがうまくいきません。そのため、代わりに GUI インターフェイスを使用してください。
私は彼のレッスンを受けることにしました。かなり良い妥協点として私にとってうまくいったのは、初期ファイルを準備するために一度だけ GUI を使用.pmdoc
し、それらの xml ファイルに対するその後の変更を手動で行うことでした。次に、packagemaker を呼び出す Xcode プロジェクトにターゲットがあります。
packagemaker --doc $SRCROOT/Project.pmdoc --out $BUILT_PRODUCTS_DIR/stage/ProjectInstaller.pkg
hdiutil create $BUILT_PRODUCTS_DIR/Project-$VERSION.dmg -volname \"Project-$VERSION\" -fs HFS+ -srcfolder \"$BUILT_PRODUCTS_DIR/stage
今必要なことは (.pmdoc
ファイルのバージョンを上げることを除いて) を呼び出すことだけです。
xcodebuild -target Package
画像を取得し.dmg
ます。
.pmdoc
パッケージを最初から作成するときに、主に(他の誰かの)CLIでの悪い経験を共有するために使用しないようにという明示的な要求にもかかわらず、この回答を投稿することにしました。また、GUI を使用してパッケージを作成することは、何かを変更したりパッケージをビルドしたりするたびに「奇妙な GUI ツール」を使用する必要があるという意味ではないことを最初に認識できなかったためです。