본문 바로가기

iOS/Realm

iOS Realm Migration

 

마이그레이션?

- 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)
	}
}