繁体   English   中英

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

[英]How to create a Mac OS .app bundle with Chef Omnibus in DMG installer

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

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

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

从到目前为止的经验来看,Mac OS捆绑包.app可以帮助我们实现这一目标。 但是,在Omnibus安装程序创建过程中,我找不到有关如何创建捆绑软件的任何信息。 我可以看到,捆绑包是遵循特定结构的文件夹和文件的集合:

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

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

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

这是我们的distribution.xml文件,在与该问题相关的情况下可供参考。 Omnibus将其用于productbuild命令。 我一直在研究扩展此功能的选项,但与捆绑包没有任何关系:

<?xml version="1.0" standalone="no"?>
<installer-gui-script minSpecVersion="1">
 <title><%= friendly_name %></title>
 <background file="background.png" alignment="bottomleft" mime- 
   type="image/png"/>
 <welcome file="welcome.html" mime-type="text/html"/>
 <license file="license.html" mime-type="text/html"/>

 <!-- Generated by productbuild - - synthesize -->
 <pkg-ref id="<%= identifier %>"/>
 <options customize="never" require-scripts="false"/>
 <choices-outline>
  <line choice="default">
   <line choice="<%= identifier %>"/>
  </line>
 </choices-outline>
 <choice id="default"/>
 <choice id="<%= identifier %>" visible="false">
  <pkg-ref id="<%= identifier %>"/>
 </choice>
 <pkg-ref id="<%= identifier %>" version="<%= version %>" 
    onConclusion="none"><%= component_pkg %></pkg-ref>
 <domains enable_anywhere="false" enable_currentUserHome="true" 
   enable_localSystem="false" />
</installer-gui-script>

我们的应用程序已经安装

听起来确实需要为发行版生成一个.app

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

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

Frameworks/库应使用install_name_tool链接到executable

例如,

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创建软件将执行更复杂的功能,例如显示背景或需要最终用户许可协议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM