14

Mac PackageMakerのコマンド ライン ビルドを pkgbuild と productbuild に移植しようとしましたが、行き詰まりました。残念ながら、このStackOverflow の投稿と、pkgbuildおよびproductbuildのマニュアル ページを除いて、これらの新しいプログラムがどのように機能するかを文書化したものはほとんど見つかりませんでした。

これが私の問題です。次のファイルを含むルート インストール ディレクトリを作成しました。

/some_path/Applications
                       /MyProgram.app
          /Library
                  /Frameworks
                             /MyFramework.framework
                                                   /[library files...]

以下のコマンド ライン呼び出しは、PackageMaker でうまく機能しました。上記のすべてのファイルをインストールするインストーラーが作成されました。

$ /Developer/usr/bin/packagemaker \
    --title "My Program" \
    --root /some_path \
    --version 1.0.0 \
    --filter "\.DS_Store" \
    --resources ./resources/ \
    --scripts ./scripts/ \
    --root-volume-only \
    --domain system \
    --verbose \
    --no-relocate \
    --target 10.5 \
    --id com.my_company.pkg \
    --out MyProgram.pkg

今、私はこれを pkgbuild で書き込もうとしていますが、大きな問題があります。次の呼び出しを使用します。

$ pkgbuild \
    --root /some_path \
    --version 1.0.0 \
    --install-location "/" \
    --scripts "./scripts/" \
    --identifier "com.my_company.pkg" \
    MyProgram.pkg

このコマンドは、MyProgram.framework ディレクトリを /Library/Frameworks にコピーするインストーラをビルドします。ただし、MyProgram.app ファイルは /Applications ディレクトリにインストールされません。インストーラ ログを見ると、次のメッセージが表示されます。

Applications/MyProgram.app は /some_path/Applications/MyProgram.app に移動しました

PackageMaker が行っていたように、これが MyProgram.app ファイルを /Applications ディレクトリに追加しない理由を誰かが明らかにすることはできますか?

4

4 に答える 4

4

残念ながら、この質問に対する答えは、まさに私が探していたものではありませんでした。プロセスから PackageMaker を排除する方法がわかりませんでした。ただし、pkgutil と PackageMaker を組み合わせて、カスタムのウェルカム メッセージ、ライセンス、および背景画像をすべてコマンド ラインで使用するインストーラーを作成するソリューションがあります。PackageMaker GUI は必要ありません。手順は次のとおりです。

  1. 特別なディレクトリ構造でpackagemaker コマンド ライン実行可能ファイルを実行します。このディレクトリ構造は、Mac ファイル システムを反映しています。古いが信頼できる「PackageMaker ハウツー」チュートリアルで詳細をお読みください。
  2. pkgutil ( pkgutil --expand) を実行して、パッケージの内容を抽出します。
  3. 内容を見て、変更したいものを特定します。一部のオプションは、ウェルカム メッセージ、ライセンス、および背景画像です。
  4. コマンドラインからこれらのファイルを変更するコマンドを追加します。詳細については、「Automating Apple's PackageMaker」チュートリアルを参照してください。最も簡単な方法は、このようなものを実行することですecho '<background file="your_background.png">'
  5. pkgutil ( pkgutil --flatten) を実行して、パッケージを再構築します。
于 2012-10-03T14:00:42.803 に答える
2

まず第一に、あなたはインストーラーが必要だと確信していますか?フレームワークをアプリケーション内に配置できます。控えめに言っても、インストーラーとpkgbuildは少し不安定です。

ここで問題になります。再配置は、ユーザーがアプリケーションを/Applicationsから/WorkApplications/PrivateApplicationsに移動できるという事実と関係があります。あなたの場合、インストーラーはおそらくビルドフォルダーでアプリケーションを見つけて、このフォルダーにインストールします。

インストーラーは再配置にApplicationBundleIdentifierとSpotlightを使用していると思うので、テストのためにビルドフォルダーをSpotlight無視リストに追加できます。

コンポーネントプロパティリスト で定義できますBundleIsRelocatable。フレームワークをグローバルにインストールする必要がある場合、これはBundleIsRelocatableをfalseに設定する1つのバンドルです。

于 2012-08-03T14:56:36.053 に答える
2

あなたが参照している質問には、Package Maker を完全に排除するために必要なものがほとんどすべて含まれています。私が追加したことの 1 つはsed、呼び出しの後にproductbuild --synthesize ...配布ファイルに行を挿入するために使用することです。たとえば、コンポーネント パッケージをビルドした後に使用するターミナル コマンドを次に示します。

productbuild --synthesize --package "components/SubPackage.pkg" "distribution.xml"
sed -i "" \
-e '$ i\
\    <title>Installer Title</title>' \
-e '$ i\
\    <background file="background.png" alignment="left" scaling="proportional" />' \
-e '$ i\
\    <welcome file="welcome.rtf" />' \
"distribution.xml"
productbuild --distribution "distribution.xml" --resources "resources/" --package-path "components/" "Installer.pkg"

pkgutil --expandこれにより、インストーラーを使用しpkgutil --flattenたり変更したりする必要がなくなります。

于 2013-04-26T16:41:15.697 に答える