【问题标题】:How can I build framework without including needed framework?如何在不包含所需框架的情况下构建框架?
【发布时间】:2010-12-11 01:06:27
【问题描述】:

本题基于this

TL;DR:我将我的代码分解为框架并创建了一个元框架,其中包含将在我的所有框架中使用的代码(主要是常量和字符串)。

现在,我需要构建框架,但我不想在每个框架上都包含元框架,因为这会导致不必要的代码膨胀。如何让我的框架了解元框架,以便快速测试它们?不要忘记它们都将包含在最终应用程序中,因此在我创建的每个框架中包含元框架的副本是没有意义的。

【问题讨论】:

    标签: objective-c cocoa frameworks


    【解决方案1】:

    只需将您的子框架仅链接到您的元框架,方法是不添加元框架到您的子框架的复制文件构建阶段。 这样您就可以得到没有重复的代码或资源

    然后,为了将您的子框架之一包含到应用程序(捆绑包等)中,请执行以下操作:

    1. 链接项目目标到您的子框架和您的元框架
    2. 如果尚不存在,则将“复制(框架)文件构建阶段添加到项目中。
    3. 将您的子框架元框架都添加到上述构建阶段
    4. (可选)您可能还希望将项目所依赖的所有项目添加为依赖项。 (对于您的子项目,这将是您的元项目,对于您的应用,将是您的子项目。)
    5. ...
    6. 利润。

    这基本上是我在我的 DLAppKit.framework 中所做的,它依赖于我的 DLFoundationKit.framework 以及所有使用 DLAppKit.framework 的应用程序em>。

    【讨论】:

    • 这种帮助我。我已将子框架链接到元框架的发布版本,但它总是说找不到框架。然后我将元框架项目拖到子框架项目中,瞧,它构建得很完美。
    • 恭喜!这花了我一段时间,当时;)框架可能非常棘手,尤其是在加载/安装路径等方面。
    【解决方案2】:

    为了回答这个问题,我假设您正在使用内置的 Xcode 目标构建标准的普通框架。如果是这种情况,那么您的框架包含动态库,很可能是 .dylib 文件。任何链接到此类框架的代码都不会在编译时合并包含的库中的代码,它会在运行时加载框架并解析符号。

    这样做的结果是您不必担心代码膨胀;链接离开!如果您的子框架依赖于父框架中定义的符号,那么您需要将它们链接到父框架。在某些情况下,您可以以可怕的方式使用 Objective-C 元编程来绕过直接包含框架,但如果您主要包含常量和字符串,则在这种情况下可能不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2017-06-13
      • 1970-01-01
      • 2019-12-19
      相关资源
      最近更新 更多