从 Mac 中的 pkg 文件安装后打开应用程序

Open app after installation from pkg file in Mac

我从 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

编辑

我也试过添加安装后脚本,但似乎没有用,我不确定是不是我的脚本或命令有问题

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

通常您会创建一个 postinstall 脚本,并将其包含在 --scripts 选项中。

--scripts脚本路径

The contents of scripts-path is added to the product archive for use by system.run() commands in the distribution. This is valid only for product archives targeted to the OS X Installer application.

因此 postinstall 的(非常)基本示例可以通过以下方式启动应用程序:

#!/bin/sh

open /path/to/your/app
exit 0

好吧,因为 OSX 太蠢了,不要使用应用程序路径,而是使用应用程序名称或包 ID,因为看起来 OSX 需要时间来确定您的应用程序实际上是一个申请:

您可以使用包 ID 打开:

#!/usr/bin/env bash

open -b 'com.myapp.mac'

exit 0

或使用应用名称打开:

#!/usr/bin/env bash

open -a 'MyApp'

exit 0

我必须在 postinstall 脚本中使用 sudo 才能让它工作:

#!/bin/sh

sudo open -a 'appName'

exit 0

如评论中Santanu Karar所述:

  1. Put a non-extension executable inside a folder and make sure it's must named preinstall or postinstall.

注意:不是postinstall.sh而是postinstall

  1. Apply chmod 755 and chmod a+x to the files preinstall and/or postinstall.
  2. No need to mention the script's full path in the pkgBuild command. Point the folder containing postinstall script for the --scripts parameter.

--scripts "./Scripts/" --scripts "./Scripts/postinstall"

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

对于许多应用程序,您不想以 sudo/root 身份启动它们,因此,您需要以普通用户身份启动它(例如安装的那个)

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

请注意,pkgbuild 中有许多未记录、存档或难以在线找到文档的内容,例如 </code>,这是您要访问的应用程序的路径安装。</p> <p>这意味着您也可以这样做... </p> <pre><code>su "$USER" -c "open "

还有其他变量,例如 INSTALLER_TEMP,我在我的一个脚本中使用它来了解我的应用程序附带的命令行实用程序在安装期间或期间是否为 运行普通手术。否则该变量不是很有用。

Bitrot 警告...在写这篇文章时,Google 有 4 search results for INSTALLER_TEMP pkgbuild and GitHub turns up one single result for some savenotes 所以我觉得重要的是要问(和回答)并最终在这里存档,以便有这些的二级副本技巧。