使用启动参数在Xcode中进行核心数据调试

Core Data是Apple的对象图管理和持久性框架,适用于iOS,macOS,watchOS和tvOS。 它已经存在很长时间了,因此是在应用程序中持久存储结构化数据的绝佳解决方案。 尽管Xcode中一些鲜为人知的功能可以为您提供很多帮助,但是Core Data Debugging可能会有些困难。

“让您快速入门的一种好方法是观看有关核心数据的WWDC会议。”

为了更好地了解您的应用程序正在保存的内容,直接打开SQL数据库非常有用。 检索数据库位置的最简单方法是启用SQL调试输出:

  -com.apple.CoreData.SQLDebug 1 

您可以在Xcode的方案编辑器中设置此参数以启用SQL Core Data Debugging:

级别可以设置为4,以实现更详细的输出级别。 它将使您深入了解已执行的提取请求,访问的属性或保存的数据,并且通常是核心数据调试的绝佳工具。

启动应用程序时,它还会向您显示sqlite数据库文件的位置:

  CoreData:注释:在以下位置连接到sqlite数据库文件:/ Users / antoinevanderlee / Library / Developer / CoreSimulator / Devices / AB66C5B9-D1C1-45C4-9324-DB0E91FAB4F9 / data / Containers / Shared / AppGroup / C6934424-5E58-4164-8593- 3CC0D60D2BB5 / Coyote.sqlite“ 

可以使用相同的SQL调试启动参数来发现繁琐的查询或在应用中触发很多请求的位置。 WWDC 2018的核心数据最佳实践会议更详细地介绍了此技术。

核心数据旨在在多线程环境中工作。 但是,并非Core Data框架下的每个对象都是线程安全的。 要在多线程环境中使用Core Data,请确保:

  • 受管对象上下文绑定到初始化时与之关联的线程(队列)
  • 从上下文中检索到的受管对象被绑定到上下文所绑定到的同一队列

为了确保您做得很好,可以启用并发调试的启动参数:

  -com.apple.CoreData.ConcurrencyDebug 1 

这将在调试控制台中显示以下行:

  CoreData:批注:已启用Core Data多线程断言。 

启用并发调试后,您可以遍历应用程序中的某些流程,并且在发生并发问题时将引发异常。

核心数据迁移主要由轻量级迁移完成。 每当您需要进行重量级迁移时,您通常都会自己动手,因为几乎有一些资源可以做到这一点。 Objc.io有一本很棒的书,可以帮助您入门。

  -com.apple.CoreData.MigrationDebug 1 

使用迁移调试启动参数将在控制台中为您提供有关迁移数据的特殊情况的见解。

观看WWDC关于Core Data的会议,是一种使您快速入门的好方法。 几乎每年,在“核心数据的新功能”会议中,他们都会使用最新的API涵盖许多有关最佳做法的有价值的更新。

  • 2013年:核心数据性能优化和调试
  • 2018年:核心数据最佳实践

这个故事最初发布在:
https://www.avanderlee.com/debugging/core-data-debugging-xcode/