2012-08-03 30 views
12

Mac PackageMakerのコマンドラインビルドをpkgbuildとproductbuildに移植しようとしていましたが、止まっています。残念ながら、私はこれらの新しいプログラムがどのように動作しているかを文書化していません。StackOverflow postpkgbuildproductbuildのマニュアルページを除きます。PackageMakerのコマンドラインビルドインストーラをpkgbuildに移植する

ここに私の問題があります。

/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で書いてみると、大きな問題があります。このコマンドは、そのコピー/ライブラリ/フレームワークにMyProgram.frameworkディレクトリをインストーラを作成します

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

:私は、次の呼び出しを使用します。ただし、MyProgram.appファイルは/ Applicationsディレクトリにインストールされません。私はこのメッセージが表示さインストーラのログを見てみると:

は、アプリケーション/ MyProgram.appは、誰もが、なぜこのISN」上にいくつかの光を当てることができます/some_path/Applications/MyProgram.app

を移転しましたPackageMakerのように/ ApplicationsディレクトリにMyProgram.appファイルを追加していませんか?

答えて

4

残念ながら、この質問に対する回答は、私が探していたものではありませんでした。プロセスからPackageMakerを削除する方法を理解できませんでした。しかし、カスタムウェルカムメッセージ、ライセンス、およびバックグラウンドイメージを完全にコマンドライン上にインストールするためにPackageMakerとともにpkgutilを含むソリューションがあります。 PackageMakerのGUIはではなく、が必要です。手順は次のとおりです。

  1. 特殊なディレクトリ構造上でpackagemaker command line実行ファイルを実行します。このディレクトリ構造は、Macファイルシステムを反映しています。古いが信頼できる"PackageMaker How-to" tutorialでもっと読む。
  2. パッケージ内容を解凍するには、pkgutil(pkgutil --expand)を実行してください。
  3. 変更内容を確認してください。いくつかのオプションは、ウェルカムメッセージ、ライセンス、および背景イメージです。
  4. これらのファイルを変更するコマンドをコマンドラインで追加します。詳細については、"Automating Apple's PackageMaker" tutorialを参照してください。最も簡単な方法は、echo '<background file="your_background.png">'のようなものを実行することです。
  5. pkgutil(pkgutil --flatten)を実行してパッケージを再構築します。
1

まず、インストーラが必要ですか?フレームワークをアプリケーションの中に置くことができます。インストーラとpkgbuildはちょっと言い表されないが、少し薄れている。

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

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

Component Property ListBundleIsRelocatableで定義できます。実際にフレームワークをグローバルにインストールする必要がある場合、これはBundleIsRelocatableをfalseに設定するバンドルです。

1

The question you referenceは、パッケージメーカーを完全に排除するために必要なものがほとんどあります。私が追加したことの1つは、productbuild --synthesize ...呼び出しの後にsedを使用して、配布ファイルに行を挿入することです。例えば、ここで私はすでにコンポーネントパッケージを構築した後、使用する一部のターミナルコマンドは次のとおりです。

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 --expandpkgutil --flattenインストーラを変更するために使用する必要がなくなります。