Flutter에서 fvm 적용하기

 ・ 3 min

photo by Radek Skrzypczak on Unsplash

프로젝트에서 Flutter 3.24.2 버전과 go_router 14.2.3 버전을 사용하다가 발생한 오류를 해결하기 위해 fvm을 사용하게 된 내용을 정리했어요.

저는 보통 이메일로 Flutter 업데이트 소식을 받아보고 있어서 별일 없으면 항상 최신 버전으로 업데이트했었어요. 그동안 그렇게 하면서 큰 오류를 만나지 못해서 안심하고 있었어요.
그런데 이번에는 프로젝트를 개발 모드로 실행시키고 중간중간 변경 사항을 핫 리로드로 적용하니 BuildOwner.scheduleBuildFor() 관련 오류가 나기 시작했어요.

Flutter issue에서 이것과 연관 있는 버그를 찾았고 오류가 go_router로 인해서 발생한다는 걸 알게 되었어요. 저도 go_router를 프로젝트에서 사용하지 않고 기본 router 방식을 사용하니 오류가 나지 않았어요. 그러면서 개발하다가 페이지 이동을 할 때마다 go_router를 사용하지 못하는 게 불편하게 느껴졌어요.

그렇다고 Flutter 버전을 내리자니 곧 해결될 문제일 것 같았고 그대로 두자니 go_router를 쓰지 않아야 했어요.

그래서 해결책으로는 프로젝트에서 go_router를 사용할 수 있는 버전으로 돌아가면 된다고 생각해서 fvm을 적용해 보기로 했어요.

fvm은 Flutter Version Management로 pyenv, nvm와 같은 라이브러리처럼 사용하고자 하는 목적이 거의 비슷해요.
이런 버전 관리를 사용하는 이유는 프로젝트를 어떤 사람이 작업해도 동일한 환경에서 작업할 수 있도록 도와줘요.

저는 MacOS에서 fvm을 설치하려고 했어요. Installation에서 지시하는 대로 하면 돼요.

근데 저는 curl을 통해 설치를 하려고 하니 오류가 발생했어요.

image

이슈를 찾아보니 아직 해결이 되지 않은 문제여서 Homebrew로 설치를 진행했어요.

이런 접근 방식이 맞는지 모르겠지만 저는 3.24.2를 사용하고 있어서 되는 버전을 찾아갔어요.
Flutter Tags를 보면 그동안 출시된 버전들을 볼 수 있어요. 3.24.1도 안 됐어서 3.24.2로 올려본 건데 minor버전은 피해보자는 생각이 들어서 3.22.3 버전으로 내리기로 했어요.

VS Code에서 flutter 프로젝트를 열어 터미널에 fvm use 3.22.3을 입력했어요.

그런데 제가 ios 폴더에서 진행하고 있다는 걸 뒤늦게 발견했어요. 여러분도 명령어 작업하실 때 꼭 경로가 프로젝트의 루트에서 시작하시는지 확인하세요 ㅎㅎ

명령어만 입력하면 금방 될 줄 알았는데 구성된 환경이 있다 보니 오류가 났어요.

image

Dart SDK도 최신 Flutter 버전에 맞춰져 있어서 이걸 바꿔줘야 했어요. pubspec.yaml 파일을 열어 environment를 수정해 줬어요.

environment:
  sdk: ">=3.4.4 <4.0.0"

그런데도 여러 에러가 발생했어요. 대부분 기존에 사용하던 패키지가 최신 버전이라 다운그레이드가 필요하다는 오류였어요. 저는 조금 귀찮은 방식으로 했는데 pub.dev에 들어가 문제가 되는 패키지 하나씩 검사하고 이전 버전으로 돌려가면서 계속 fvm use 3.22.3을 시도했어요. 문제가 없으면 해당 패키지는 오류 메시지가 안 뜨더라구요. 3~4개의 패키지를 해결하면서 이 과정을 반복했어요. 한 번에 해결하는 명령어가 없나 fvm 사이트에서 찾아봤지만, 따로 없는 것 같더라구요.

현재 Flutter 버전에 가장 최신 버전을 적용할 수 있는 방법을 알고 계신다면 공유 부탁드려요 😭

image

이렇게 하다 보면 설치가 완료되고 아래처럼 메시지가 나올 거예요.
이제 VS Code를 재실행하면 잘 되실 거예요.

image

프로젝트 내부를 보면 .fvm이라는 폴더가 만들어졌을 거예요. 그러면 정상적으로 실행이 되실 거예요!

image

조금 번거로울 수 있지만, 이 작업은 하다 보면 20분도 안 걸릴 거예요.


Your vision will become clear only when you look into your heart. Who looks outside, dreams. Who looks inside, awakens.

— Carl Jung


Other posts
cover_image
 ・ 1 min

블로그에 적용할 것들!

cover_image
 ・ 3 min

NEXT.js에서 public 폴더 외에서 이미지 사용하기

cover_image
 ・ 2 min

42서울을 준비하는 사람들을 위한 책 추천