【问题标题】:Building a binary executable for a MacOS app, on Linux在 Linux 上为 MacOS 应用程序构建二进制可执行文件
【发布时间】:2018-04-05 22:32:04
【问题描述】:

我的核心是一个非常简单的程序。可以在 mac 或 ubuntu 上运行的 shell 脚本。我需要在两个平台上分发它(在 mac 情况下,必须是 .app),但是,我必须在 Ubuntu 上专门构建它。

我正在研究什么是 mac '.app',它似乎只是一个包含可执行文件、元数据等的独特目录结构。例如,这里是 Apple 的文档对此进行了解释。

https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1

似乎元数据等都可以放在一起,但是在 Contents/MacOS 文件夹中,这是可执行文件(应用程序的入口点)所在的位置。这是我感到困惑的部分。例如,有没有办法让我的 shell 脚本成为“可执行文件”?或者这是否需要是一个适当的二进制文件(就像你通过编译 C 程序得到的那样?)。如果是后者,有没有办法在 Linux 机器上做到这一点? (请注意,这个 shell 脚本或我可以编写的 C 脚本非常简单 - 本质上是一个调用另一个实用程序的 if/else 语句。)

【问题讨论】:

    标签: macos executable binaryfiles .app


    【解决方案1】:

    你需要有两件事:

    1. 将您的可执行文件放入Contents/MacOS 目录,并确保它是全球可执行的(只需调用chmod 755 即可)。我认为 shell 脚本应该在这里工作,只要它前面有正确的“shebang”。对于实际的二进制文件,您需要找到一种在 Linux 上编译 Mach-O 二进制文件的方法。

    2. 接下来,您需要在Contents 目录中创建一个Info.plist 文件。只需挖出任何 Apple plist 文件作为模板,然后将这些密钥放入其中:

      一个。 CFBundleExecutable——这应该是你在Contents/MacOS中的可执行文件的文件名

      b. CFBundleIdentifier——这应该是您的应用程序的唯一捆绑 ID,采用反向 DNS 表示法,即 com.yourwebsitename.yourappname

    如果您的 .app 包中有这些组件,它应该会在您双击它时启动。

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2015-11-03
      • 1970-01-01
      • 2018-09-26
      • 2022-08-23
      相关资源
      最近更新 更多