我在自定义安装程序中遇到一个问题,当我将postinstall脚本附加到pkg时,在我的计算机上安装工作正常,但在其他用户的系统上安装了。app,但postinstall脚本没有执行。
如果我删除pkgbuild上的--scripts
参数,安装程序不会产生任何问题。如果我添加它(即使postinstall
脚本为空),也会显示"安装失败"消息。无日志输出
pkgbuild --identifier $PKG_IDENTIFIER
--version $APP_VERSION
--root $APP_PATH
--scripts Scripts/
--install-location /Applications/$APP_NAME.app $TMP_PKG_PATH
productbuild --sign "Developer ID Installer: $COMPANY_NAME"
--distribution Distribution.xml
--package-path $INSTALLER_BUILD_PATH $INSTALLER_PKG_PATH
在我的系统中,应用程序被安装到/Applications中,postinstall脚本运行并做它的业务。在其他系统上,postinstall似乎根本不执行。
它已经在OSX 10.8和10.7上测试过了,都出现了同样的问题。postinstall脚本在所有系统上独立测试(使用终端中的./postinstall
)并且工作正常。
脚本如下所示:
#!/usr/bin/env sh
set -e
# Install launch agent
LAUNCH_AGENT_SRC="/Applications/MyApp.app/Contents/Resources/launchd.plist"
LAUNCH_AGENT_DEST="$HOME/Library/LaunchAgents/com.company.myapp.agent.plist"
# Uninstall old launch agent
if [ -f "$LAUNCH_AGENT_DEST" ]; then
launchctl unload "$LAUNCH_AGENT_DEST"
rm -f "$LAUNCH_AGENT_DEST"
fi
cp "$LAUNCH_AGENT_SRC" "$LAUNCH_AGENT_DEST"
launchctl load "$LAUNCH_AGENT_DEST"
# Open application
open -a "MyApp"
exit 0
是什么导致了这个问题?
问题的原因似乎是if语句。当它不存在时,if的内容可能导致错误触发,除非已经安装了发射代理。
我通过转换代码解决了这个问题:
#!/usr/bin/env sh
set -e
# Launch agent location
LAUNCH_AGENT_SRC="/Applications/MyApp.app/Contents/Resources/launchd.plist"
LAUNCH_AGENT_DEST="$HOME/Library/LaunchAgents/com.company.myapp.agent.plist"
# Uninstall old launch agent
launchctl unload "$LAUNCH_AGENT_DEST" || true
rm -f "$LAUNCH_AGENT_DEST" || true
# Install launch agent
cp "$LAUNCH_AGENT_SRC" "$LAUNCH_AGENT_DEST" || true
launchctl load "$LAUNCH_AGENT_DEST" || true
# Open application
open -a "MyApp"
exit 0
我之前在测试空脚本时所犯的错误是最后没有exit 0
。现在我可以激活不同行的代码,看看是什么导致了错误
您可能已经找到了答案,如果不看脚本就很难说,但是您能确保在postinstall脚本的末尾有"exit 0"吗?