如何构建本机 Mac OS X 安装程序(在非 Mac 平台上)?

Posted

技术标签:

【中文标题】如何构建本机 Mac OS X 安装程序(在非 Mac 平台上)?【英文标题】:How to build native Mac OS X installer (on a non-Mac platform)? 【发布时间】:2008-11-12 10:08:53 【问题描述】:

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

例如,我有一台 Windows 电脑和一个 Java 应用程序。我希望 windows pc 构建一个可以与 Apple 安装程序一起使用的安装程序(可能在 .dmg 存档中)。

【问题讨论】:

确实知道 Mac 用户只需双击 .jar 文件即可运行它,对吗? :-) 查看我在这个问题中的答案:***.com/questions/2323818/…,这是这个问题的副本。 【参考方案1】:

现在可以在非 Mac 平台上创建本机 Mac OS X 安装程序。作为 Louis Gerbarg,棘手的是 BOM(材料清单)文件。然而,mkbom 的开源版本(基于 Joseph Coffland 的 osxbom 代码)现在可以在以下位置获得:

http://hogliux.github.io/bomutils

该网站还提供了一个易于遵循的在 Linux 上创建 Mac OS X 安装程序的分步教程 (http://hogliux.github.io/bomutils/tutorial.html)。

我的公司经常使用这种方法在 linux 上构建 Mac OS X 安装程序,到目前为止我们还没有遇到任何重大问题。

【讨论】:

此方法的初始测试和教程运行良好!向你致敬@hogliux。我处于 Mac 安装程序有意义的情况,因为我需要将文件添加到已安装的应用程序中,而不仅仅是安装我自己的。我还运行自动化 CI 构建,并为构建一个小型安装程序而配置整个 Mac 服务器是大材小用。【参考方案2】:

正如其他人已经指出的那样,您确实在为这个问题采取了艰难的解决方案,并且您的用户会为此而诅咒您的名字,除非您有一个真的很好的理由这样做。确实,某些类型的应用程序需要 Mac OSX 的安装程序。这些通常包括:

安装自定义驱动程序(即内核扩展)的应用程序 需要安装框架或其他资源的应用程序由于某种原因无法打包在应用程序包中 需要作为系统服务运行的应用程序,因此必须运行一些安装后脚本才能在启动期间启动应用程序 写得不好的程序需要对用户的系统进行某种类型的更改(即设置文件夹或其他东西的权限),并且开发人员的双手被营销部门的小伙伴束缚,以最痛苦的方式分发应用程序

好的,所以最后一点有点讽刺,但你明白我的意思吗? :) 基本上,如果您正在编写一个普通的最终用户应用程序,您应该以 Mac 用户期望的正常方式分发它,这是一个包含应用程序包的 DMG 文件。或者,如果您想真正花哨,请将别名粘贴到 DMG 内的“应用程序”文件夹中,以帮助用户将程序拖到那里。除非您编写的东西必须将自己安装到系统中,而不是简单地由系统运行,否则这里没有理由使用安装程序。另外,请记住,这是 OSX,它已经包含一个功能齐全的 Java JRE,因此您无需担心将 JRE 打包到安装程序或类似的东西中。

既然您因提出这个问题而受到适当的责骂,我将假设您的软件属于上述类别之一来回答它。确实,您最好的选择是使用诸如 VISE 安装程序之类的商业解决方案(我可以再次自信地说,绝大多数 Mac 用户在安装使用此工具制作的产品时会因恐惧而退缩),它可以让您在这里完全按照您的要求进行操作 - 基本上,制作一个跨平台安装程序,该安装程序为您希望从单个安装程序文件支持的各种平台构建。

同样,您最好的选择是做该平台的用户最熟悉的事情(这就是为什么所有对您问题的回答都敦促您不要制作安装程序)。但是,这意味着,如果您确实必须制作安装程序,则应该使用 跨平台框架; Windows 用户在使用标准 MSI 安装程序时会感到最自在,而 Mac 用户在使用 Apple Installer pkg 时会感到最自在。然而,PackageMaker 程序是出了名的有限,所以如果你必须,你应该使用iceberg 来代替。这对您来说意味着更多的维护,因为您需要照顾两个(或更多)单独的安装程序,但是如果您的软件真的如此复杂以至于需要这样做,您应该愿意为舒适做出牺牲您的用户。

【讨论】:

【参考方案3】:

在 Windows 上创建 .dmg 很困难,但当然可以创建一个 .app 文件结构,然后可以压缩,正如其他评论所提到的那样。有时,常规的 .pkg 不会剪切它,而您想要提供对话框、安装前检查等。您可以使用 BitRock installbuilder 做到这一点,您可以从每个其他平台。

【讨论】:

【参考方案4】:

所以,有几个简单的问题。

首先,您为什么需要安装程序?大多数 Mac 用户更喜欢拖动安装的应用程序。如果您不是在编写特定于 Mac OS X 的代码,那么很难想象您需要将位放置在特殊的位置,例如 Application Support 或 LaunchDaemons。假设你所有的东西都放在一个文件夹里,为什么还要麻烦安装程序?

其次,为什么在 Mac 上构建 Mac 安装程序会出现问题?你肯定有一个 Macintosh 来测试应用程序(你不会盲目地为 Mac 发布它而不在 Mac 上测试它,对吧?)。

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

假设构建之间没有太大变化,您可以在 Mac 上制作安装程序,然后重新构建 bom 和 pax.gz,将它们替换为现有的 .pkg,并批处理一些元数据。 pax 应该很容易处理(pax 是标准存档格式),但 bom 文件可能会有点棘手,因为我不相信它是公开记录的,我怀疑创建它们的工具 (mkbom) 是达尔文的一部分(不是开源的)。所以你需要弄清楚这一点并编写一个自定义工具来创建 bom 文件。

换句话说,这可能是一个很大的工作量。

【讨论】:

我真的很讨厌人们回答“你为什么要那样做?”这真是浪费大家的时间。 不要试图贬低一个有效的问题,而是尝试解决它而不是阻止任何人找到它的答案。 我不同意,从这些“魔鬼代言人”的答案中可以学到很多东西。只要答案对正在解决的问题类型有深刻见解,它就是完全有效的。通常在提出问题时,我们不知道有哪些替代方案可供我们使用。【参考方案5】:

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

【讨论】:

【参考方案6】:

查看此代码以读取 BOM 文件:https://cauldrondevelopment.com/svn/osxbom/trunk

【讨论】:

【参考方案7】:

将所有内容放入一个 JAR 文件中,然后将其添加到 ZIP 中。完成。

但是说真的,您想在不先测试的情况下将您的应用程序分发给 Macintosh 用户吗?你在哪个星球上!?

【讨论】:

你为什么认为他没有测试包?您可以拥有一个创建包的 Linux 构建服务器。没有什么可以阻止您以后在 OSX 上进行测试,或者让您的 OSX 测试团队为您完成。

以上是关于如何构建本机 Mac OS X 安装程序(在非 Mac 平台上)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令行工具为 Mac OS X 创建漂亮的 DMG?

使用 Mac OS X 应用程序部署 Qt - 如何不加载任何插件?

如何在 Mac OS X 上构建包含入口点的 C 程序?

如何在 Mac OS X 10.8 / Xcode 4.4 上使用/安装 gcc

Rails:在 OS X 上安装 PG gem - 无法构建本机扩展

在 Mac OS X 上安装多个版本的 Qt