我在自定义安装程序中遇到问题,当我将postinstall脚本附加到pkg时发生。在我的计算机上,安装工作正常,但在其他用户的系统上安装了.app但安装后脚本失败而没有执行。
如果我删除pkgbuild上的--scripts
参数,安装程序不会产生任何问题。如果我添加它(即使postinstall
脚本为空),也会显示“安装失败”消息。没有生成日志。
使用与此类似的脚本构建pkg:
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似乎根本没有执行。
它已经在OSX 10.8和10.7上进行了测试,两者都得到了同样的问题。安装后脚本在所有系统上独立测试(在终端中使用./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
可能导致此问题的原因是什么?
答案 0 :(得分:1)
问题的原因似乎是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
。所以现在当我开始工作时,我可以激活不同的代码行,看看是什么导致了错误。
答案 1 :(得分:0)
您可能已经找到了答案,如果不查看脚本就很难说,但是您可以确保在安装后脚本的末尾有“退出0”吗?