[TIL] 20241030_ Flutter에서 iOS Firebase 연결시 안되는 문제 해결

ds-k.dev·2024년 10월 30일
2

TIL

목록 보기
11/26

문제 1

  • flutterfire를 통해 세팅을 다 마치고
  • 실행을 하는데
Error: The plugin "firebase_core" requires a higher minimum iOS deployment version than your application is targeting.

이라는 로그와 함께 앱 실행이 안되는 문제

해결 1

firebase_core의 버전이 지원하는 iOS 최소 배포 버전보다 앱에서 설정한 최소 버전이 낮기 때문에 발생하는 오류로 파악

  • 13 이상으로 변경으로 해결!

문제 2

  • 배포 버전 문제를 해결하고 앱을 실행해보니
Unhandled Exception: Binding has not yet been initialized

이라는 에러 메세지가 발생했다.

해결 2

참고 링크

조금 더 공부가 필요하겠지만 정리해보면
1. Flutter 앱을 실행할 때 Flutter 엔진을 초기화하고, 렌더링 이벤트 처리, 플랫폼 통신 등을 위한 기본적인 환경을 구축한다.
2. Firebase 플러그인은 Flutter와 네이티브 플랫폼(Android, iOS)간의 통신을 위한 플랫폼 채널을 통해 네이티브 코드와 상호작용한다.
3. 따라서 Firebase를 초기화하기 이전에 초기화를 해 주어야 할 필요성이 있다.

  • 그런데, 그럼 Firebase를 안 쓸 때에는??

해 주고 있다!!
runApp() 내부에서 해주고 있다.

void runApp(Widget app) {
  final WidgetsBinding binding = WidgetsFlutterBinding.ensureInitialized();
  _runWidget(binding.wrapWithDefaultView(app), binding, 'runApp');
}

정리하면...

void main() async {
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(MyApp());
}

이렇게 적으면, Firebase는 플랫폼 채널을 이용해야 하는데, 먼저 초기화를 하고 runApp()이 실행되면서 그때서야 플랫폼 채널을 설정하니까 오류가 발생하는 것이다.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(MyApp());
}

따라서 ensureInitialized()를 Firebase 초기화 전에 실행시켜주면 해결이 된다.

0개의 댓글