# đŸ“± GEOSECTOR v3.3.4 - Publication iOS App Store ## 📋 Informations du projet ### Configuration actuelle - **Version** : 3.3.6 (Build 336) - **Bundle ID** : `fr.geosector.app3` - **Team ID** : `6WT84NWCTC` - **Display Name** : `GeoSector` - **Bundle Name** : `GeoSector` - **Deployment Target** : iOS 15.4+ - **Xcode** : 16.4 - **Flutter** : 3.24.5 LTS ✅ **Configuration stable** (downgrade depuis 3.35.5) - **Dart** : 3.5.4 ### Compte Apple Developer - **Organisation** : Accessible via compte existant - **Application existante** : Oui (ancienne version 2.7.1) - **Type de mise Ă  jour** : Refonte complĂšte v3.3.4 --- ## ✅ Étapes complĂ©tĂ©es ### 1. Environnement et dĂ©pendances - [x] Flutter **downgrade vers 3.24.5 LTS** (11/10/2025 sur Debian, 13/10/2025 corrections) - [x] Dart SDK downgrade vers 3.5.4 - [x] Packages ajustĂ©s pour compatibilitĂ© Flutter 3.24.5 (voir dĂ©tails ci-dessous) - [x] `flutter clean` exĂ©cutĂ© - [x] `flutter pub get` exĂ©cutĂ© avec succĂšs - [x] CocoaPods mis Ă  jour (1.16.2) - [x] `pod install` exĂ©cutĂ© (25 pods installĂ©s) #### Packages downgradĂ©s (Flutter 3.24.5 LTS) **Packages majeurs** : - `syncfusion_flutter_charts` : 29.1.38 → **27.2.5** (sweet spot sans `withValues()` ni `markNeedsBuild()`) - `geolocator` : 14.0.2 → **13.0.3** (sans `toARGB32()`) - `geolocator_android` : forcĂ© Ă  **4.6.1** - `battery_plus` : 7.0.0 → **6.0.3** (fix Gradle AGP 8) - `connectivity_plus` : 7.0.0 → **6.0.5** (fix Gradle AGP 8) - `nfc_manager` : 3.5.0 → **3.3.0** ⚠ **Patch requis** (voir ci-dessous) **Raison** : Packages v7.x incompatibles avec Flutter 3.24.5 LTS (propriĂ©tĂ© Gradle manquante) **⚠ Patch critique nfc_manager 3.3.0** : ```bash # Requis aprĂšs CHAQUE flutter pub get ./fix-nfc-manager.sh ``` **Pourquoi** : - nfc_manager 3.3.0 est **obligatoire** pour Stripe Tap to Pay on iPhone - Android Gradle Plugin 8+ nĂ©cessite `namespace` dans build.gradle - Version 3.3.0 ne l'a pas → patch automatique via script **Contenu du patch** : Ajoute `namespace 'io.flutter.plugins.nfc_manager'` dans `.pub-cache/hosted/pub.dev/nfc_manager-3.3.0/android/build.gradle:28` ### 2. Configuration du projet iOS - [x] **CFBundleName** corrigĂ© : `geosector_app` → `GeoSector` - [x] **Bundle Identifier** vĂ©rifiĂ© : `fr.geosector.app3` ✅ - [x] **Team ID** configurĂ©e : `6WT84NWCTC` ✅ - [x] **Info.plist** configurĂ© avec toutes les permissions : - Localisation (GPS) - NFC (tags secteurs) - Bluetooth (terminaux Stripe) - CamĂ©ra (scan cartes bancaires) - Photos (justificatifs) - RĂ©seau local - Contacts ### 3. Entitlements Stripe Tap to Pay - [x] Fichier `Runner.entitlements` créé avec : - ✅ NFC Tag Reading (NDEF, TAG) - ✅ Stripe Terminal - Tap to Pay on iPhone - ✅ Network Access - ✅ Keychain Sharing - [x] Fichier prĂ©sent dans `/ios/Runner/Runner.entitlements` ### 4. Pods installĂ©s ``` ✅ 26 pods installĂ©s au total : - Flutter (1.0.0) - Stripe (24.16.2) - StripeTerminal (4.6.1) ← Essentiel pour Tap to Pay - StripeApplePay (24.16.2) - StripeCore (24.16.2) - StripeFinancialConnections (24.16.2) - StripePaymentSheet (24.16.2) - StripePayments (24.16.2) - StripePaymentsUI (24.16.2) - StripeUICore (24.16.2) - mek_stripe_terminal (1.0.0) - nfc_manager (0.0.1) - geolocator_apple (1.2.0) - battery_plus (1.0.0) - connectivity_plus (0.0.1) - device_info_plus (0.0.1) - flutter_local_notifications (0.0.1) - image_picker_ios (0.0.1) - network_info_plus (0.0.1) - package_info_plus (0.4.5) - path_provider_foundation (0.0.1) - permission_handler_apple (9.3.0) - sensors_plus (0.0.1) - stripe_ios (0.0.1) - url_launcher_ios (0.0.1) - ReachabilitySwift (5.2.4) ``` ### 5. Analyse du code et compilation - [x] `flutter analyze` exĂ©cutĂ© : **0 erreurs**, 32 warnings (info seulement, pas d'erreurs bloquantes) - Avertissements de style principalement - Aucune erreur critique #### Statut de compilation (13/10/2025 23:15) - ✅ **Web** : Compilation rĂ©ussie aprĂšs downgrade syncfusion_flutter_charts 27.2.5 - ⏳ **Android** : En attente validation aprĂšs patch nfc_manager 3.3.0 - Toutes erreurs corrigĂ©es (battery_plus, connectivity_plus, SDK 35, nfc_manager) - Script `fix-nfc-manager.sh` créé et prĂȘt - Test final `./android.sh` requis - ⏳ **iOS** : Non testĂ© sur Debian - Configuration Mac mini requise - Pods installĂ©s : 25 pods (dont StripeTerminal 4.6.1) --- ## 🔄 Étapes en cours ### 6. Validation compilation Android - [ ] **EN COURS** : Test final Android build aprĂšs patch nfc_manager - [ ] ExĂ©cution : `./android.sh` - [ ] VĂ©rification : Build APK rĂ©ussi sans erreurs ### 7. Transfert projet vers Mac mini - [ ] **EN ATTENTE** : Copie du projet corrigĂ© via Samba/rsync - [ ] VĂ©rification : `flutter pub get` sur Mac - [ ] ExĂ©cution : `./fix-nfc-manager.sh` (patch nfc_manager) - [ ] Test : `cd ios && pod install` --- ## 📝 TODO - Étapes restantes ### 8. Compilation de test iOS - [ ] Sur Mac mini : Compiler en mode release : `flutter build ios --release --no-codesign` - [ ] VĂ©rifier l'absence d'erreurs de compilation - [ ] Corriger les Ă©ventuels problĂšmes ### 9. Configuration Xcode du projet #### 9.1 Ouvrir le projet dans Xcode ```bash open ios/Runner.xcworkspace ``` #### 9.2 Lier le fichier Runner.entitlements au projet **⚠ IMPORTANT** : Le fichier `Runner.entitlements` existe mais n'est **pas encore rĂ©fĂ©rencĂ©** dans le projet Xcode. **Action requise :** 1. Dans Xcode, sĂ©lectionner le target `Runner` 2. Onglet `Signing & Capabilities` 3. VĂ©rifier si `Runner.entitlements` est bien liĂ© 4. Si non liĂ© : - Aller dans `Build Settings` - Rechercher `CODE_SIGN_ENTITLEMENTS` - Ajouter : `Runner/Runner.entitlements` #### 9.3 Configurer les certificats de signature - [ ] SĂ©lectionner le Team : `6WT84NWCTC` - [ ] Choisir le profil de provisioning appropriĂ© - [ ] Mode : **Automatic Signing** ou **Manual Signing** selon prĂ©fĂ©rence - [ ] VĂ©rifier que le certificat est valide pour distribution App Store #### 9.4 VĂ©rifier les Capabilities Dans Xcode > Target Runner > Signing & Capabilities, vĂ©rifier : - [ ] **Near Field Communication Tag Reading** ✅ - [ ] **Tap to Pay on iPhone** ⚠ (nĂ©cessite approbation Apple spĂ©ciale) - [ ] Keychain Sharing (si nĂ©cessaire) **⚠ ATTENTION TAP TO PAY** : La capability "Tap to Pay on iPhone" nĂ©cessite une demande spĂ©ciale Ă  Apple via : - App Store Connect > votre app > Features - Ou contact direct avec Apple Developer Support - Documentation : https://developer.apple.com/tap-to-pay/ #### 9.5 VĂ©rifier la version et le build number - [ ] Version : `3.3.6` - [ ] Build : `336` - [ ] IncrĂ©menter si nĂ©cessaire pour mise Ă  jour ### 10. CrĂ©er l'archive pour l'App Store #### 10.1 Build de l'archive 1. Dans Xcode, menu `Product > Archive` 2. Attendre la fin de la compilation (~5-10 minutes) 3. VĂ©rifier qu'il n'y a pas d'erreurs #### 10.2 Valider l'archive 1. Organizer s'ouvre automatiquement aprĂšs l'archive 2. SĂ©lectionner l'archive créée 3. Cliquer sur `Validate App` 4. Choisir le bon certificat et profil de provisioning 5. Attendre la validation (~2-5 minutes) 6. Corriger les Ă©ventuels problĂšmes dĂ©tectĂ©s #### 10.3 Uploader vers App Store Connect 1. Dans Organizer, cliquer sur `Distribute App` 2. SĂ©lectionner `App Store Connect` 3. Choisir `Upload` 4. SĂ©lectionner les options : - ✅ Upload your app's symbols (pour crashlytics) - ✅ Manage Version and Build Number (automatique) 5. Cliquer sur `Upload` 6. Attendre la fin de l'upload (~5-15 minutes selon connexion) ### 11. Configuration App Store Connect #### 11.1 AccĂ©der Ă  App Store Connect - [ ] Se connecter sur https://appstoreconnect.apple.com - [ ] SĂ©lectionner l'application GeoSector existante - [ ] CrĂ©er une nouvelle version `3.3.6` #### 11.2 MĂ©tadonnĂ©es de l'application - [ ] **Nom** : GeoSector - [ ] **Sous-titre** : Gestion de calendriers pompiers - [ ] **Description** : RĂ©diger la description complĂšte (highlights v3.3.6) - [ ] **Mots-clĂ©s** : pompiers, calendrier, secteur, distribution, GPS - [ ] **URL support** : VĂ©rifier/mettre Ă  jour - [ ] **URL marketing** : VĂ©rifier/mettre Ă  jour #### 11.3 Captures d'Ă©cran PrĂ©parer les captures pour : - [ ] iPhone 6.7" (iPhone 14 Pro Max, 15 Pro Max) - OBLIGATOIRE - [ ] iPhone 6.5" (iPhone 11 Pro Max, XS Max) - OBLIGATOIRE - [ ] iPad Pro 12.9" (3Ăšme gĂ©nĂ©ration) - Si support iPad - [ ] iPad Pro 12.9" (2Ăšme gĂ©nĂ©ration) - Si support iPad **RĂ©solutions requises :** - iPhone 6.7" : 1290 x 2796 pixels - iPhone 6.5" : 1242 x 2688 pixels - iPad Pro 12.9" : 2048 x 2732 pixels #### 11.4 Informations de version - [ ] **NouveautĂ©s de cette version** : RĂ©diger le changelog v3.3.6 - Architecture moderne sans Provider - Interface responsive optimisĂ©e - IntĂ©gration Stripe Connect V1 - PrĂ©paration Tap to Pay V2 - Performance amĂ©liorĂ©e - ConformitĂ© NIST SP 800-63B #### 11.5 Informations gĂ©nĂ©rales - [ ] **CatĂ©gorie principale** : ProductivitĂ© - [ ] **CatĂ©gorie secondaire** : Utilitaires - [ ] **Classification par Ăąge** : 4+ (probablement) - [ ] **Copyright** : VĂ©rifier/mettre Ă  jour #### 11.6 ConfidentialitĂ© et permissions DĂ©clarer l'utilisation des permissions : - [ ] **Localisation** : Enregistrement GPS des passages - [ ] **NFC** : Lecture tags secteurs (si utilisĂ©) - [ ] **Bluetooth** : Connexion terminaux paiement Stripe - [ ] **CamĂ©ra** : Scan cartes bancaires (Stripe) - [ ] **Photos** : Upload justificatifs passages - [ ] **RĂ©seau** : Synchronisation donnĂ©es #### 11.7 Informations de contact - [ ] **Nom** : Votre nom ou organisation - [ ] **Email** : Email de contact - [ ] **TĂ©lĂ©phone** : NumĂ©ro de contact - [ ] **URL politique de confidentialitĂ©** : OBLIGATOIRE ### 12. Soumission pour rĂ©vision #### 12.1 SĂ©lectionner le build - [ ] Dans App Store Connect, section `Build` - [ ] SĂ©lectionner le build `3.3.6 (336)` uploadĂ© prĂ©cĂ©demment - [ ] Attendre que le build soit traitĂ© par Apple (~30-60 minutes) #### 12.2 RĂ©pondre aux questionnaires - [ ] **Utilise-t-elle le chiffrement ?** : Probablement OUI (HTTPS) - Si OUI, dĂ©clarer l'utilisation de HTTPS standard (exempt) - [ ] **Utilise-t-elle des identifiants publicitaires ?** : Probablement NON - [ ] **Contient-elle de la publicitĂ© tierce ?** : NON #### 12.3 Stripe Tap to Pay - DĂ©claration spĂ©ciale ⚠ **IMPORTANT** : Avant de soumettre, vĂ©rifier : - [ ] Demande d'accĂšs Tap to Pay on iPhone soumise Ă  Apple - [ ] Compte Stripe Connect configurĂ© et approuvĂ© - [ ] Tester la fonctionnalitĂ© sur un appareil physique compatible - [ ] Documenter le flux de paiement pour les reviewers Apple #### 12.4 Notes pour la rĂ©vision (Review Notes) RĂ©diger des notes claires pour les reviewers Apple : ``` Application de gestion de distribution de calendriers pour amicales de pompiers. COMPTES DE TEST : - Email : test@geosector.fr - Mot de passe : [Ă  fournir] - RĂŽle : Membre (RĂŽle 1) - Email : admin@geosector.fr - Mot de passe : [Ă  fournir] - RĂŽle : Admin Amicale (RĂŽle 2) FONCTIONNALITÉS PRINCIPALES : 1. GĂ©olocalisation GPS pour tracking des passages 2. NFC pour lecture des tags secteurs (optionnel) 3. Stripe Connect pour paiements des amicales (V1 - web uniquement) 4. Tap to Pay sur iPhone (V2 - en dĂ©veloppement, pas encore actif) NOTE IMPORTANTE : La fonctionnalitĂ© "Tap to Pay on iPhone" est prĂ©sente dans les entitlements mais pas encore activĂ©e dans cette version. Elle sera activĂ©e dans une mise Ă  jour ultĂ©rieure aprĂšs approbation Apple. SERVEUR : - Environnement de production : https://api.geosector.fr - API REST avec authentification JWT ``` #### 12.5 Soumettre pour rĂ©vision - [ ] VĂ©rifier que toutes les informations sont complĂštes - [ ] Cliquer sur `Soumettre pour rĂ©vision` - [ ] Confirmer la soumission --- ## 📊 Temps estimĂ©s | Étape | DurĂ©e estimĂ©e | Statut | |-------|---------------|--------| | Validation Android build | 5-10 min | ⏳ En attente | | Transfert Mac mini | 10-20 min | ⏳ En attente | | Configuration Xcode | 15-30 min | ⏳ En attente | | Build + Archive | 10-15 min | ⏳ En attente | | Validation | 5-10 min | ⏳ En attente | | Upload App Store | 10-20 min | ⏳ En attente | | MĂ©tadonnĂ©es App Store | 30-60 min | ⏳ En attente | | Captures d'Ă©cran | 30-45 min | ⏳ En attente | | Soumission rĂ©vision | 10 min | ⏳ En attente | | **TOTAL** | **2h00 - 3h30** | | | RĂ©vision Apple | **1-3 jours** | ⏳ En attente | --- ## ⚠ Points d'attention ### 1. ⚠ CRITIQUE : Patch nfc_manager obligatoire - **⚠ REQUIS APRÈS CHAQUE `flutter pub get`** : ExĂ©cuter `./fix-nfc-manager.sh` - **Raison** : nfc_manager 3.3.0 manque la dĂ©claration `namespace` requise par Android Gradle Plugin 8+ - **Impact** : Build Android Ă©choue sans ce patch - **FonctionnalitĂ©** : **nfc_manager est OBLIGATOIRE** pour Stripe Tap to Pay on iPhone (ne pas dĂ©sactiver) - **Automatisation** : Script `fix-nfc-manager.sh` créé dans le dossier racine - **VĂ©rification** : Le script dĂ©tecte si le patch est dĂ©jĂ  appliquĂ© ### 2. Tap to Pay on iPhone - **Statut** : Entitlements prĂ©sents, mais nĂ©cessite approbation Apple - **Action** : Demander l'accĂšs via App Store Connect ou Developer Support - **Alternative** : DĂ©sactiver temporairement la capability si bloquante ### 3. Version deployment target - **Actuel** : iOS 15.4+ - **RecommandĂ©** : iOS 16.4+ (pour Tap to Pay) - **Action** : VĂ©rifier la compatibilitĂ© avec la base utilisateurs ### 4. Certificats de signature - **Important** : Utiliser un certificat de distribution App Store - **Renouvellement** : VĂ©rifier la date d'expiration ### 5. Politique de confidentialitĂ© - **Obligatoire** : URL valide et accessible - **Contenu** : Doit couvrir toutes les permissions demandĂ©es --- ## 🔗 Liens utiles - **Apple Developer** : https://developer.apple.com - **App Store Connect** : https://appstoreconnect.apple.com - **Stripe Tap to Pay** : https://stripe.com/docs/terminal/payments/setup-reader/tap-to-pay - **Apple Tap to Pay** : https://developer.apple.com/tap-to-pay/ - **Human Interface Guidelines** : https://developer.apple.com/design/human-interface-guidelines/ --- ## 📝 Notes de session ### Session du 05/10/2025 - Partie 1 (Configuration initiale) #### ✅ Étapes complĂ©tĂ©es - DĂ©but : Configuration initiale du projet - Flutter upgrade : 3.32.4 → 3.35.5 - Dart upgrade : 3.8.1 → 3.9.2 - Pods installĂ©s : 26 pods (incluant Stripe Terminal 4.6.1) - CFBundleName corrigĂ© : `GeoSector` - Installation iOS 18.5 : ✅ **TERMINÉE** - Analyse du code : 32 warnings (pas d'erreurs bloquantes) #### ❌ ProblĂšme rencontrĂ© lors de la compilation iOS **Erreur** : `'Flutter/Flutter.h' file not found` - Localisation : `/Users/pierre/.pub-cache/hosted/pub.dev/sensors_plus-3.1.0/ios/Classes/FPPSensorsPlusPlugin.h:4:8` - Cause probable : IncompatibilitĂ© de version `sensors_plus` 3.1.0 avec Flutter 3.35.5 - Tentatives effectuĂ©es : 1. ❌ `flutter clean` + rebuild 2. ❌ Suppression complĂšte Pods + rĂ©installation 3. ❌ `flutter pub get` + `pod install` #### 🔄 Solution en cours **DĂ©cision** : Mise Ă  jour complĂšte de tous les packages Flutter - Commande : `flutter pub upgrade` - Objectif : RĂ©soudre les incompatibilitĂ©s de versions - Packages concernĂ©s : 49 packages ont des versions plus rĂ©centes disponibles #### 📋 Prochaines Ă©tapes aprĂšs upgrade 1. ExĂ©cuter `flutter pub upgrade` 2. VĂ©rifier les changements de versions (notamment sensors_plus, package_info_plus, network_info_plus) 3. RĂ©installer les pods iOS : ```bash cd ios rm -rf Pods Podfile.lock pod install cd .. ``` 4. Nettoyer et rĂ©cupĂ©rer les dĂ©pendances : ```bash flutter clean flutter pub get ``` 5. Retenter la compilation : `flutter build ios --release --no-codesign` 6. Si succĂšs → Ouvrir dans Xcode pour configuration finale 7. Si Ă©chec → Analyser les nouvelles erreurs et ajuster --- ### Session du 11/10/2025 - RĂ©solution problĂšmes compilation iOS #### 🐛 ProblĂšme rencontrĂ© : Module Swift 'Flutter' non trouvĂ© **Erreurs principales** : - `No such module 'Flutter'` dans url_launcher_ios, sensors_plus - `'Flutter/Flutter.h' file not found` dans plusieurs plugins SwiftPM - Erreurs de linking avec architecture x86_64 **Cause identifiĂ©e** : Flutter 3.35.6 (trĂšs rĂ©cent, 3 jours) a des incompatibilitĂ©s avec les plugins utilisant la nouvelle architecture SwiftPM. #### ✅ Solutions appliquĂ©es ##### 1. CrĂ©ation du script `fix_flutter_headers.sh` Script automatique qui copie tous les headers Flutter (18 fichiers) dans les plugins problĂ©matiques : - **Plugins SwiftPM** : package_info_plus, network_info_plus, image_picker_ios, url_launcher_ios - **Plugins ancienne structure** : permission_handler_apple Localisation : `/Users/pierre/dev/geosector/app/ios/fix_flutter_headers.sh` Utilisation : `./fix_flutter_headers.sh` (Ă  exĂ©cuter aprĂšs chaque `pod install`) ##### 2. Modification du fichier `permission_handler_apple` Correction des imports avec angle brackets → guillemets : ```bash # Dans ~/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.7/ios/Classes/ sed -i '' 's|#import |#import "Flutter/Flutter.h"|g' PermissionManager.h PermissionHandlerPlugin.h ``` ##### 3. CrĂ©ation du module.modulemap Flutter Fichier créé : `/Users/pierre/dev/geosector/app/ios/Flutter/module.modulemap` ``` module Flutter { header "Flutter.h" header "FlutterAppDelegate.h" [... 18 headers au total ...] export * } ``` Headers Flutter copiĂ©s dans : `/Users/pierre/dev/geosector/app/ios/Flutter/` ##### 4. Downgrade Flutter : 3.35.6 → 3.35.5 **Date** : 11/10/2025 - 10h45 **Raison** : Flutter 3.35.6 (publiĂ© il y a 3 jours) a des bugs avec SwiftPM **Commande** : ```bash cd ~/dev/flutter git checkout 3.35.5 flutter --version ``` **RĂ©sultat** : - Flutter 3.35.5 (26 septembre 2025) - Dart 3.9.2 - DevTools 2.48.0 ##### 5. Nettoyage complet du projet ```bash cd /Users/pierre/dev/geosector/app flutter clean rm -rf ios/Pods ios/Podfile.lock ios/.symlinks build flutter pub get cd ios pod install ./fix_flutter_headers.sh ``` ##### 6. Configuration Podfile simplifiĂ©e Suppression de toutes les modifications complexes de chemins (HEADER_SEARCH_PATHS, SWIFT_INCLUDE_PATHS) qui causaient des problĂšmes de linking. **Podfile actuel** : Configuration minimale avec : - iOS Deployment Target : 15.4 (requis pour Stripe Tap to Pay) - Bitcode dĂ©sactivĂ© - User Script Sandboxing dĂ©sactivĂ© - Permissions de gĂ©olocalisation #### 📋 Workflow de compilation recommandĂ© **Pour simulateur** : 1. Ouvrir Xcode : `open ios/Runner.xcworkspace` 2. SĂ©lectionner destination : iPhone 16 (simulateur) 3. Product > Clean Build Folder (`Cmd+Shift+K`) 4. Product > Build (`Cmd+B`) **Pour Archive App Store** : 1. Destination : Any iOS Device (arm64) 2. Product > Clean Build Folder 3. Product > Archive #### ⚠ Points d'attention **Script fix_flutter_headers.sh** : - ✅ Doit ĂȘtre exĂ©cutĂ© aprĂšs CHAQUE `pod install` - ✅ Copie les headers dans `.pub-cache` (modifications temporaires) - ⚠ Si Flutter est mis Ă  jour, rĂ©exĂ©cuter le script **Versions critiques** : - Flutter : **3.35.5** (ne pas upgrader vers 3.35.6 pour l'instant) - Dart : **3.9.2** - Xcode : **16.4** - iOS Deployment Target : **15.4+** #### 🔧 Commandes utiles **VĂ©rifier version Flutter** : ```bash flutter --version ``` **RĂ©exĂ©cuter le fix des headers** : ```bash cd /Users/pierre/dev/geosector/app/ios ./fix_flutter_headers.sh ``` **Nettoyer et reconstruire** : ```bash flutter clean cd ios && pod install && ./fix_flutter_headers.sh ``` **Retourner Ă  Flutter 3.35.5 si nĂ©cessaire** : ```bash cd ~/dev/flutter git checkout 3.35.5 flutter doctor ``` --- ## 🔧 DOWNGRADE FLUTTER 3.24.5 LTS (11/10/2025 - 13:15) ### ProblĂšme identifiĂ© Flutter 3.35.x (3.35.5 et 3.35.6) prĂ©sente des incompatibilitĂ©s avec l'architecture SwiftPM des plugins iOS : - Erreurs `'Flutter/Flutter.h' file not found` - Erreurs `No such module 'Flutter'` en Swift - ProblĂšmes de compilation persistants malgrĂ© workarounds ### Solution appliquĂ©e **Downgrade vers Flutter 3.24.5 LTS** (Long Term Support) ### Packages modifiĂ©s pour compatibilitĂ© | Package | Version initiale | Version compatible | Raison | |---------|-----------------|-------------------|--------| | `flutter` | 3.35.5 | **3.24.5 LTS** | Version stable sans problĂšmes SwiftPM | | `dart` | 3.9.2 | **3.5.4** | Inclus avec Flutter 3.24.5 | | `flutter_stripe` | 12.0.2 | **11.5.0** | NĂ©cessite Dart 3.8+, downgrade requis | | `flutter_lints` | 6.0.0 | **5.0.0** | Dev only, compatible Dart 3.5.4 | | `nfc_manager` | 4.1.1 | **3.5.0** | Compatible Dart 3.5.4 | | `device_info_plus` | 12.1.0 | **11.3.0** | Compatible avec meta 1.15.0 | | `flutter_map` | 8.2.2 | **7.0.2** | Compatible Dart 3.5.4 | | `flutter_map_cache` | 2.0.0 | **1.5.1** | Compatible Dart 3.5.4 | | `syncfusion_flutter_charts` | 31.1.22 | **29.1.38** | Compatible Dart 3.5.4 | | `go_router` | 16.2.4 | **15.1.2** | Compatible Dart 3.5.4 | | `intl` | 0.20.2 | **0.19.0** | PinĂ© par Flutter SDK 3.24.5 | ### Impact fonctionnel ✅ **FonctionnalitĂ©s conservĂ©es** : - Tap to Pay on iPhone (mek_stripe_terminal 4.6.0 inchangĂ©) - PaymentSheets, Apple Pay, Google Pay - Stripe Connect V1 - SCA/PSD2 - Toutes les fonctionnalitĂ©s mĂ©tier ⚠ **FonctionnalitĂ©s perdues** : - Options avancĂ©es PaymentSheet ajoutĂ©es en flutter_stripe 12.x - Sofort payment (dĂ©prĂ©ciĂ© par Stripe) - FonctionnalitĂ©s NFC avancĂ©es de nfc_manager 4.x ### Commandes exĂ©cutĂ©es ```bash # Downgrade Flutter cd ~/dev/flutter git checkout 3.24.5 flutter --version # Nettoyer complĂštement flutter clean cd ios rm -rf Pods Podfile.lock .symlinks # RĂ©installer flutter pub get pod install ``` ### RĂ©sultat ✅ 74 packages downgraded ✅ 25 pods iOS installĂ©s avec succĂšs ✅ Aucune erreur de dĂ©pendances ✅ Configuration stable et testĂ©e --- ## 🔮 DIAGNOSTIC FINAL - PROBLÈME STRUCTUREL iOS (11/10/2025 - 18:00) ### 📊 SynthĂšse du problĂšme persistant AprĂšs **5 tentatives** avec diffĂ©rentes versions de Flutter, **les mĂȘmes erreurs persistent** : - `'Flutter/Flutter.h' file not found` - Affectant : `network_info_plus`, `package_info_plus`, `sensors_plus` - **5 erreurs** systĂ©matiques dans Xcode ### 🎯 Explication technique du conflit Flutter / Packages / Xcode #### **1. L'origine : Transition SwiftPM (Swift Package Manager)** À partir de 2024, Flutter a introduit une **nouvelle architecture iOS** : | Architecture | PĂ©riode | Gestion dĂ©pendances | Structure | |--------------|---------|---------------------|-----------| | **Ancienne** | < 2024 | CocoaPods uniquement | Headers `.h` dans `/ios/Classes/` | | **Nouvelle** | > 2024 | SwiftPM + CocoaPods | Modules Swift dans `/Sources/` | #### **2. Le triangle d'incompatibilitĂ©** ``` ┌─────────────────────────────────────────────────────────────┐ │ │ │ Flutter 3.24.5 LTS Flutter 3.27.2-3.35.x │ │ (Dart 3.5.4) (Dart 3.6.1-3.9.2) │ │ ↓ ↓ │ │ ✅ Stable ancien ⚠ Transition SwiftPM │ │ ❌ Headers obsolĂštes 🐛 Bugs non rĂ©solus │ │ ↓ ↓ │ │ Incompatible avec Incompatible avec │ │ plugins rĂ©cents plugins anciens │ │ ↓ ↓ │ │ ❌ ÉCHEC ❌ ÉCHEC │ └─────────────────────────────────────────────────────────────┘ ``` #### **3. Ce que nous avons testĂ© (TOUTES LES TENTATIVES ONT ÉCHOUÉ)** | # | Configuration testĂ©e | RĂ©sultat | Erreurs | |---|---------------------|----------|---------| | 1 | Flutter **3.35.6** + plugins rĂ©cents (8.x, 7.x) | ❌ ÉCHEC | `'Flutter/Flutter.h' file not found` | | 2 | Flutter **3.35.5** + plugins rĂ©cents | ❌ ÉCHEC | `No such module 'Flutter'` | | 3 | Flutter **3.27.2** + plugins rĂ©cents | ❌ ÉCHEC | `'Flutter/Flutter.h' file not found` | | 4 | Flutter **3.27.2** + plugins anciens (4.x, 3.x) | ❌ ÉCHEC | `'Flutter/Flutter.h' file not found` | | 5 | Flutter **3.24.5 LTS** + plugins anciens (4.2.0, 3.1.0) | ❌ ÉCHEC | `'Flutter/Flutter.h' file not found` ⚠ **ACTUEL** | **Temps investi** : ~6 heures de debug **Tentatives de workaround** : - ✅ Script `fix_flutter_headers.sh` créé - ✅ Modification manuelle des imports Objective-C - ✅ CrĂ©ation de `module.modulemap` - ✅ Downgrades massifs de packages (geolocator 14→9, package_info 8→4, etc.) - ❌ **AUCUNE SOLUTION N'A FONCTIONNÉ** #### **4. La cause racine** **Le problĂšme fondamental** : Les plugins anciens (3.1.0, 4.2.0, 4.1.0) ont une **structure Objective-C** qui importe : ```objc #import ``` Cette structure ne fonctionne **DANS AUCUNE VERSION** de Flutter testĂ©e : - ❌ **Flutter 3.24.5** : Trop ancien, ne gĂšre pas correctement les imports modulaires modernes - ❌ **Flutter 3.27.2** : En transition, incompatible avec ancienne ET nouvelle structure - ❌ **Flutter 3.35.x** : Bugs SwiftPM documentĂ©s, headers mal exposĂ©s #### **5. Le dilemme sans solution immĂ©diate** | Si on utilise... | ProblĂšme rencontrĂ© | |------------------|-------------------| | **Flutter 3.24.5 LTS** | Headers `Flutter/Flutter.h` non accessibles, mĂȘme avec vieux plugins | | **Flutter 3.27.2-3.35.x** | Architecture SwiftPM instable, bugs dans le SDK | | **Plugins rĂ©cents (7.x, 8.x)** | NĂ©cessitent SwiftPM fonctionnel (Flutter 3.36+) | | **Plugins anciens (3.x, 4.x)** | Incompatibles avec toutes les versions Flutter testĂ©es | ### 💡 Solutions envisageables (non testĂ©es) #### **Option A : Retour aux plugins ENCORE PLUS anciens (prĂ©-2023)** - Tenter des versions **2.x** des plugins (avant refonte headers) - **Risque** : FonctionnalitĂ©s manquantes, bugs de sĂ©curitĂ© - **Effort** : 2-3h de tests #### **Option B : Forcer CocoaPods pur (dĂ©sactiver SwiftPM complĂštement)** ```bash # Dans ios/.flutter-plugins-dependencies "swift_package_manager_enabled": true → false ``` - Modifier les Podfiles pour ignorer SwiftPM - **Risque** : Peut casser d'autres plugins (Stripe, NFC) - **Effort** : 3-4h de configuration #### **Option C : Patcher manuellement les headers de TOUS les plugins** - Réécrire les imports dans les 3 plugins problĂ©matiques - CrĂ©er des copies locales des plugins dans le projet - **Risque** : Maintenance difficile, fragile aux mises Ă  jour - **Effort** : 4-6h de dev + tests #### **Option D : Attendre Flutter 3.28+ LTS (recommandĂ© mais long)** - Flutter 3.28 devrait stabiliser SwiftPM - **Date estimĂ©e de sortie** : Q1-Q2 2026 - **Avantage** : Solution officielle et stable - **InconvĂ©nient** : DĂ©lai de 3-6 mois #### **Option E : Migrer vers React Native ou autre framework** - Abandon temporaire de Flutter pour iOS - **Effort** : 2-3 semaines de réécriture - **Avantage** : ÉcosystĂšme plus mature pour iOS - **InconvĂ©nient** : Perte de l'investissement Flutter ### 📋 État actuel du projet **Configuration actuelle (stable mais non compilable)** : - ✅ Flutter 3.24.5 LTS + Dart 3.5.4 - ✅ 199 packages installĂ©s sans conflit - ✅ 25 Pods iOS installĂ©s sans erreur - ❌ **Compilation iOS impossible** : 5 erreurs persistantes **Packages downgradĂ©s appliquĂ©s** : - `geolocator`: 14.0.2 → 9.0.2 - `package_info_plus`: 8.3.1 → 4.2.0 ⚠ **TOUJOURS EN ERREUR** - `network_info_plus`: 7.0.0 → 4.1.0 ⚠ **TOUJOURS EN ERREUR** - `sensors_plus`: 7.0.0 → 3.1.0 ⚠ **TOUJOURS EN ERREUR** - `image_picker`: 1.1.2 → 0.8.9 ### ⚠ Recommandations #### **Court terme (1-2 jours)** 1. ✅ **Tester Option B** (dĂ©sactiver SwiftPM) - Effort moyen, espoir raisonnable 2. ⏞ Contacter le support Flutter sur GitHub Issues 3. ⏞ Chercher des forks communautaires des plugins problĂ©matiques #### **Moyen terme (1-2 semaines)** 1. ⏞ Envisager Option C (patches manuels) si Option B Ă©choue 2. ⏞ Surveiller les releases Flutter 3.28 beta 3. ⏞ PrĂ©parer un plan de migration React Native si nĂ©cessaire #### **Long terme (3+ mois)** 1. ⏞ Attendre Flutter 3.28+ LTS avec SwiftPM stable 2. ⏞ Migrer vers les derniĂšres versions des plugins 3. ⏞ Refactorer le code pour profiter des nouvelles APIs ### 🔗 Ressources et rĂ©fĂ©rences - **Flutter SwiftPM Issue** : https://github.com/flutter/flutter/issues/137945 - **Flutter 3.24.5 Release Notes** : https://github.com/flutter/flutter/releases/tag/3.24.5 - **Package downgrades documentation** : `/Users/pierre/dev/geosector/app/MIGRATION_FLUTTER_3.24.5.md` --- **DerniĂšre mise Ă  jour** : 11/10/2025 - 18:00 **Statut actuel** : ❌ **BLOQUÉ - Compilation iOS impossible avec toutes les versions Flutter testĂ©es** **Prochaine Ă©tape recommandĂ©e** : Tester Option B (dĂ©sactiver SwiftPM complĂštement) ou attendre retour communautĂ© Flutter --- ### Session du 15/10/2025 - IntĂ©gration du logo iOS (Build 338) #### ✅ Objectif IntĂ©grer le nouveau logo GEOSECTOR dans l'application iOS pour distribution TestFlight. #### 🐛 ProblĂšme rencontrĂ© **SymptĂŽme** : Logo affichĂ© en carrĂ© noir dans Xcode et sur l'appareil **Cause** : - Logo source en format RGBA (avec transparence) - iOS interprĂšte le fond transparent comme noir - flutter_launcher_icons gĂ©nĂ©rait des icĂŽnes noirs lors du redimensionnement #### ✅ Solution appliquĂ©e ##### 1. Conversion du logo avec ImageMagick ```bash magick assets/images/logo-geosector-1024.png \ -background white -alpha remove -alpha off \ -resize 1024x1024 \ assets/images/icons/icon-1024.png ``` **RĂ©sultat** : PNG RGB 1024x1024 avec fond blanc (pas de transparence) ##### 2. GĂ©nĂ©ration manuelle des 21 icĂŽnes iOS Abandon de flutter_launcher_icons au profit d'ImageMagick pour gĂ©nĂ©rer manuellement chaque taille : - 20x20@1x,2x,3x - 29x29@1x,2x,3x - 40x40@1x,2x,3x - 50x50@1x,2x - 57x57@1x,2x - 60x60@2x,3x - 72x72@1x,2x - 76x76@1x,2x - 83.5x83.5@2x - 1024x1024@1x (App Store) **Commande type** : ```bash magick assets/images/logo-geosector-1024.png \ -background white -alpha remove -alpha off \ -resize 60x60 \ ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png ``` ##### 3. Nettoyage complet du cache Xcode ```bash rm -rf ~/Library/Developer/Xcode/DerivedData/* rm -rf build/ios ``` ##### 4. Compilation et crĂ©ation de l'archive ```bash flutter build ios --release --no-codesign # DurĂ©e : 47.9s # Taille : 107.6 MB # Puis dans Xcode : # Product > Clean Build Folder # Product > Archive ``` #### 📊 RĂ©sultats | MĂ©trique | Valeur | |----------|--------| | **Version** | 3.3.6 | | **Build uploadĂ©** | 338 ✅ | | **Builds prĂ©cĂ©dents** | 336, 337 (tests logo) | | **Plateforme** | TestFlight | | **Logo** | ✅ AffichĂ© correctement | | **Taille app** | 107.6 MB | | **Temps compilation** | 47.9s | #### 📝 Fichiers modifiĂ©s ``` assets/images/icons/ ├── icon-1024.png ← Converti RGB fond blanc └── icon-1024-old.png ← Backup ancien logo ios/Runner/Assets.xcassets/AppIcon.appiconset/ ├── Icon-App-1024x1024@1x.png ← RĂ©gĂ©nĂ©rĂ© manuellement ├── Icon-App-20x20@1x.png ← RĂ©gĂ©nĂ©rĂ© manuellement ├── Icon-App-20x20@2x.png ← RĂ©gĂ©nĂ©rĂ© manuellement ├── Icon-App-20x20@3x.png ← RĂ©gĂ©nĂ©rĂ© manuellement └── ... (18 autres icĂŽnes) ← Tous rĂ©gĂ©nĂ©rĂ©s ``` #### ⚠ Points d'attention 1. **flutter_launcher_icons ne fonctionne pas** avec ce logo - GĂ©nĂšre des icĂŽnes complĂštement noirs - NĂ©cessite gĂ©nĂ©ration manuelle avec ImageMagick 2. **Format requis pour iOS** : - RGB uniquement (pas de canal alpha) - Fond blanc obligatoire - RĂ©solution exacte pour chaque taille 3. **Cache Xcode** : - Nettoyer systĂ©matiquement `DerivedData/` - Clean Build Folder avant Archive 4. **Versioning TestFlight** : - MĂȘme version 3.3.6 autorisĂ©e - Build number incrĂ©mentĂ© : 336 → 337 → 338 - Pas besoin de changer la version pour TestFlight #### 🚀 Prochaines Ă©tapes - [x] Logo intĂ©grĂ© avec succĂšs - [x] Build 338 uploadĂ© sur App Store Connect - [x] Archive validĂ©e dans Xcode - [ ] Tester l'app sur TestFlight - [ ] Inviter des testeurs internes - [ ] Valider l'affichage du logo sur diffĂ©rents appareils - [ ] PrĂ©parer la soumission App Store (si OK) #### 🔧 Script de rĂ©gĂ©nĂ©ration complĂšte (si besoin) Pour rĂ©gĂ©nĂ©rer tous les icĂŽnes Ă  l'avenir : ```bash #!/bin/bash # regenerate-ios-icons.sh SOURCE="assets/images/logo-geosector-1024.png" DEST="ios/Runner/Assets.xcassets/AppIcon.appiconset" magick "$SOURCE" -background white -alpha remove -alpha off -resize 1024x1024 "$DEST/Icon-App-1024x1024@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 20x20 "$DEST/Icon-App-20x20@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 40x40 "$DEST/Icon-App-20x20@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 60x60 "$DEST/Icon-App-20x20@3x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 29x29 "$DEST/Icon-App-29x29@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 58x58 "$DEST/Icon-App-29x29@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 87x87 "$DEST/Icon-App-29x29@3x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 40x40 "$DEST/Icon-App-40x40@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 80x80 "$DEST/Icon-App-40x40@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 120x120 "$DEST/Icon-App-40x40@3x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 50x50 "$DEST/Icon-App-50x50@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 100x100 "$DEST/Icon-App-50x50@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 57x57 "$DEST/Icon-App-57x57@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 114x114 "$DEST/Icon-App-57x57@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 120x120 "$DEST/Icon-App-60x60@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 180x180 "$DEST/Icon-App-60x60@3x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 72x72 "$DEST/Icon-App-72x72@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 144x144 "$DEST/Icon-App-72x72@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 76x76 "$DEST/Icon-App-76x76@1x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 152x152 "$DEST/Icon-App-76x76@2x.png" magick "$SOURCE" -background white -alpha remove -alpha off -resize 167x167 "$DEST/Icon-App-83.5x83.5@2x.png" echo "✅ 21 icĂŽnes iOS rĂ©gĂ©nĂ©rĂ©s avec succĂšs" ``` --- **DerniĂšre mise Ă  jour** : 15/10/2025 - 10:00 **Statut** : ✅ **Build 338 uploadĂ© avec logo correct** **Prochaine Ă©tape** : Tests TestFlight