4

当我将安装后脚本附加到 pkg 时,我的自定义安装程序出现问题。在我的计算机上,安装工作得很好,但在其他用户的系统上安装了 .app,但安装后脚本在没有执行的情况下失败。

如果我删除--scriptspkgbuild 上的参数,安装程序不会产生任何问题。如果我添加它(即使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

什么可能导致此问题?

4

2 回答 2

4

似乎问题的原因是 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。所以现在当我开始工作时,我可以激活不同的代码行,看看是什么导致了错误。

于 2013-04-24T05:19:03.337 回答
0

您可能已经找到了答案,如果不看脚本就很难说,但是您能确保在安装后脚本的末尾有“exit 0”吗?

于 2013-04-23T01:12:14.550 回答