마이그레이션?
- Realm DB 스키마 구조가 변경되는 경우 앱 충돌이 발생하게 된다
- 이때 기존 앱을 설치하여 사용하는 경우 충돌 발생을 막으면서 변경되는 스키마 구조를 적용하려면 마이그레이션을 해야 한다.
Schema Version
- 마이그레이션을 관리하기 위한 스키마 버전
- 시작은 0
- 컬럼의 추가나 삭제와 같은 동작은 스키마 버전을 증가시키는 것만으로 마이그레이션이 이루어진다.
마이그레이션 기본
let config = Realm.Configuration(
schemaVersion: schemaVersion, // SchemaVersion 올리기 (+1)
migrationBlock: { migration, oldSchemaVersion in
// migration 0 -> 1
if oldSchemaVersion < 1 {
// if 조건문 추가 - 변경되는 내용 구현
}
}
)
Realm.Configuration.defaultConfiguration = config
신규 속성 초기화
migration.enumerateObjects(ofType: RealmVc.className()) { _, newObject in
newObject!["schemaType"] = ""
newObject!["attachFiles"] = List<AttachFile>()
newObject!["fileDownloadDataId"] = ""
}
프로퍼티명 변경
migration.renameProperty(onType: RealmVc.className(), from: "_vcId", to: "vcId")
데이터 타입 변경
migration.enumerateObjects(ofType: RealmVc.className()) { oldObject, newObject in
if let expiredDate = oldObject?["expiredDate"] as? Int {
newObject!["expiredDate"] = Double(expiredDate)
}
}