使用嵌入式框架将iOS应用程序划分为适当的层

由于我们正在开发的iOS应用程序的来源不断增加,因此我们将其重构为嵌入式框架(Cocoa Touch Framework)。

使用嵌入式Framewok的三个目的

  • 澄清层划分
  • 更快的构建时间
  • 组织依赖性

之前

在拆分之前,应用程序有一个目标,我们通过在该文件夹下创建组来拆分源文件。

拆分后,我添加了以下四个框架,并将源分发到每个框架。

  • 应用…iOS应用
  • API…与API交互的费用。 这取决于型号。
  • 通用…完全像Foundation Extension或logger一样使用的通用功能。
  • 模型…CoreData实体以及数据模型的类和结构。
  • 存储…将数据保存到CoreData,Keychain,iCloud。 取决于型号和API。

考虑每个框架的依赖性

通过分解成框架,框架之间的依赖关系变得很清楚,因此我们必须考虑应将哪些源和类放入框架中。

由于反复试验的结果,我将以上四个框架分为几个框架,并组织了依赖关系。

添加访问修饰符

当所有源都在一个目标中时,它们都设置为默认的内部访问修饰符,但是如果划分为框架,则必须公开引用其他目标。 因此,我们还组织了访问修饰符。

在提到该框架时,我遇到一个错误,说没有类,有一段时间我不知道原因,但是访问修饰符是原因。

为每个框架添加标志

我们在自己的开发环境中使用调试标志和标志来执行运行时行为并为测试环境进行构建,但是我们还需要为每个框架添加它们。

选择框架的目标,然后从“其他构建设置的Swift标记”中添加它。

更改CoreData的初始化处理

对于围绕CoreData的初始化处理,我们使用NSPersistentContainer,但是将模型定义文件.xcdatamodeld放入了Model框架。

因此,在初始化NSPersistentContainer时,需要在Model中显式指定定义文件。

 让modelURL = Bundle(for:Model.self中的类)。url(forResource:“资源名称”,withExtension:“ momd”)! 
让妈妈= NSManagedObjectModel(contentsOf:modelURL)!
让容器= NSPersistentContainer(名称:“容器的名称”,managedObjectModel:妈妈)

在这部分中,您需要格外小心,在该部分中,使用Bundle.main读取资源。


日本语はこちら