5

4つのサブパッケージを含むMacOSX用のインストールパッケージをビルドしたいと思います。サブパッケージはpkgbuildでビルドされます。最終的なパッケージは、ウェルカムテキストとライセンステキストおよびインストール場所の選択のためにDistribution.xmlを使用してproductbuildでビルドされます。

インストールが成功した後、スクリプトを実行したいと思います。特に、すべてのパッケージの領収書がインストーラーによって書き込まれた後。

マニュアルページやドキュメント、その他の役立つリンクを理解している限り、そのために飛行後のスクリプトを使用する必要があります。残念ながら、動作させることができません。postflightという名前を付け、-scriptオプションを使用してpkgbuildでサブパッケージに追加しましたが、pkgbuildはpostflightスクリプトをサポートしていないようです。インストール後に名前を付けると実行されますが、残念ながら領収書が書き込まれる前に実行されます。

pkgutilツールを使用して、他のパッケージのインストール場所の場所で構成されるXCode用のxcconfigファイルを作成したいので、レシートが書き込まれた後に実行する必要があります。

Scripts /フォルダーを展開されたパッケージに追加してexpand-flattenハックを使用しようとしましたが、フラット化した後は無視されるようです。

私のニーズを達成する方法はありますか?(パッケージの選択したインストール場所をサブパッケージのインストール場所のファイルに書き込む)

可能であれば、少なくとも別のより良い方法がある場合は、廃止されたパッケージメーカーツールの使用を避けたいと思います。

前もって感謝します

4

1 に答える 1

2

最終的に調べなければならなかったので、領収書が書き込まれる前に飛行後のスクリプトも実行されます。したがって、この問題に対する私の解決策は次のようになります。

Mac OSインストーラーによって設定されたDSTROOT環境変数を読み取り、共有tempフォルダー内のファイルに書き込むインストール後のスクリプトをパッケージに追加します。

echo "${DSTROOT}" > "${SHARED_INSTALLER_TEMP}/my_install_location"

次に、これらの情報が必要な私のパッケージで、インストール後のスクリプト(サブパッケージがすでにインストールされていて、ユーザーがサブパッケージの一部を除外して「再インストール」した場合)を介して古いレシートを読み取り、次に他の一時ファイルを読み取りますパッケージ。

したがって、パッケージがすでにインストールされていて再インストールされていない場合は、現在のインストール場所が使用されます。それ以外の場合は、一時ファイルを介して新しいインストール場所が使用されます。何も存在しない場合、必要なパッケージがインストールされていないため、デフォルト値を使用してxcconfigファイルに書き込みます(おそらく機能しません)。

pkgutil --pkg-info-plist my.package.bundle > "${SHARED_INSTALLER_TEMP}/tmp.plist"
if [ -e "${SHARED_INSTALLER_TEMP}/tmp.plist" ];
then
    MY_PACKAGE_VOL=`/usr/libexec/PlistBuddy -c "Print :volume" "${SHARED_INSTALLER_TEMP}/tmp.plist"`
    MY_PACKAGE_DIR=`/usr/libexec/PlistBuddy -c "Print :install-location" "${SHARED_INSTALLER_TEMP}/tmp.plist"`      
    MY_PACKAGE_DIR="${MY_PACKAGE_VOL}${MY_PACKAGE_DIR}"
fi

「古い」インストール場所を読み取った後、他のパッケージから以前に書き込まれた一時ファイルを使用して、新しいインストール場所があるかどうかを確認します。

if [ -e "${SHARED_INSTALLER_TEMP}/my_install_location" ];
then
    MY_PACKAGE_DIR=`cat "${SHARED_INSTALLER_TEMP}/my_install_location"`
fi 

...
Write the xcconfig file...
...

誰かがより良い解決策を持っているなら、私に知らせてください。

于 2013-04-02T13:19:39.003 に答える