Objective c 如何在不包含所需框架的情况下构建框架?

Objective c 如何在不包含所需框架的情况下构建框架?,objective-c,cocoa,frameworks,Objective C,Cocoa,Frameworks,这个问题的基础是 TL;DR:我将代码分解成框架,并创建了一个元框架,其中包含将在所有框架中使用的代码(主要是常量和字符串) 现在,我需要构建框架,但我不想在每个框架上都包含元框架,因为这会导致不必要的代码膨胀。如何让我的框架了解元框架,以便快速测试它们?不要忘记,它们都将包含在最终的应用程序中,因此在我创建的每个框架中都包含一个元框架的副本是没有意义的。为了回答这个问题,我假设您正在使用内置的Xcode目标构建标准的、普通的框架。如果是这种情况,那么您的框架包含动态库,最有可能是.dylib文

这个问题的基础是

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


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

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


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

只需将子框架链接到元框架即可,通过不将元框架添加到子框架的复制文件构建阶段。
这样,您就不会有重复的代码或资源了

然后,要将您的一个子框架包含到应用程序(捆绑包,无论什么)中,请执行以下操作:

  • 将项目目标链接到您的子框架和元框架
  • 将“复制(框架)文件”构建阶段”添加到项目中(如果还不存在)
  • 将您的子框架元框架添加到所述的构建阶段
  • 您还可以选择添加项目所依赖的所有项目作为依赖项。(对于你的子项目,它将是你的元项目,对于你的应用程序,它将是你的子项目。)
  • 利润
  • 这基本上就是我在依赖于我的DLFoundationKit.framework的DLAppKit.framework和所有使用DLAppKit.framework的应用程序中所做的


    这对我有帮助。我已经将子框架链接到元框架的发布版本,但它总是说找不到框架。然后我把元框架项目拖入子框架项目,瞧,它构建得非常完美。恭喜你!当时我自己也花了一段时间;)框架可能非常棘手,尤其是在加载/安装路径等方面。