我对Mac OS的了解非常有限,并且有几个与DMG安装程序有关的问题。
我们有一个可以在Windows,Mac和Ubuntu上运行的应用程序。我们使用Chef Omnibus为所有三个操作系统生成安装程序。
我们的DMG安装程序有点基础,但可以正常运行,即我们的应用程序已按需安装。但是,对于我们的用户而言,启动应用程序并非易事-他们需要去寻找安装文件夹,并自行找到启动.sh文件并运行它。
到目前为止,我所收集的Mac OS捆绑包.app可以帮助我们在很大程度上解决这一问题。但是,在Omnibus安装程序创建过程中,我找不到有关如何创建捆绑软件的任何信息。我可以看到,捆绑包是follow a specific structure的文件夹和文件的集合:
我发现创建捆绑软件的最简单方法是使用xCode编辑器,但这不是我们的选择。我们会在CI流程中自动创建安装程序,因此我们希望保持这种方式,因为它非常高效且可靠。最好的办法是以某种方式扩展Omnibus流程,以便我们也可以获取此捆绑文件。但是,在这一点上,我什至不确定是否可行。
我真的很困,所以我很感激任何指针。
如果与该问题有关,请在此处参考我们的distribution.xml文件。 Omnibus将其用于productbuild命令。我一直在研究扩展此选项的方法,但与捆绑软件无关:
1001
1002
1003
1004
答案 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
创建软件将执行更复杂的功能,例如显示背景或需要最终用户许可协议。