pkgbuild postinstall脚本导致其他人的Mac上的“安装失败”

时间:2013-04-19 13:04:45

标签: objective-c xcode macos pkgbuild

我在自定义安装程序中遇到问题,当我将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

可能导致此问题的原因是什么?

2 个答案:

答案 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”吗?