将一个快速的大项目拆分为具有核心框架和模块框架的框架

Dev*_*der 12 sdk xcode frameworks ios swift

我正在尝试将我的大型Swift框架拆分为许多模块框架,因此我的应用程序中的每个模块都是独立的,以便在其他应用程序上重用.由于我有一个大型数据,如类和库共享所有模块,我认为创建core_framework包含共享数据并强制应用程序使用此框架,以便能够使用所有其他框架(一个或更多)

在此输入图像描述

我看到了FBSDK的一个例子,它有一个核心框架和其他功能框架:FBSDKCoreKit和FBSDKLoginKit

这对我来说很重要,因为效率的原因,所有其他框架都不包含核心框架.

我的问题是 - 在创建核心框架后,我必须在我的结节框架中做什么,这样它才能识别核心类和功能,但是会编译核心的文件?

谢谢

cti*_*tze 5

当您将项目拆分为子模块时,您需要做的很简单,尽管有些细节取决于您如何划分项目。

最简单的情况:1 个项目有N 个目标

假设您只处理这个应用程序并将其拆分为模块。最简单的方法是向项目添加更多框架目标。

将框架目标添加到项目

然后,您需要将它们嵌入到您的应用程序目标中。确保它的一部分的两个“嵌入式二进制文件”“链接的框架和库”。

现在你有了一个新的框架模块。

  1. 创建其中的几个(例如,“Core”和“Module 1”)。然后:
  2. 在“模块 1”的常规项目设置中,将“核心”添加到“链接的框架和库”。框架没有嵌入选项,因为它们不能包含库,只有对它们的依赖。
  3. 在应用程序目标中,嵌入并链接“模块 1”。

这就是您需要设置的全部内容。

我尝试绘制嵌入链接设置的图表,以便您看到只有应用程序目标包含其他框架:

目标链接依赖项和二进制包含

稍微复杂一点:多个项目

上面的基本设置适用于所有其他变体:框架(模块)可以依赖于其他框架,但不能随它们一起提供。只有应用程序才能最终解决二进制文件依赖关系。

如果你把你的项目拆分成多个子项目,例如为其他人提取可部署的开源库,那么你必须让“模块 1”知道每个项目中的“核心”,链接到“核心”模块的方式与以上详述。是什么让孤立的 Xcode 项目变得更加复杂:“模块 1”项目如何知道Core.framework?

  • 您可以通过 Carthage 公开每个模块并依赖于另一个模块,
  • 你可以使用 CocoaPods,
  • 您可以通过git submodule.

上述选项使每个模块项目保持自主。依赖项是模块目录树的一部分。

不那么有序:

  • 您可以创建一个 Xcode 工作区,将所有项目拖入其中,然后将Core.framework一个项目的“产品”组拖到另一个项目的“链接库”列表中,或者
  • Core.framework文件从 Finder 拖到“Module 1”项目(可选地选择“Copy files if必要”将生成的二进制文件放入“Module 1”目录树中)。

上述选项也可以工作,但它们形成了关于文件系统中文件位置的假设。工作空间方法应该有助于减少过时框架二进制文件的问题,因为工作空间可以帮助从项目间依赖关系创建正式的构建依赖关系。就像 app 目标取决于它的框架目标一样,测试目标取决于要首先编译的 app 目标。