エラー文
Thread 1: Fatal error: ‘try!’ expression unexpectedly raised an error: Error Domain=io.realm Code=10 “Migration is required due to the following errors:
RealmSwiftを用いるアプリで、すでにシミュレーターでテスト済みのものに、新たに変数を追加すると上記のようなエラーが出てきてしまいました。
変数を追加するとは以下のような感じです。
//変更前
@objc dynamic var memo: String = ""
@objc dynamic var detail: String = ""
//変更後
@objc dynamic var memo: String = ""
@objc dynamic var detail: String = ""
@objc dynamic var adddetail: String = "" //新たに追加した変数
解決策
この場合、リリース前のアプリであれば、アプリを一度シミュレーターから削除して再立ち上げすれば問題ないのですが、リリース後のアプリの場合はスキームのバージョンを引き上げる以下のコードを、最初のViewControllerのエディタに書く必要があります。
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if(oldSchemaVersion < 1) {
migration.enumerateObjects(ofType: CustomMemo1.className()) { _, _ in
// pass: 何もいらない
}
}
}
)
schemaVersion
は、はじめが0
スタートなので、変更する際は1
としてください。
さらに1
から変数を追加などする場合は2
としましょう。
おわりに
現在リリース中のRealmとFirebaseを用いた単語管理アプリAtoZ Dictionaryで、アメリカのユーザーから「写真を追加してほしい」、「詳細を記入できる欄を設けてほしい」など変数を追加する必要のある要望をいただいたので、調べていくうちにこのマイグレーション法を見つけました👀
こちらのアプリの機能や詳細を知りたい方は以下のプレスリリースの記事をご覧ください☺️
今までRealmを用いたプロダクトの開発途中に変数を追加する必要があった時、新しくクラスごと作り替えていたので、もっと早く知っておけばよかったと思い備忘録として残しておきます!同じ悩みを抱えてた方はぜひ参考にしてみてください!