[firebase_core] Firebase.initializeApp with demoProjectId crashes on iOS with SIGABRT (FIRInstallations validateAPIKey) - Follow-up to locked #17788
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 22/100
Línea de trabajo
Start in firebase_core/lib/src/firebase.dart, where demoProjectId builds the FirebaseOptions with the hardcoded apiKey '12345'. Reproduce with the linked repro project on an iOS simulator to see the SIGABRT from FIRInstallations validateAPIKey. Pull request #18792 already targets this, so check it before starting. Done means the demo options pass validation on Apple platforms and the repro app launches without crashing.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
This is a follow-up to locked issue #17788. I have created a clean, minimal reproduction project with no remote Firebase project, no GoogleService-Info.plist, and no google-services.json:
👉 Reproduction Repository: https://github.com/akurnaz/flutterfire_repro
The issue is that Firebase.initializeApp(demoProjectId: '...') crashes natively on iOS (EXC_CRASH (SIGABRT) / Abort trap: 6) as soon as any package that depends on FirebaseInstallations (e.g., firebase_crashlytics, firebase_auth, or firebase_messaging) is present.
Steps to Reproduce
- Clone the reproduction repo:
git clone https://github.com/akurnaz/flutterfire_repro.git - Run on an iOS Simulator:
flutter run - The application crashes immediately on startup.
Alternatively, in any fresh Flutter app:
- Add
firebase_core: ^4.15.0andfirebase_crashlytics: ^5.4.0(which pulls inFirebaseInstallations). - Call
await Firebase.initializeApp(demoProjectId: 'demo-template');inmain().
Crash Stack Trace
Termination: SIGNAL (Abort trap: 6 / SIGABRT)
CoreFoundation - __exceptionPreprocess
libobjc.A.dylib - objc_exception_throw
Runner - +[FIRInstallations validateAPIKey:]
Runner - +[FIRInstallations validateAppOptions:appName:]
Runner - -[FIRInstallations initWithAppOptions:appName:installationsIDController:prefetchAuthToken:]
Runner - -[FIRInstallations initWithApp:]
Runner - __40+[FIRInstallations componentsToRegister]_block_invoke
Runner - -[FIRComponentContainer instantiateInstanceForProtocol:withBlock:]
Runner - -[FIRComponentContainer instanceForProtocol:]
Runner - -[FIRComponentContainer instantiateEagerComponents]
Runner - +[FIRApp configureWithName:options:]
Runner - FLTFirebaseCorePlugin.initializeApp(appName:initializeAppRequest:completion:)
Root Cause
- In
firebase_core/lib/src/firebase.dart,demoProjectIdsets a hardcoded dummy API key:
resolvedOptions = FirebaseOptions(
apiKey: '12345',
appId: '1:1:$platformString:1',
messagingSenderId: '',
projectId: demoProjectId,
);
- In the iOS native SDK (
firebase-ios-sdk),FIRInstallations.mstrictly validates that the API key is 39 characters and begins withA:
+ (void)validateAPIKey:(nullable NSString *)APIKey {
if (APIKey.length != kExpectedAPIKeyLength) { // kExpectedAPIKeyLength = 39
[validationIssues addObject:@"API Key length must be 39 characters"];
}
if (![[APIKey substringToIndex:1] isEqualToString:@"A"]) {
[validationIssues addObject:@"API Key must start with `A`"];
}
if (validationIssues.count > 0) {
[NSException raise:kFirebaseInstallationsErrorDomain format:...];
}
}
- Because
'12345'fails this validation, an uncaughtNSExceptionis thrown, resulting in an uncatchableSIGABRTcrash on iOS.
Suggested Fix
In firebase_core/lib/src/firebase.dart, format the dummy apiKey to be a 39-character string starting with A on Apple platforms:
apiKey: (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS)
? 'AIzaSy0000000000000000000000000000000'
: '12345',
- Lenguaje dominante
- Dart
- Estrellas
- 9.3k
- Forks
- 4.1k
- Merge medio
- 2 d 7 h
- PR fusionados (30 d)
- 47
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de firebase/flutterfire
-
🚀 [firebase_core] Bump Firebase Android SDK (35.0.0 → 35.0.1)Posiblemente ocupada @SelaseKay la tomó hoy. AbiertoNeeds Attention type: enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 20/100
firebase/flutterfire#18807 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[firebase_auth]: authStateChanges() never emits null when the user is force-signed-out before the stream is listened to (iOS, macOS, Android)Posiblemente ocupada @JulianPscheid la tomó hace 2 días. AbiertoNeeds Attention platform: android platform: ios platform: macos plugin: auth reproduced type: bug
Dificultad 4/5 1-2 días Aptitud para principiantes 15/100
firebase/flutterfire#18796 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
blocked: customer-response Needs Attention platform: ios plugin: messaging type: bug
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
firebase/flutterfire#18776 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
[📚] Remote Config Windows Support still N/A on ReadmePosiblemente ocupada @nightcityblade la tomó hace 8 días. Abiertoblocked: customer-response good first issue Needs Attention platform: windows plugin: remote_config type: documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 30/100
firebase/flutterfire#18763 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
[cloud_firestore]: a snapshots() listener cancelled while it registers is never removed nativelyPosiblemente ocupada @chiliec la tomó hace 20 días. AbiertoNeeds Attention platform: android platform: ios platform: macos plugin: cloud_firestore reproduced type: bug
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
firebase/flutterfire#18724 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de firebase/flutterfire
Issues similares
-
c: proposal p: go_router package team-ecosystem
Dificultad 2/5 1-3 horas Aptitud para principiantes 60/100
flutter/flutter#194542 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
`sendFileEvent` uploads the original image but describes the shrunk one in unencrypted roomsAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
famedly/matrix-dart-sdk#2524 ·
Los mantenedores suelen responder en 1 día
-
Document supported hardwareAbiertoDocumentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Kazakh (kk_KZ) and Georgian (ka_GE) system locales get English instead of the shipped translationsAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
area: docs eco: dart good first issue help wanted lane: free-agent roadmap size: XS type: docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
arminazimi/evergreen#430 ·
Los mantenedores suelen responder en 1 día