在命令行工具中使用框架

时间:2009-03-10 15:55:33

标签: cocoa xcode macos

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

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

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

4 个答案:

答案 0 :(得分:27)

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

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

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

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

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

答案 1 :(得分:9)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

如果您想分发应用程序,则需要更多的考虑。 (在该用例中,您可能希望安装到frameworks文件夹中。)根据该解决方案,您的工作量可能会有所不同。