在Mac上从pkg文件安装后打开应用程序

4
我从XCode 7.1创建了SampleApp.app文件,并将其转换为pkg文件,使用产品构建命令签名后,一切都运行良好。但现在的问题是,在我安装pkg后,应用程序不会自动启动。我需要在命令中加入其他参数才能使它起作用吗?以下是我用来创建和签署pkg的命令。
productbuild --component SampleApp.app /Applications SampleApp.pkg

productsign --sign "Developer ID Installer: xxxxx" SampleApp.pkg SampleApp_signed.pkg

编辑

我还尝试添加一个 postinstall 脚本,但似乎没有起作用,我不确定是我的脚本还是命令的问题。

pkgbuild --root SampleApp.app --identifier com.companyname.SampleApp --scripts startup.sh --install-location /Applications/SampleApp.app SampleApp.pkg

productsign --sign "Developer ID Installer: xxxxx" SampleApp.pkg SampleApp_signed.pkg

我的startup.sh文件

#!/bin/bash

open -a /Applications/SampleApp.app

exit 0

你最终是怎么做才使它工作的呢?我和你修改后的帖子做的完全一样,甚至还把startup.sh文件权限设置成了可执行的,但是对我来说什么都没有发生。我的命令和脚本与你的除了应用程序名称和密钥名称之外几乎相同......看起来脚本根本没有运行。 - Jason Reeves
@JasonReeves 你是如何让它运行的?我已经使用chmod命令更改了.sh文件的权限,并将其附加到pkgbuild命令中,但在安装完成后它从未启动! - Santanu Karar
1
提醒一下,这最终对我起作用了。但是以下步骤特别适用于我。1.将非扩展可执行文件放入文件夹中,并确保其必须命名为“preinstall”或“postinstall”。2.对该文件应用“chmod 755”和“chmod a + x”。3.在“pkgBuild”命令中无需提及绝对路径,而是指向包含“postinstall”脚本的文件夹以供“--scripts”字段使用。最后,我在打包中收到了“添加顶级postinstall脚本”的结果。 - Santanu Karar
@Gamerlegend,我在我的电脑上安装了.pkg文件后,现在无法打开应用程序。您能否详细介绍一下步骤?谢谢。 - Giresh
首先,您需要像我在上面的评论中提到的那样使您的.sh文件可执行,然后使用问题中给出的命令将postinstall脚本添加到pkg文件中。只需确保通过在终端中键入命令:sh startup.sh打开您的应用程序即可。如果它可以打开,那么您就可以开始了。 - Francis F
显示剩余7条评论
5个回答

2
Santanu Karar在评论中提到的:
  1. 没有后缀名的可执行文件放入一个文件夹,并确保其名称为preinstallpostinstall

注意:不是postinstall.sh而是postinstall

  1. 对于文件preinstall和/或postinstall应用chmod 755chmod a+x
  2. 在pkgBuild命令中不需要提及脚本的完整路径。 将包含postinstall脚本的文件夹指向--scripts参数。

例如:--scripts "./Scripts/"不是--scripts "./Scripts/postinstall"

最后,在脚本中使用open "$2/App Name.app/"更为安全,因为$2是安装位置,并传递给postinstall脚本。


1
在我的情况下,$2 实际上是安装位置,包括 App Name.app 目录名称。 - tresf

2

我在postinstall脚本中使用了sudo来使其正常工作:

#!/bin/sh

sudo open -a 'appName'

exit 0

1

对于许多应用程序而言,您不想作为sudo/root来启动它们,因此,您需要将其作为普通用户(例如安装该应用程序的用户)启动

su "$USER" -c "open path/to/MyApp.app"

请注意,在 pkgbuild 中有许多未记录、归档或难以在网上找到文档的事情,例如 $2,它是您要安装的应用程序的路径。
这意味着您也可以做到这一点...
su "$USER" -c "open $2"

还有其他变量,比如INSTALLER_TEMP,我在其中一个脚本中使用它来知道我的应用程序随附的命令行实用程序是在安装期间还是在正常操作期间运行。否则,该变量没有太大用处。

位腐警告... 在撰写本文时,Google有4个搜索结果,用于INSTALLER_TEMP pkgbuild,而GitHub只有一个单一结果,用于某些保存注释,因此我认为重要的是提出问题(并回答),最终在这里进行归档,以便有这些技术的次要副本。


0
通常,您需要创建一个postinstall脚本,并使用--scripts选项将其包含在内。

--scripts scripts-path

scripts-path的内容被添加到产品归档中,以供分发中的system.run()命令使用。这仅适用于针对OS X安装程序应用程序的产品存档。

因此,postinstall的(非常)基本示例可以通过启动应用程序来完成:
#!/bin/sh

open /path/to/your/app
exit 0

我已经尝试过这个,但是我的应用程序在安装后仍然无法打开,我在创建和签署pkg时没有收到任何错误消息,我的脚本文件有问题吗?我使用的是EI Capitan操作系统。 - Francis F
我尝试使用“--scripts ./startup”而不是“startup.sh”,但是显示文件“startup”无法打开。当我使用startup.sh构建时,它会被创建但无法工作。有什么建议吗? - Francis F
1
这是我的错误,我需要使用chmod a + x startup命令将startup.sh文件设置为可执行文件。 - Francis F
@Gamerlegend:如果脚本没有设置root:wheel所有权(如果尚未通过pkgbuild或其他方式设置),则可能需要进行设置,但是如果您只是打开应用程序,则可能并不重要。 - l'L'l

0

好的,因为OSX非常愚蠢和愚笨,不要使用应用程序路径,而是使用应用程序名称或包标识符,因为似乎OSX需要时间来确定您的应用程序实际上是一个应用程序:

您可以使用包标识符打开:

#!/usr/bin/env bash

open -b 'com.myapp.mac'

exit 0

或者使用应用程序名称打开:

#!/usr/bin/env bash

open -a 'MyApp'

exit 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接