【问题标题】:install app on mac with shared libraries outside bundle在包外使用共享库在 Mac 上安装应用程序
【发布时间】:2014-12-22 19:42:20
【问题描述】:

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

从我阅读的所有内容来看,似乎最好的方法是在 myapp.app/Contents/Frameworks 中制作一个包含所有库依赖项和所需 Qt 框架的捆绑应用程序

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

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

这似乎是合理的 - 并且对于 mac osx 的捆绑岛概念可行吗?我将如何创建这样一个将库放置在应用程序包之外的安装程序?

【问题讨论】:

    标签: macos qt installation


    【解决方案1】:

    在 OS X 上部署 Qt 最简单的方法是使用 macdeployqt 命令行工具,您已经正确地确定了通常的方法是将框架放在应用程序包中,但是多个应用程序每个都有框架的副本.

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

    要考虑的是框架的放置位置。通常,外部框架位于 /Library/Frameworks 中,但如果我们都开始为 Qt 使用它,那么当您的应用程序被安装并且另一个开发人员使用不同版本的库安装他们的应用程序的框架时,可能会出现问题。

    Apple 为应用程序定义了各种“key directories”,最初,最可能的位置似乎是“应用程序支持目录”,但文档指出这是为了:-

    支持应用程序但不是应用程序运行所必需的任何类型的文件

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

    如果 Apple Store 是您的部署方法,那么 /Library/Frameworks 可能是 Qt 框架唯一可接受的驻留位置,可能会出现我上面提到的问题。

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

    如果您选择将它们移到外部,您可以参考this question 的答案,它全面解释了如何在使用 install_name_tool 更新框架上的二进制依赖项后如何制作安装程序包,如here 所述。

    【讨论】:

    • 应用程序不会通过 Apple Store 部署。我将不得不阅读更多关于制作安装程序包的内容,这是一个很好的资源,谢谢。
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2019-02-03
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多