Automatic recreation of Realm DB during development
In a previous devlog I mentioned choosing Realm as backend for a project. I like it so far, but there has been a minor nuisance. During early development the layout of the DB changes all the time.
If you want to change the existing schema Realm requires a migration from old to new. This is important for production code. Writing a migration during early development for every minor change is tedious and overkill.
Time to automate! Realm exposes a deleteRealmIfMigrationNeeded
configuration. You can set this config to true
for debug builds and Realm will re-create the DB for you. Here is how I do it:
// AppDelegate.swift
// at the top add:
#if DEBUG
// required to automatically recreate the DB during development
// see func application() for more info
import RealmSwift
#endif
// in func application(didFinishLaunchingWithOptions), add:
#if DEBUG
// In debug builds, delete the realm if a migration is needed
// Reasoning: The DB changes all the time during development,
// this way we don't have to manually delete the realm
// database all the time.
Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true
#endif
Here we use a simple DEBUG
compiler flag. Debug-builds will have the code above added in the AppDelegate.swift
file. Once our app starts and Realm notices a migration is needed it recreates the database for us.
Of course this removes all existing data and hides the need for migrations. I only recommend using this crutch for early stage development. After your schema is somewhat defined, or you released a version to the public, this will do more harm than good as you might miss required migration steps.