在Mac上安装软件包时运行postflight脚本

时间:2013-11-14 13:12:16

标签: macos installer packagemaker productbuild pkgbuild

我正在尝试从脚本构建一个mac包安装程序,我想运行postinstall和postflight脚本。我构建包的脚本如下所示:

pkgbuild --root MyRoot/MyApp.app --identifier com.myapp.MyApp --scripts Scripts --install-location /Applications/MyApp.app MyApp.pkg
productbuild --synthesize --package MyApp.pkg Distribution.xml
productbuild --distribution Distribution.xml --resources Resources --package-path . CompleteInstaller.pkg

我已将postinstall脚本放在Scripts中,并且正在成功执行。我遇到运行postflight脚本的问题。它放在Resources目录中,不会被执行。这还不足以指定它的路径吗?我找不到这个问题的答案,如果我错过了,我很抱歉。

PS:我的postflight脚本没有什么特别之处 - 现在它尝试在主目录中创建一个文件:

#!/bin/sh
touch ~/file
exit 0

1 个答案:

答案 0 :(得分:6)

我不确定为什么在包中同时包含postinstallpostflight。两者都是相同的脚本,必须在安装的“复制文件”阶段之后运行。 “postflight”名称用于旧式包 - 捆绑包。 在引入扁平包之后,必须将相同的脚本命名为“postinstall”。 在平面软件包中,安装程序仅在文件名称为“postinstall”时才将文件视为安装后脚本,而不是“postflight”并且存在于“Scripts”目录中,而不是“Resources”目录中。 可能这就是你的脚本没有被执行的原因。

您可以获得有关程序包here中使用的脚本的更多信息。