【问题标题】:Open app after installation from pkg file in Mac从 Mac 中的 pkg 文件安装后打开应用程序
【发布时间】:2016-06-07 17:44:51
【问题描述】:

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

【问题讨论】:

  • 你最终做了什么来让它工作。我做的和你编辑的帖子一样……甚至 chmod 可执行 startup.sh 文件……但对我来说什么也没发生。我的命令和脚本与您的相同,除了应用程序名称和键名......脚本似乎没有运行
  • 没关系,我明白了。
  • @JasonReeves 你如何让它运行?我 chmod .sh 文件,然后附加到 pkgbuild 命令中,但安装完成后它永远不会触发!
  • @SantanuKarar 首先,文件必须命名为 postinstall.sh 其次,--scripts 路径必须是脚本文件夹的完全限定路径,即 /Projects/myproject/bin/scripts 并确保它指向文件夹......而不是文件。然后当你运行 pkgbuild 时,你会在控制台中看到“添加安装后脚本”(或类似的东西),你会知道你已经正确设置了它!我花了一段时间才弄清楚这个!!希望这会有所帮助!
  • 记录一下,这终于对我有用了。但是以下步骤对我特别有用。 1. 将非扩展可执行文件放在文件夹中,并确保它必须命名为preinstallpostinstall。 2. 将chmod 755chmod a+x 应用于文件, 3. 在pkgBuild 命令中无需提及绝对路径,但将包含postinstall 脚本的文件夹指向--scripts 字段。最后,我在打包中收到了“添加顶级安装后脚本”结果。

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


【解决方案1】:

对于许多应用程序,您不想以 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,所以我觉得询问(和回答)并最终在此处存档很重要,以便有这些技术的辅助副本.

【讨论】:

    【解决方案2】:

    正如评论中提到的Santanu Karar

    1. 非扩展 可执行文件放入文件夹中,并确保它必须命名为 preinstallpostinstall

    注意:不是postinstall.sh,而是postinstall

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

    --scripts "./Scripts/"不是 --scripts "./Scripts/postinstall"

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

    【讨论】:

    • 在我的例子中,$2 实际上是安装位置*包括 App Name.app 目录名称。
    【解决方案3】:

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

    #!/bin/sh
    
    sudo open -a 'appName'
    
    exit 0
    

    【讨论】:

      【解决方案4】:

      好的,因为 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
      

      【讨论】:

        【解决方案5】:

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

        --scripts 脚本路径

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

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

        #!/bin/sh
        
        open /path/to/your/app
        exit 0
        

        【讨论】:

        • 我已经尝试过了,但我的应用程序在安装后仍然无法打开,我在创建和签署 pkg 时没有收到任何错误,我的脚本文件有问题吗?我在 EI Capitan 上
        • 我试过 --scripts ./startup 而不是 startup.sh 但说文件“startup”无法打开。当我使用 startup.sh 构建它时,它会被创建但不起作用。有什么建议吗?
        • 这是我的错误,我必须使用 chmod a+x 启动命令使 startup.sh 文件可执行
        • @Gamerlegend:脚本可能需要 root:wheel 所有权集(如果尚未设置或通过 pkgbuild),但如果您只是打开应用程序可能无关紧要。
        猜你喜欢
        • 1970-01-01
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多