• This topic is empty.
Viewing 1 post (of 1 total) Forum home
  • Author
    Posts
  • #7506
    VOGO Technology
    Keymaster

    Caz 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:

    1. Firebase
    • Firebase 10.x → GoogleUtilities 7.x
    • Firebase 11.x → GoogleUtilities 8.x
    1. Google Sign-In
    • GoogleSignIn 8.x → GoogleUtilities 8.x (prin AppCheck)
    1. 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)

    1. Nu mixa generații Google (Firebase 10 + GoogleSignIn 8 + MLKit vechi = dezastru)
    2. Pin-urile în Podfile sunt ultimul resort, nu soluția
    3. În Flutter:
      • rezolvarea e aproape întotdeauna în pubspec.yaml
    4. mobile_scanner este un punct critic pe iOS
    5. 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:

    Advanced iOS Dependency Troubleshooting in Flutter

    Advanced iOS Dependency Troubleshooting in Flutter-RO

Viewing 1 post (of 1 total) Forum home
  • You must be logged in to reply to this topic.