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

问题描述 投票:11回答:1

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

enter image description here

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

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

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

谢谢

ios xcode swift sdk frameworks
1个回答
2
投票

将项目拆分为子模块时,您需要做的很简单,但有些细节取决于您对项目进行分区的方式。

最简单的案例:1个具有N个目标的项目

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

Add Framework Target to Project

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

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

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

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

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

Target link dependencies and binary containment

稍微复杂一点:多个项目

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

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

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

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

有点不整齐:

  • 您可以创建一个Xcode工作区,拖动所有项目,然后将Core.framework从一个项目的“Products”组拖到另一个项目的“Linked Libraries”列表中,或者
  • Core.framework文件从Finder拖到“模块1”项目中(可选择选择“必要时复制文件”)将生成的二进制文件放入“模块1”目录树中。

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

© www.soinside.com 2019 - 2024. All rights reserved.