Ios 将大型swift项目拆分为具有核心框架和模块框架的框架

Ios 将大型swift项目拆分为具有核心框架和模块框架的框架,ios,xcode,swift,sdk,frameworks,Ios,Xcode,Swift,Sdk,Frameworks,我正在尝试将我的大型Swift框架拆分为多个模块框架,以便我的应用程序中的每个模块都是独立的,以便在其他应用程序上重用。 由于我拥有与所有模块共享的大数据类和库,我想创建一个包含共享数据的core_框架,并强制应用程序使用该框架,以便能够使用所有其他框架(一个或多个) 我看到了一个FBSDK的例子,有一个核心框架和其他功能框架:FBSDKCoreKit和FBSDKLoginKit 这对我来说很重要,因为效率的原因,所有其他框架都不会包含核心框架 我的问题是-在创建核心框架后,我必须在我的结节框

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

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

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

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


谢谢

当您将项目拆分为子模块时,您所要做的事情非常简单,尽管有些细节取决于您如何划分项目

最简单的情况:1个项目有N个目标 假设您只使用这一个应用程序,并将其拆分为多个模块。最简单的方法是向项目中添加更多的框架目标。

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

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

  • 创建两个(例如“核心”和“模块1”)。然后:
  • 在“模块1”的常规项目设置中,将“核心”添加到“链接的框架和库”。框架没有嵌入选项,因为它们不能包含库,只能依赖于库
  • 在应用程序目标中,嵌入并链接“模块1”
  • 这就是你需要设置的全部内容

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

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

    如果您将项目拆分为多个子项目,例如为其他人提取可部署的开源库,那么您必须使“模块1”意识到每个项目中的“核心”,并以与上文所述相同的方式链接到“核心”模块。使孤立的Xcode项目更复杂的是:“模块1”项目如何了解
    核心.framework

    • 您可以通过迦太基公开每个模块,并依赖于一个模块与另一个模块
    • 你可以用椰子荚
    • 您可以通过
      git子模块
      检查依赖项
    上面的选项使每个模块项目保持自治。依赖项是模块目录树的一部分

    有点不那么有序:

    • 您可以创建一个Xcode工作区,将所有项目拖到其中,然后将
      Core.framework
      从一个项目的“产品”组拖到另一个项目的“链接库”列表中,或者
    • Core.framework
      文件从查找程序拖到“模块1”项目上(可选选择“必要时复制文件”,将生成的二进制文件放入“模块1”目录树中)

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

    请阅读我们已将应用程序分为40个模块,开发变得容易多了。我们使用CocoaPods()来设置并链接所有模块。所有模块都通过相对路径导入。非项目特定的模块作为git子模块导入到各自的路径中,但也可以位于自己的CocoaPods存储库中。