- This topic is empty.
-
AuthorPosts
-
February 1, 2026 at 3:28 pm #7506
VOGO Technology
KeymasterCaz real: Firebase, Google Sign-In, MLKit (mobile_scanner) & CocoaPods
Acest articol documentează un caz real de dependency hell pe iOS într-un proiect Flutter matur, cu multe pluginuri Google/Firebase. Scopul este să arate de ce apar conflictele, cum le identifici corect și care este un fix stabil, reproductibil — nu workaround-uri temporare.
Context tehnic
Stack-ul implicat:
- Flutter (aplicație complexă, multe pluginuri)
- Firebase (firebase_core, firebase_messaging, firebase_auth)
- Google Sign-In
- MLKit prin mobile_scanner
- CocoaPods (iOS)
Simptomul principal:
CocoaPods could not find compatible versions for pod “GoogleUtilities/*”
A apărut sub mai multe forme:
- GoogleUtilities/UserDefaults
- GoogleUtilities/Environment
- conflicte între ~> 7.x, < 8.0, ~> 8.0
De ce se întâmplă asta (explicația reală)
Problema NU este Flutter.
Problema NU este CocoaPods.Problema este incompatibilitatea structurală dintre stack-urile Google, în special:
- Firebase
- Firebase 10.x → GoogleUtilities 7.x
- Firebase 11.x → GoogleUtilities 8.x
- Google Sign-In
- GoogleSignIn 8.x → GoogleUtilities 8.x (prin AppCheck)
- MLKit (mobile_scanner)
- mobile_scanner ≤ 5.x
→ MLKitCommon 11.x
→ GoogleUtilities < 8.0
💥 Rezultatul:
- Firebase 10.x vrea 7.x
- GoogleSignIn 8.x vrea 8.x
- MLKit vrea < 8.0
=> imposibil de rezolvat prin pin-uri amestecate
=> CocoaPods face exact ce trebuie: refuză.Greșeala clasică (și foarte frecventă)
Pin-uirea forțată în Podfile:
$FirebaseSDKVersion = ‘10.25.0’
Aceasta:
- pare că rezolvă Firebase
- DAR rupe Google Sign-In
- ȘI intră în conflict cu MLKit
Este un anti-pattern în proiecte Flutter moderne cu ecosistem Google.
Soluția corectă (una singură, stabilă)
Principiu
👉 Toate dependențele Google trebuie aliniate pe aceeași generație (8.x)
Asta înseamnă:
- Firebase 11.x
- GoogleSignIn 8.x
- MLKit / mobile_scanner compatibil cu GoogleUtilities 8.x
Fix-ul final (testat, stabil)
1️⃣ pubspec.yaml
dependencies:
firebase_core: ^3.15.2
firebase_messaging: ^15.2.10
firebase_auth: ^5.7.0
google_sign_in: ^6.3.0
mobile_scanner: ^7.1.4
⚠️ Important: mobile_scanner 7.x este cheia. Versiunile mai vechi blochează GoogleUtilities < 8.0.
2️⃣ ios/Podfile
Șterge complet orice pin Firebase.
Corect:
platform :ios, ‘15.0’
ENV[‘COCOAPODS_DISABLE_STATS’] = ‘true’
❌ Greșit (nu face asta):
$FirebaseSDKVersion = ‘10.25.0’
3️⃣ Clean complet (ordine strictă)
cd <project-root>
flutter clean
rm -rf .dart_tool pubspec.lock
flutter pub get
ls ios/Flutter/Generated.xcconfig # trebuie să existe
cd ios
rm -rf Pods Podfile.lock .symlinks Runner.xcworkspace
pod repo update
pod install –repo-update
4️⃣ Xcode
Deschide doar:
ios/Runner.xcworkspace
NU Runner.xcodeproj.
De ce această soluție funcționează
- Elimină conflictele 7.x vs 8.x
- Nu forțează CocoaPods
- Urmează direcția oficială Google
- Este compatibilă cu upgrade-uri viitoare
- Evită bug-uri runtime subtile (AppCheck, Firebase Messaging, Sign-In)
Lecții cheie (pentru proiecte mari)
- Nu mixa generații Google (Firebase 10 + GoogleSignIn 8 + MLKit vechi = dezastru)
- Pin-urile în Podfile sunt ultimul resort, nu soluția
- În Flutter:
- rezolvarea e aproape întotdeauna în pubspec.yaml
- mobile_scanner este un punct critic pe iOS
- Dacă vezi GoogleUtilities/* în eroare → problema e de aliniere, nu de cache
Concluzie
Dacă ai Firebase + Google Sign-In + MLKit într-un proiect Flutter iOS:
- alinierea versiunilor este obligatorie
- workaround-urile temporare te vor bloca din nou
- soluția corectă este una singură: stack Google modern, coerent
Poți salva articolul acesta ca checklist de „advanced troubleshooting” — te va scuti de ore (sau zile) data viitoare.
Files:
-
AuthorPosts
- You must be logged in to reply to this topic.
