Where is SQLite used extensively?

Core data vs SQLite 3

Although Core Data is a descendant of Apple's Enterprise Object Framework, an object relational mapper (ORM) that was / is closely linked to a relational backend, Core Data is no ORM. In fact, it is an object graph management framework. It maintains what can be a very large diagram of object instances, so an app can work with a diagram that does not fully fit in memory by rendering objects in and out of memory incorrectly. Core Data also manages constraints on properties and relationships and maintains reference integrity (e.g., keeping forward and backward links consistent when adding / removing objects to a relationship). Core Data is thus an ideal framework for creating the "model" component of an MVC architecture.

To implement diagram management, SQLite is used with Core Data used as disk storage . It could may have been implemented using another relational database or even a non-relational database such as CouchDB. As mentioned earlier, Core Data can also use XML, a binary format, or a custom atomic format as a backend (but for these options the entire object graph must fit in memory). If you are interested in how Core Data is implemented on a SQLite backend, you should try the OmniGroup framework OmniDataObjects, an open source implementation of a subset of the Core Data API. The BaseTen Framework is also an implementation of the Core Data API using PostgreSQL as the backend.

Since Core Data is not intended to be an ORM for SQLite, it cannot read any SQLite schema. Conversely, do not rely on the fact that you can read Core Data's SQLite datastores with other SQLite tools. The schema is an implementation detail that can change.

So there is no real conflict between using Core Data or SQLite directly. If you need a relational database, use SQLite (directly or through one of the Objective-C wrappers like FMDB) or a relational database server. However, you may still want to learn Core Data on how to use it as a framework for object diagram management. Combined with Apple's controller classes and key-value-binding-compatible view widgets, you can have a full MVC architecture with very implement little code.