【问题标题】:Deploy multiple apps with "shared private" Qt frameworks on OS X在 OS X 上使用“共享私有”Qt 框架部署多个应用程序
【发布时间】:2013-10-25 22:28:08
【问题描述】:

我有一组可以协同工作的应用程序。应该可以由用户单独启动这些应用程序中的每一个(即一个应用程序提供监视功能,另一个应用程序提供配置功能等),因此我希望它们在 Applications 文件夹中显示为不同的应用程序(可能在一个目录中)。

应用程序基于 Qt5,因此我想将 Qt 与应用程序一起私下打包,以确保 Qt 存在且可用。另一方面,我想确保我只包含一个 Qt 副本以避免系统膨胀。

由于还包含 LaunchDaemon,我正在使用包安装程序。

如何放置所需的 Qt 框架以避免产生多个副本?

这是天真的方式:

/Applications/
    MyCompany/
        Foo.app/
            Contents/
                Info.plist (must use its own plist to specify some properties)
                MacOS/
                    foo
                Frameworks/
                    Qt-Goes-Here??
        Bar.app/
            Contents/
                Info.plist
                MacOS/
                    bar
                Frameworks/
                    Qt-Goes-Here?? - Or can this be a link to the other location?

由于我不是 Mac 专家,因此非常欢迎任何意见(包括告诉我我正在尝试一些愚蠢的事情)!

【问题讨论】:

    标签: macos qt installation package qt5


    【解决方案1】:

    这里有两种可能,第一种是

    /Library
    

    第二个

    /Library/Application Support
    

    如果您查看那里,您会发现包含各种应用程序内容的文件夹。您应该可以在那里创建一个文件夹并添加 Qt 框架,然后使用 install_name_tool 更新您的应用程序以指向该文件夹

    文档为 /Library 声明了以下内容:-

    Library 目录是存放私有的顶级目录 应用相关的数据和偏好。有几个图书馆 分散在整个系统中的目录,但您应该始终使用 位于当前主目录中的那个。不存储文件 直接在库目录的顶层。相反,存储 它们位于此表中描述的特定子目录之一中。在 OS X v10.7 及更高版本,Finder 将 Library 目录隐藏在 默认情况下用户的主文件夹。因此,您永远不应该存储文件 在您希望用户访问的此目录中。获得路径 此目录使用 NSLibraryDirectory 搜索路径键和 NSUserDomainMask 域。

    对于 /Library/Application 支持:-

    Application Support 目录是您的应用存储任何类型的 支持应用程序但不是应用程序运行所必需的文件, 例如文档模板或配置文件。文件应该是 特定于应用程序,但绝不应存储用户数据。这个目录是 位于库目录中。永远不要将文件存储在顶部 此目录的级别:始终将它们放在名为的子目录中 您的应用或公司。如果资源适用于 系统,比如文档模板,放在/Library/Application 支持。要获取此目录的路径,请使用 NSApplicationSupportDirectory 搜索路径键与 NSLocalDomainMask 域。如果资源是用户特定的,例如 工作区配置文件,放在当前用户的 ~/库/应用程序支持目录。得到这个路径 目录使用 NSApplicationSupportDirectory 搜索路径键 NSUserDomainMask 域。

    完整的文档可以在here找到。

    【讨论】:

    • 感谢您的指点。我确实可以在 /Library/CompanyName/ 和 /Library/Application support/CompanyName/ 中看到与应用程序相关的文件。但是文档说不要直接在 /Library 中放置任何东西,而 /Library/Application Support 仅用于非必需的东西?在这种情况下,虽然它是必需的 - 那么哪个规则最好弯曲?我在想 /Library/CompanyName,你同意吗?
    • 是的,我同意这一点。另一种选择是,如果其中一个应用程序是主应用程序而其他应用程序只是支持,则将框架放在主应用程序中,并将其他应用程序引导到其路径。
    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多