如何在DMG安装程序中使用Chef Omnibus创建Mac OS .app捆绑包

时间:2019-01-31 07:14:57

标签: macos chef installer bundle dmg

我对Mac OS的了解非常有限,并且有几个与DMG安装程序有关的问题。

我们有一个可以在Windows,Mac和Ubuntu上运行的应用程序。我们使用Chef Omnibus为所有三个操作系统生成安装程序。

我们的DMG安装程序有点基础,但可以正常运行,即我们的应用程序已按需安装。但是,对于我们的用户而言,启动应用程序并非易事-他们需要去寻找安装文件夹,并自行找到启动.sh文件并运行它。

到目前为止,我所收集的Mac OS捆绑包.app可以帮助我们在很大程度上解决这一问题。但是,在Omnibus安装程序创建过程中,我找不到有关如何创建捆绑软件的任何信息。我可以看到,捆绑包是follow a specific structure的文件夹和文件的集合:

  • 一个info.plist文件
  • 可执行文件-这可能是我们上面提到的bash文件
  • 资源文件夹
  • ...以及其他各种文件

我发现创建捆绑软件的最简单方法是使用xCode编辑器,但这不是我们的选择。我们会在CI流程中自动创建安装程序,因此我们希望保持这种方式,因为它非常高效且可靠。最好的办法是以某种方式扩展Omnibus流程,以便我们也可以获取此捆绑文件。但是,在这一点上,我什至不确定是否可行。

我真的很困,所以我很感激任何指针。

如果与该问题有关,请在此处参考我们的distribution.xml文件。 Omnibus将其用于productbuild命令。我一直在研究扩展此选项的方法,但与捆绑软件无关:

1001
1002
1003
1004

1 个答案:

答案 0 :(得分:1)

  

我们的应用已正确安装

听起来确实需要为发布分配生成.app

.app是一种特殊的文件夹结构:

MyApp.app/
   Contents/
      Info.plist
      MacOS/
          executable
      Frameworks/
          library.dylib
      Resources/
          icon.icns

Frameworks/中的库应通过executable链接到install_name_tool

例如,

install_name_tool -change /opt/local/lib/library.dylib @rpath/library.dylib MyApp.app/Contents/MacOS/executable
install_name_tool -add_rpath @executable_path/../Frameworks MyApp.app/Contents/MacOS/executable

大多数其他内容都可以分类资源,除Contents/文件夹外,其他任何内容都不能进入应用程序的顶层。 您可以codesign将应用程序完成并完全捆绑。

回到其他软件时,使用.app创建一个.dmg,然后可以codesign

在典型的.dmg安装中,通常向用户显示该应用程序和/ Applications文件夹的别名。要安装,用户将应用程序拖动到/ Applications文件夹。

某些.dmg创建软件将执行更复杂的功能,例如显示背景或需要最终用户许可协议。