iOS

위젯 Realm migration시 주의사항

ohlee52 2023. 8. 24. 15:21
반응형

기본 프로젝트가 위젯과 타겟이 달라서 realm을 같이 쓰려면 앱그룹을 만들어서 사용해야하는데.

 

이번에 마이그레이션이 자꾸 안돼서 보니 appDelegate랑 위젯 안에서 둘다 마이그레이션을 해줘야 한다는걸 깨달았다.

기존에는 스키마 버전과 패스만 넣어서 양쪽에서 사용했는데,

 위젯 먼저 호출이 되어서 앱델리게이트의 마이그레이션 블록이 실행될때는 이미 스키마 버전이 최신이라서 마이그레이션 블록이 실행이 안된건지, 아니면 위젯과 따로 데이터베이스가 생겨서 에러가 난건지는 잘 모르겠다.

 

참고로 마이그레이션 블록은 블록 내에 실행할 명령이 없거나 최신이면 아예 호출이 안되는것 같다.

final class DatabaseManager {
    static let shared = DatabaseManager()
    
    private init() {}
    
    func performMigration()-> Realm {
        let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "myAppGroup")
        let realmURL = container?.appendingPathComponent("default.realm")
        let config = Realm.Configuration(fileURL: realmURL, schemaVersion: 3) { migration, oldSchemaVersion in
            print("oldVersion:", oldSchemaVersion)
            if oldSchemaVersion < 1 { print("0") }
            if oldSchemaVersion < 2 { print("1") }
            if oldSchemaVersion < 3 {
                print("2")
                migration.enumerateObjects(ofType: Anniversary.className()) { oldObject, newObject in
                    newObject?["isStartFromOne"] = true
                }
            }
        }
        Realm.Configuration.defaultConfiguration = config
        return try! Realm(configuration: config)
    }
}
반응형