因此,我正在为我们公司打包一个打印机工具,该工具由两个.pkg文件(驱动程序)和一个.app文件组成。
现在我正在使用以下命令来构建包:
pkgbuild --root ./content --script ./scripts --identifier com.MyGreatCompany --version 0.1 --install-location /tmp/ ./PrinterTool.pkg
因此,在安装程序包时,所有内容都会放在/tmp/目录中。安装后脚本完成安装,如下所示:
installer -verbose -pkg /private/tmp/PackageOne.pkg -target /
installer -verbose -pkg /private/tmp/PackageTwo.pkg -target /
/bin/rm -rf /Applications/Utilities/PrinterTool.app
/bin/mv -f /private/tmp/PrinterTool.app /Applications/Utilities/PrinterTool.app
这类工作。第一次安装尝试进行得很顺利,但当我尝试重新安装相同的软件包时,就会出现问题。.app文件不会复制到/tmp文件夹,因此不会移动到Utilities文件夹。
所以我想知道两件事:
- 有没有解释为什么.app文件只复制一次
- 这是打包多种文件类型的最佳方式吗?我觉得没有必要把它放在/tmp文件夹中。默认情况下,包文件被放在某种安装程序/tmp文件夹中,对吧?这难道不是运行postinstall脚本的工作目录吗
是的。。。你不想这样做:D
首先,您不需要创建子包,只是不需要。在同一个pkg文件中可以有多个捆绑包。使用--components
标志来定义它们(或创建组件属性列表)。在rootdir中构建整个文件系统。所以在你的情况下,你会有:
.../content/Applications/Utilities/PrinterTool.app
.../content/Library/...wherever.../driver-whatever.
那么你的--install-location
就是/
。
如果您真的需要多个包(或者只是更方便),那么您需要使用productbuild
来组合它们。您可以传递多个--package
选项来创建多包安装程序。