Firebase 초기화 오류 해결: 플랫폼별 설정 문제

순순·2024년 7월 2일

Flutter

목록 보기
4/16

개발 중 다음과 같은 코드로 Firebase를 초기화했음에도 불구하고, 초기화에 실패했다는 에러가 났다. 잘 되다가 왜...

  await Firebase.initializeApp();

에러 메세지


Performing hot restart...
Syncing files to device iPhone 15 Pro Max...
Restarted application in 692ms.
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: [core/not-initialized] Firebase has not been correctly initialized.

Usually this means you've attempted to use a Firebase service before calling `Firebase.initializeApp`.

View the documentation for more information: https://firebase.flutter.dev/docs/overview#initialization

#0      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:120:9)
<asynchronous suspension>
#1      Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:31)
<asynchronous suspension>
#2      main (package:schedule_with/main.dart:38:3)
<asynchronous suspension>

원인 파악


구글링 끝에, 플랫폼별로 Firebase 초기화를 명시적으로 설정해야 한다는 것을 발견했다.


문제 해결 시도


기존 코드

await Firebase.initializeApp();

위 코드는 기본 초기화 방법만 사용하며, firebase_options.dart 파일을 참조하지 않기 때문에 각 플랫폼(Android, iOS, Web 등)에서 필요한 옵션이 누락될 수 있다. 결과적으로 특정 플랫폼에서 Firebase가 제대로 초기화되지 않을 가능성이 있다는 것이었다.

플러터로 개발하면서 가끔 AOS에서는 잘 실행되는데 iOS 에서 안된다거나, 그 반대의 경우를 접해왔기 때문에... 우선 특정 플랫폼 때문에 초기화 에러가 발생 하는건지, 아님 모든 플랫폼에서 발생 하는건지 확인하고 싶었다. 따라서 아래 코드를 적용해 각 플랫폼에서 앱을 실행해보았다.


수정된 코드

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

적용 후 안드로이드 에뮬레이터에서는 앱이 잘 돌아가는데, 아이폰 시뮬레이터에서는 여전히 오류가 나고 있음을 발견했다. 덕분에 문제의 원인이 iOS 관련 설정이라는 것을 알 수 있었다. 따라서 iOS 설정파일을 체크해보았다.

1. Firebase 구성 파일 체크
ios/Runner/Info.plist 에 GoogleService-Info.plist 가 제대로 포함 되어있는지?

2. ios/Podfile 체크
Podfile은 iOS 개발에서 CocoaPods라는 의존성 관리 도구를 사용하여 외부 라이브러리를 프로젝트에 추가할 때 작성하는 구성 파일이다.

아래 명령을 실행하면 모든 종속성이 올바르게 설치되었는지 확인 할 수 있다.

cd ios
pod install

그런데 파일이 존재하지 않는다는 메세지가 떴다. 이 녀석이 범인이었던 것... 다행히 해결 방법은 간단하다. CocoaPods 초기화 후 다시 설치해주면 된다.

pod init
cd ios
pod install

해결


다시 아이폰 시뮬레이터에서 앱을 실행하니 Firebase가 정상적으로 초기화되었다.


느낀점


이번 경험이 플러터의 특성을 조금 더 깊이 이해할 수 있는 계기가 되지 않았나 싶다.

크로스 플랫폼 프레임워크라는 특성상, 각 플랫폼마다 초기화나 설정 방식에 미묘한 차이가 있을 수밖에 없다는 것은 알고 있었다. (예를 들어, iOS에서는 GoogleService-Info.plist 파일이 정확히 포함되어야 하고, CocoaPods를 통해 의존성이 올바르게 설치되어야만 Firebase가 정상적으로 작동한다. 반면, Android는 google-services.json 파일을 사용하며, Gradle을 통해 종속성을 관리한다)

하지만 이를 간과했을 때 발생하는 문제를 직접 경험한 것은 처음이었다. 코드 자체에는 문제가 없더라도, 프로젝트 전반의 구조와 설정을 점검하는 것도 중요하다는 것을 깨달았다.

profile
플러터와 안드로이드를 공부합니다

0개의 댓글