【问题标题】:macOS: Should I ship system libs if my app dynamically links to them?macOS:如果我的应用程序动态链接到系统库,我应该发布系统库吗?
【发布时间】:2021-02-22 06:39:20
【问题描述】:

我的应用程序使用了几个第三方动态库,我将它们包含在我的应用程序包中。但是我自己的代码和第三方库所依赖的系统库呢?

示例包括

  • /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
  • /usr/lib/libSystem.B.dylib

我应该捆绑这些并在应用程序包的所有调用方二进制文件中更新它们的引用路径吗?

如果必须,我应该为每个 macOS 版本创建应用程序二进制文件吗?

我的想法是我不应该强迫我的用户安装 Xcode,但我不确定这些系统框架和动态库是与 OS 捆绑在一起还是通过 Xcode 安装...

【问题讨论】:

    标签: xcode macos linker release


    【解决方案1】:

    系统库保证可以在您的应用程序支持的任何系统上运行(当然,它们安装在任何 Mac 上,因为系统本身使用它们)。因此,不,您不必捆绑这些库。相反,您必须仔细决定您的代码准备从哪个版本的操作系统支持这个或那个版本的库。

    当一段代码在运行时需要针对不同版本的lib进行不同的处理时,您可以使用这种形式将您的代码与当前环境同步:

    if (@available(macOS 10.14, *)) {
        //codes supporting any system since 10.14
    } else {
        //codes supporting earlier systems
    }
    

    【讨论】:

      【解决方案2】:

      您不得捆绑这些。 /System/usr/lib 中的任何内容都是操作系统的一部分,而不是 Xcode。它们不打算复制到其他系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        • 2015-11-27
        相关资源
        最近更新 更多