使用bundle外的共享库在Mac上安装app

时间:2014-10-27 15:15:16

标签: macos qt installation

我正在开发一个带有一些库依赖项的Qt应用程序,我必须为其安装。

从我阅读的所有内容看来,最好的方法是在myapp.app/Contents/Frameworks

中创建一个包含所有库依赖项和所需Qt框架的捆绑应用程序

还有其他并行创建的应用程序......也将部署在mac上。它们将具有相同的库依赖关系,并将使用相同的Qt版本构建。

在这种情况下,将库和Qt安装在捆绑包外面是有意义的......因此两个(所有)应用程序都可以访问,而无需拥有相同库的多个副本。

这看起来是否合理 - 并且可以使用捆绑岛屿的mac osx概念吗?我将如何创建这样的安装程序,将库放在应用程序包之外?

1 个答案:

答案 0 :(得分:1)

为OS X部署Qt的最简单方法是使用macdeployqt命令行工具,并且您已正确识别正常方法是将框架放在应用程序包中,但是多个应用程序将各自具有框架的副本

建议将Qt框架移动到单独的外部位置并链接到该框架是合理的。但是,您需要仔细管理框架,特别是在提供更新时要注意,如果删除或更改框架,则所有应用程序都将无法加载。但是,对于任何依赖于框架的应用程序,这都是相同的。

要考虑的是放置框架的位置。通常,外部框架驻留在/ Library / Frameworks中,但如果我们都开始将其用于Qt,则在安装应用程序时,可能会出现问题,而另一个开发人员会使用不同版本的库安装其应用程序框架。 / p>

Apple定义了各种' key directories'对于应用程序,最初,最可能的位置似乎是"应用程序支持目录",但文档说明这适用于: -

  

支持应用的任何类型的文件,但该应用无需运行

此位置通常用于支持文件,例如供用户选择的模板。 如果您的应用程序是通过Apple Store部署的,如果您使用此位置拒绝该应用程序,我将不会感到惊讶。但是,您没有使用Apple Store,那么您可以在此部署框架。

如果Apple Store是您的部署方法,那么/ Library / Frameworks可能是Qt框架可以接受的唯一地方,可能存在我上面提到的问题。

或者,考虑一下您正在开发多少个应用程序,并且将框架多次捆绑它带来的优势实际上是一个问题,例如允许用户干净地删除应用程序及其所有依赖项,以及减少框架被意外更改或删除的问题?

如果您选择在外部移动它们,您可以参考this question的答案,该答案在使用install_name_tool更新了框架的二进制依赖关系之后,全面地解释了如何制作安装程序包,如{{{ 3}}