【问题标题】:Using frameworks in a command line tool在命令行工具中使用框架
【发布时间】:2010-10-12 11:14:14
【问题描述】:

我使用 Cocoa 在 Xcode 中构建了一个命令行实用程序(基础工具)。该工具利用了第 3 方框架。

在 Xcode 中一切正常,但我该如何部署这个程序?

如果我从 Finder 运行应用程序,它无法找到库,因为它正在查看 ../Frameworks/etc. 我可以在第 3 方框架中静态链接吗?

【问题讨论】:

标签: cocoa xcode macos


【解决方案1】:

不幸的是,没有办法在 OS X 中将框架与命令行实用程序捆绑在一起,我怀疑您要链接到的框架预计会捆绑在应用程序包的 Frameworks/ 目录中。如果您有权访问框架源代码,则可以编译一个静态库并将其静态链接到您的应用程序(或将源代码直接包含在您的应用程序目标中)。如果您没有源代码或由于某种原因不想静态链接库,则还有两个选项:

  1. 如果您有权访问系统范围的 /Library/Frameworks 文件夹,则可以在那里安装第 3 方框架。这要求在构建时将框架的安装路径(INSTALL_PATH 构建设置)设置为 /Library/Frameworks,或者您使用 install_name_tool 将框架安装路径更改为 /Library/Frameworks(如果您没有框架的源代码)。

  2. 使用命令行实用程序作为应用程序包的可执行文件(即在 AppBundle.app/Contents/MacOS/ 中)构建应用程序包(就像构建 GUI 应用程序一样)。然后,您可以将第 3 方框架复制到应用程序包的框架目录。然后,您可以将应用程序包放在您想要的任何位置,并创建一个指向命令行实用程序的符号链接。

选项 1 绝对是更被接受的方法,但我在有正当理由时使用了选项 2。

您可以在 Apple 的 Frameworks Programming Guide 中找到有关构建、链接和安装框架的更多信息。

【讨论】:

  • #2 绝对是一种非传统的方法,我总是喜欢看到它......不过我想知道 - 也许还有一种方法可以使用 INSTALL_NAME_TOOL 安装名称工具来做到这一点,以及?你怎么看?
  • 谁能详细说明如何将框架项目安装到/Library/Frameworks?就我而言,我希望安装 GRDB.swift 以在另一个项目中使用。
  • 这又是相关​​的,因为 Swift 目前需要命令行工具来访问某个框架中的 Swift 标准库。 kjb,您的安装程序应该能够添加到 /Library/Frameworks。
  • 感谢您的详细解答!有没有使用命令行实用程序构建应用程序包的指南?
  • 对于任何好奇的人,这里是答案,它非常简单:stackoverflow.com/a/4540872/1226304
【解决方案2】:

如果您有框架的源代码,另一种方法是添加一个静态库目标并从中构建一个静态库。然后你可以将它静态链接到你的命令行工具中。

【讨论】:

  • 静态库不支持 Swift :(
【解决方案3】:

从 Xcode 9.3.1 开始,我可以通过将框架的 Mach-O Type 设置为 Static Library 来将框架添加到命令行工具中。然后在命令行target 中确保将框架添加到Target DependenciesLink Binary With Libraries Build Phases。然后构建的可执行文件可以毫无问题地运行。

【讨论】:

    【解决方案4】:

    您可以使用 marathon 来管理依赖项 https://github.com/JohnSundell/Marathon

    如果您想分发应用程序,这需要更多考虑。 (在该用例中,您可能希望安装到 frameworks 文件夹中。)您的里程可能会因此解决方案而异。

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 2021-11-23
      • 2015-04-19
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多