自动预加载核心数据的SQLite文件的框架

tl; 博士—我已经发布了一个框架来为NSPersistentContainer预加载SQLite文件。 查看有关GitHub存储库的更多详细信息。

riywo / PreloadedPersistentContainer

PreloadedPersistentContainer –使用预加载的SQLite数据扩展NSPersistentContainer的框架。 这支持…

github.com


尽管我尚未完成任何iOS应用程序开发,但我想说Core Data是我最喜欢的iOS开发框架之一。 它是非常完善的ORM,与其他UIKit等框架本机集成,因此我可以使用它在精美的UI中提供一些数据。

我面临的一个问题是预加载数据。 我想加载约10,000条其他程序生成的数据记录。 使用Core Data(和我也喜欢的Codable),我可以通过OO方式插入记录,但是加载需要一些时间,因此我不想在启动应用程序时运行预加载过程。 由于Core Data通常由SQLite支持,因此可以选择在iOS开发之外制作SQLite数据库文件。 但是,这种方式具有很大的缺点,例如同步方案和组件紧密耦合。

我想使用Core Data进行预加载,但是我不想在iOS应用中运行它。 现在,只有一种解决方案。 在构建阶段在macOS上预加载。 我搜索了一些文章,但几乎所有文章都需要一些手动操作,例如拖放。 我不想每次更新原始数据时都这样做!

然后,有一篇文章使我有种感觉-核心数据:自动预加载主数据-这已经很老了(2013年),但对我来说是正确的方法! 因此,我深入研究了这种方法,并最终获得了Xcode 9的解决方案。但是我也认为,可以以某种方式推广这种想法。 尽管我从未编写过任何Framework,但我也开始学习Framework,并意识到它需要多平台支持,因为预加载在macOS上运行,而该应用在iOS上运行。

这个跨平台的框架也很棘手,但是在另一篇文章的帮助下-使用单元测试为iOS,OS X和tvOS创建Swift框架,并通过CocoaPods和Swift Package Manager进行分发-我可以开发我想要的框架。 干得好!

riywo / PreloadedPersistentContainer

PreloadedPersistentContainer –使用预加载的SQLite数据扩展NSPersistentContainer的框架。 这支持…

github.com


在开发过程中,我遇到了很多问题:

  • 如何使Core Data模型可识别多个目标? (目标成员)
  • 什么是计划? 对我的项目有什么影响? (控制构建/测试/运行过程)
  • 为什么我的扩展功能无法从我的测试代码中使用? (简单-公开)
  • Bundle.main在我的单元测试中不起作用(Bundle(for:type(of:self)))
  • 同样,我的单元测试无法识别模型(与Bundle.main相同,需要指定.mom来代替)
  • 如何仅在单元测试中覆盖主捆绑包? (测试非公共功能+包装器公共功能; @testable导入非常酷)
  • Xcode中使用统一代码的多个目标太可怕了(刮擦并构建Xcode项目如此多次)
  • 建立目录结构,框架如何工作,什么是迦太基等…

这是我的第一个项目,包括框架,多目标,构建阶段的运行脚本,XCTest,Carthage等,因此花费了相当长的时间。 但是,我从未完成任何iOS应用开发;(

今天,我终于有了想要的工具,因此我将开始iOS开发!