pkgbuild 安装后脚本导致其他人的 Mac 上出现"Installation failed"



我在自定义安装程序中遇到一个问题,当我将postinstall脚本附加到pkg时,在我的计算机上安装工作正常,但在其他用户的系统上安装了。app,但postinstall脚本没有执行。

如果我删除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脚本运行并做它的业务。在其他系统上,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"吗?

相关内容

  • 没有找到相关文章

最新更新