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

时间:2016-02-25 05:23:37

标签: macos terminal command-line-arguments xcode7.1

我已经从XCode 7.1创建了一个SampleApp.app文件并将其转换为pkg文件并使用product build命令对其进行了签名,并且它运行正常。但现在问题是,当我安装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

5 个答案:

答案 0 :(得分:1)

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

#!/bin/sh

sudo open -a 'appName'

exit 0

答案 1 :(得分:0)

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

- 脚本脚本路径

  

scripts-path的内容将添加到产品存档中以供使用   通过分发中的system.run()命令。这仅适用于   针对OS X Installer应用程序的产品档案。

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

#!/bin/sh

open /path/to/your/app
exit 0

答案 2 :(得分:0)

好吧因为OSX是如此愚蠢和愚蠢,不要使用应用程序路径而是使用应用程序名称或包ID,因为OSX似乎需要时间来确定您的应用程序实际上是一个应用程序:

你可以使用bundle id打开:

#!/usr/bin/env bash

open -b 'com.myapp.mac'

exit 0

或使用应用名称打开:

#!/usr/bin/env bash

open -a 'MyApp'

exit 0

答案 3 :(得分:0)

评论中提及的Santanu Karar

  
      
  1. 在文件夹中放置非扩展程序可执行文件,并确保其名称必须为预安装 postinstall
  2.   

注意:不是postinstall.sh而是postinstall

  
      
  1. chmod 755chmod a+x应用于预安装和/或安装后的文件。
  2.   
  3. 无需在pkgBuild命令中提及脚本的完整路径。指向包含--scripts参数的postinstall脚本的文件夹
  4.   

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

一样

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

答案 4 :(得分:0)

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

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

请注意,pkgbuild中有许多未记录,已归档或难以在线查找的文档,例如$2,这是您要安装的应用程序的路径。

这意味着您也可以执行此操作...

su "$USER" -c "open $2"

还有其他变量,例如INSTALLER_TEMP,我在我的一个脚本中使用了这些变量,以了解我的应用附带的命令行实用程序是在安装过程中还是在正常操作过程中运行。否则该变量不是很有用。

Bitrot警告...在撰写本文时,Google有4 search results for INSTALLER_TEMP pkgbuild,而GitHub已出现one single result for some savenotes,所以我觉得很重要的一点是要问(并回答)并最终在这里存档,以便可以这些技术的副本。