Realm migration (Swift)
해당 포스팅은 2번에 걸쳐 업데이트 될 예정입니다.
1. isBookmarked 필드를 추가하는 v2 마이그레이션 (✅ 2022.09.05 21:49 작성완료)
2. v2데이터를 사용하다가 또 다시 v3로 마이그레이션 (🟡 Not yet)
다들 알다시피 Realm의 경우에는 앱 설치 후 모델을 변경하면 migration이 필요함.
이 작업을 예전에 UserDefault로 Kuring 프로젝트에서 다른 개발자님이 하
셨었는데,
나도 도전 🔥
모델을 변경하고 앱을 딱 실행하면?
마이그레이션 하라는 문구가 나타남
일단 기존 모델로 저장된 값들을 Realm-Studio(Realm browser도 된다는데, 나 잘 안되어서 일단 이거 씀) 확인해보면
위 사진처럼 4개의 기존필드들이 들어가 있음.
일단 나는 해당 모델에서 마이그레이션도 처리하는게 제일 적절하다고 봄.
이건 Kuring의 다른 개발자님도 이렇게 설계! (직접 해보니까 3000정도 더 우러러보게 된다.)
🌿 그래서 마이그레이션 🌿
해당 모델에 이 부분을 추가한다.
// MARK: - migration
static func migration(minimumVersion: UInt64) {
// 🍬 1. config 설정 (이전 버전에서 다음 버전으로 마이그레이션 될 때)
let cofiguration = Realm.Configuration(
// 🍬 2. 새로운 버전 스키마 설정
schemaVersion: minimumVersion
) { migration, oldSchemaVersion in
// 🍬 3. 마이그레이션 수행
// 🍬 3-1. 지난 버전이 최소 지원 버전보다 낮으면
if oldSchemaVersion < minimumVersion {
// 🍬 3-2. 마이그레이션을 통해 빈 필드 값 채워주기
migration.enumerateObjects(
ofType: Note.className()
) { oldObject, newObject in
// 🍬 3-3. 새로운 필드를 채워 넣기
newObject?["isBookmarked"] = false
}
}
}
// 🍬 4. Realm이 새로운 Object를 사용할 수 있도록 설정
Realm.Configuration.defaultConfiguration = cofiguration
}
그리고 나서 Realm의 extension으로 이렇게 migration 관련한 코드를 작성해 줌!
🤔 why?
✅ 모델이 여러개가 있을탠데, 여기서 한번에 저렇게 작성하면 관리하기가 편해져서!
그리고 마지막으로 AppDelegate에 해당 코드를 넣어서 마이그레이션!
마이그레이션 성공!
NG?
(참고)
'apple > iOS' 카테고리의 다른 글
[iOS] DiffableDataSource n-Section n-Item (섹션마다 다른 셀) (0) | 2022.09.18 |
---|---|
Realm 간단하게 구조 적용하기 (0) | 2022.09.06 |
[Realm] The document “default.realm” could not be opened. (0) | 2022.09.05 |
[Realm] Realm CRUD more modern and swifty (0) | 2022.09.04 |
[iOS] UICollectionView에 대해서 알아보기 7편 (UICollectionViewDiffableDataSource) (1) | 2022.09.04 |