Flutter Testflight Crash Firebase Init Missing

Flutter TestFlight 크래시 - Firebase.initializeApp() 누락

TestFlight 빌드를 올렸는데 앱을 열자마자 즉시 종료됐다. 시뮬레이터와 디버그 빌드에서는 멀쩡했다. 원인은 Firebase.initializeApp() 호출 누락이었다. 왜 디버그에서는 괜찮고 릴리즈에서만 터지나 firebase_core를 추가하면 iOS native Firebase SDK가 CocoaPods를 통해 앱 바이너리에 포함된다. 앱이 실행되면 iOS 런타임이 GoogleService-Info.plist를 감지하고 native SDK 내부 초기화를 시작한다. Flutter Dart 레이어에서 Firebase.initializeApp()을 호출하지 않으면 native SDK ↔ Dart 브리지 사이의 동기화가 깨진다. 디버그 빌드에서는 실행 속도가 느리고 타이밍 여유가 있어 어물쩍 넘어가는 경우가 있지만, 릴리즈 빌드는 AOT 컴파일로 실행 속도가 빨라지면서 타이밍 차이가 드러나 크래시로 이어진다. ...

2025-08-16 · 2분 소요 · Seunghan
Flutter Testflight Build Number Mismatch

Flutter TestFlight 빌드 번호 불일치: pubspec.yaml +9인데 TestFlight에서 빌드 11로 표시되는 이유

Flutter iOS 앱을 TestFlight에 업로드했을 때 pubspec.yaml에 설정한 빌드 번호와 TestFlight에 표시되는 빌드 번호가 다른 경우가 있다. 예를 들어 version: 1.0.1+9로 설정했는데 TestFlight에서는 빌드 11로 표시된다. 왜 빌드 번호가 달라지는가 Flutter의 빌드 번호 흐름: pubspec.yaml version: 1.0.1+9 ↓ flutter build ios --no-codesign ↓ CFBundleVersion = 9 (Runner.app) ↓ xcodebuild archive -allowProvisioningUpdates ↓ Xcode 자동 서명 과정에서 App Store Connect 최신 빌드 번호 조회 ↓ 최신 빌드가 10이면 → CFBundleVersion을 11로 덮어씀 ↓ TestFlight에는 빌드 11로 업로드됨 xcodebuild에 -allowProvisioningUpdates 옵션을 주면 Xcode가 App Store Connect API를 통해 자동 서명을 처리하는데, 이 과정에서 이미 업로드된 빌드 번호와 충돌을 피하기 위해 CFBundleVersion을 자동으로 증가시킨다. ...

2025-08-13 · 2분 소요 · Seunghan
Flutter Ios Signin Firebase Setup

TestFlight 빌드에서 Google/Apple 로그인 둘 다 실패하는 이유

TestFlight 빌드에서 Google 로그인, Apple 로그인 둘 다 실패했다. 시뮬레이터에서는 잘 됐는데 TestFlight에서만 터지는 케이스다. 원인 1: GoogleService-Info.plist에 CLIENT_ID 누락 Firebase Console에서 iOS 앱을 처음 등록할 때 GoogleService-Info.plist를 다운받으면 기본적으로 CLIENT_ID와 REVERSED_CLIENT_ID가 포함되어 있다. 그런데 Google Sign-In을 Firebase에서 활성화하기 전에 다운받으면 이 키들이 빠진 채로 생성된다. 확인 방법: grep -A1 "CLIENT_ID\|REVERSED_CLIENT_ID" ios/Runner/GoogleService-Info.plist 아무것도 안 나오면 키가 없는 것. 왜 문제인가 iOS에서 Google Sign-In은 OAuth 콜백을 받기 위해 앱에 URL Scheme이 등록되어 있어야 한다. 이 URL Scheme이 바로 REVERSED_CLIENT_ID 값이다. 값이 없으니 Info.plist에 Scheme 등록도 못 하고, 결과적으로 Google 로그인 창에서 인증 후 앱으로 돌아오지 못한다. ...

2025-08-03 · 3분 소요 · Seunghan
Flutter Dart Define Api Url Testflight

Flutter TestFlight 빌드에서 API URL이 localhost로 고정되는 문제

Flutter 앱을 TestFlight에 올렸는데 실기기에서 모든 API 요청이 실패하는 경우, --dart-define으로 API URL이 주입되지 않아서 앱이 localhost로 요청을 보내고 있는 게 원인일 수 있다. 증상 시뮬레이터에서는 정상 동작 (로컬 서버에 연결되니까) TestFlight 빌드(실기기)에서는 로그인, API 호출 모두 실패 서버 로그에 해당 요청이 아예 안 찍힘 → 클라이언트가 서버에 요청 자체를 안 하고 있음 원인 Flutter에서 환경별 API URL을 --dart-define으로 주입받는 패턴을 쓰는 경우, 빌드 명령에 이 인자를 빠뜨리면 코드 내 기본값이 사용된다. ...

2025-07-13 · 2분 소요 · Seunghan
Ios Codesign Testflight Full Setup

iOS 배포 인증서 전체 세팅: Distribution Cert → APNs → Provisioning Profile → TestFlight

Flutter 앱을 TestFlight에 올리는 과정에서 코드 서명 관련 설정을 처음부터 다시 잡으면서 정리한 내용이다. Xcode 자동 서명이 아닌 수동 + App Store Connect API Key 방식으로 진행했다. 전체 흐름 [1] Distribution Certificate 발급 [2] APNs Certificate 발급 (CSR 생성 필요) [3] App ID에 Push Notifications 활성화 [4] Provisioning Profile 생성 (App Store, Push 포함) [5] xcodebuild archive + export (API Key 인증) [6] xcrun altool로 TestFlight 업로드 1. Distribution Certificate Apple Developer → Certificates → + → Apple Distribution 선택. ...

2025-06-18 · 4분 소요 · Seunghan
Flutter Testflight Push Notifications Entitlement

Flutter TestFlight 빌드 오류: Push Notifications 엔트리포인트 문제

Flutter 앱을 TestFlight에 처음 올려보면서 겪은 빌드 오류와 해결 과정을 정리한다. 오류 상황 flutter build ipa --release 후 xcrun altool로 업로드를 시도하자 업로드 자체가 아니라 빌드 단계에서 Xcode 아카이브가 실패했다. error: Provisioning profile "iOS Team Provisioning Profile: *" doesn't include the aps-environment entitlement. 업로드 커맨드: xcrun altool --upload-app \ --type ios \ --file "build/ios/ipa/app.ipa" \ --username "$APPLE_ID" \ --password "$APPLE_APP_PASSWORD" 원인 ios/Runner/Runner.entitlements 파일에 아래 항목이 들어가 있었다. <key>aps-environment</key> <string>production</string> 이 키는 Push Notifications 기능을 활성화한 Provisioning Profile에서만 허용된다. Wildcard(*) 프로비저닝 프로파일은 Push Notifications을 지원하지 않기 때문에 아카이브 시점에 충돌이 발생한다. ...

2025-06-08 · 2분 소요 · Seunghan
개인정보처리방침 문의