如何在非Mac平台上构建原生的Mac OS X安装程序?

6

我如何在非Mac平台上构建本地Mac OS X安装程序?

例如,我有一台Windows电脑和一个Java应用程序。我想让Windows电脑构建一个安装程序(可能在.dmg存档文件中),以便与Apple安装程序配合使用。


1
知道Mac用户只需双击.jar文件即可运行它,对吧? :-) - Sherm Pendley
1
请查看我的回答:https://dev59.com/ZnE95IYBdhLWcg3wadKq#8016507,这是一个重复的问题。 - jcoffland
7个回答

4
现在可以在非Mac平台上创建原生的Mac OS X安装程序。如Louis Gerbarg所说,关键是BOM(物料清单)文件。然而,基于Joseph Coffland的osxbom代码的开源版本mkbom现已可用于:http://hogliux.github.io/bomutils
该网站还有一个易于按步骤跟踪的教程,介绍如何在Linux上创建Mac OS X安装程序(http://hogliux.github.io/bomutils/tutorial.html)。
我们公司经常使用这种方法在Linux上构建Mac OS X安装程序,到目前为止我们还没有遇到任何重大问题。

这种方法和教程的初始测试非常成功!向@hogliux致敬。我处于这样一种情况:Mac安装程序是有意义的,因为我需要向已安装的应用程序添加文件,而不仅仅是安装我的应用程序。我还运行自动化CI构建,并且为了构建一个微小的安装程序而提供整个Mac服务器是过度杀伤力的。 - Staffan E

2
在Windows上创建.dmg文件比较困难,但是可以创建一个.app文件结构,然后进行压缩,正如其他评论所提到的。有时候,常规的.pkg文件并不能满足需求,你需要提供对话框、预安装检查等功能。使用BitRock installbuilder,你可以从其他平台构建mac、Linux、Windows、Solaris的安装程序。请访问BitRock installbuilder

2
正如其他人已经指出的那样,你正在采取解决这个问题的困难方法,如果没有一个非常好的理由,你的用户将会咒骂你。确实,某些类型的应用程序需要Mac OSX的安装程序。这些通常包括:
  • 安装自定义驱动程序(即内核扩展)的应用程序
  • 需要安装框架或其他资源的应用程序,由于某种原因无法打包在应用程序包中
  • 需要作为系统服务运行,因此必须运行一些后安装脚本,在启动时启动应用程序
  • 编写不良的程序需要对用户的系统进行某种类型的更改(例如设置文件夹的权限),而开发人员的手被营销部门束缚,以最痛苦的方式分发应用程序。
好的,最后一点有点讽刺,但你明白我的意思了吗? :) 基本上,如果你正在编写普通的终端用户应用程序,你应该以Mac用户期望的正常方式分发它,即以DMG文件形式包含你的应用程序捆绑包。或者,如果你想变得更加高级,可以在DMG内放置一个指向“应用程序”文件夹的别名,以帮助用户将程序拖到那里。除非你正在编写必须要安装到系统中而不仅仅是被系统运行的东西,否则没有理由在这里使用安装程序。另外,请记住,这是OSX,已经包含了完全功能的Java JRE,所以你不需要担心打包JRE到安装程序或其他任何东西中。
既然你因为这个问题被适当地责骂了,我将回答它,并假设你的软件属于上述类别之一。实际上,你最好选择商业解决方案,比如VISE安装程序(我可以自信地说,绝大多数Mac用户在安装使用此工具制作的产品时会感到恐惧),它允许你做到你在这里寻找的事情——基本上,从一个单一的安装文件构建支持你想要支持的各种平台的跨平台安装程序。
再次强调,您最好还是按照该平台用户最为熟悉的方式操作(这也是为什么所有回答您问题的人都建议您不要制作安装程序)。这意味着,如果您真的必须制作安装程序,您应该使用一个非跨平台框架;当Windows用户看到标准的MSI安装程序时,他们会感到最自在,而当Mac用户看到苹果安装程序pkg时,他们会感到最自在。但值得注意的是,PackageMaker程序的功能非常有限,因此如果您必须制作安装程序,您应该使用iceberg代替。这将意味着您需要进行更多的维护工作,因为您需要维护两个(或更多)单独的安装程序,但如果您的软件确实如此复杂以至于需要这样做,那么为了用户的舒适度,您应该愿意做出牺牲。

1

所以,有几个快速问题。

首先,为什么你想要一个安装程序?大多数Mac用户更喜欢只需拖动安装的应用程序。如果您没有编写Mac OS X特定的代码,很难想象您需要将位放置在特殊位置,例如Application Support或LaunchDaemons。假设您拥有的所有内容都在一个文件夹中,为什么还要使用安装程序呢?

其次,为什么在PC上构建Mac安装程序会成为问题?您肯定有一台Macintosh来测试该应用程序(您不会盲目地将其运送到Mac上而没有在Mac上进行测试,对吧?)。

好的,既然如此,假设您仍然有一个充分的理由实际在PC上构建它,那么有些部分将不容易。基本上,.pkg是一堆文本脚本、本地化、存档文件(Archive.pax.gz)和材料清单(Archive.bom)。

假设在构建之间没有太多变化,您可以在Mac上制作安装程序,然后重新构建bom和pax.gz,将它们替换到现有的.pkg中,并批处理一些元数据。 pax应该很容易处理(pax是标准存档格式),但是bom文件可能会有点棘手,因为我不认为它是公开文档的,而且我怀疑用于创建它们的工具(mkbom)不是darwin的一部分(不是开源的)。 因此,您需要找出并编写自定义工具来创建bom文件。

换句话说,这可能需要大量的工作。


21
我真的很讨厌别人回答:“你为什么要这样做?” 这太浪费时间了。 - jcoffland
2
不要试图贬低一个有效的问题,相反请尝试解决它,而不是阻止任何人为其寻找答案。 - Timothy Groote
2
我不同意,这类“反对者”的回答中有很多值得学习的地方。只要回答对正在解决的问题有深刻见解,那么它就是完全有效的。通常在提问时,我们并不知道有哪些可选方案。 - Mike

0
在Mac上安装应用程序的常规方式是将应用程序拖到应用程序文件夹中。大多数程序以DMG形式提供,其中包含应用程序和指向应用程序文件夹的符号链接。为什么您还想要其他方式呢?要构建出色的Mac应用程序,您需要考虑Mac的特点!外观和感觉非常重要,尤其是对于Mac用户而言。

0

-1
将所有内容放入一个JAR文件中,然后加入ZIP文件中。完成了。
但是说真的,你想要在没有测试的情况下将应用程序分发给Macintosh用户?你来自哪个星球!?

2
为什么您认为他没有对软件包进行测试?您可以拥有一个Linux构建服务器来创建软件包。没有任何阻止您之后在OSX上进行测试或者让您的OSX测试团队代劳。 - jcoffland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接