Porting PackageMaker command line build installer to pkgbuild

Viewed 7267

I've been attempting to port a Mac PackageMaker command line build to pkgbuild and productbuild but I'm stuck. Unfortunately I haven't found much of anything documenting how these new programs work except for this StackOverflow post and the pkgbuild and productbuild man pages.

Here's my problem. I've created a root install directory that has the following files in it:

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

The command line call below worked great for PackageMaker. It created an installer that installed all of the files above.

$ /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

Now I'm trying to write this with pkgbuild and having a major problem. I use the following call:

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

This command builds an installer that copies the MyProgram.framework directory into /Library/Frameworks. However it does not install the MyProgram.app file into the /Applications directory. When I look at the installer logs I see this message:

Applications/MyProgram.app relocated to /some_path/Applications/MyProgram.app

Can anyone shed some light on why this isn't adding the MyProgram.app file into the /Applications directory like PackageMaker was doing?

4 Answers

Create component plist file, which has value for relocatable property.

pkgbuild --analyze --root "$dst_src_root" "$installer_root/Components.plist"

Edit component plist and Set "BundleIsRelocatable" to false. This is done one time in my project, as installer contents does not change (One application and one plugin). I am reusing same component plist everytime to create contents package.

sudo pkgbuild --root "$dst_src_root" --component-plist "$installer_root/Components.plist" --identifier "com.company.app" --version "1.0" --scripts "$dst_scpt_root" "$dst_pkg_root/InstallPackage/cisContents.pkg" 

Then using productbuild, we can create final package

Related