- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD) * DEV: Clés TEST Pierre (mode test) * REC: Clés TEST Client (mode test) * PROD: Clés LIVE Client (mode live) - Ajout de la gestion des bases de données immeubles/bâtiments * Configuration buildings_database pour DEV/REC/PROD * Service BuildingService pour enrichissement des adresses - Optimisations pages et améliorations ergonomie - Mises à jour des dépendances Composer - Nettoyage des fichiers obsolètes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
35 KiB
📱 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
- Flutter downgrade vers 3.24.5 LTS (11/10/2025 sur Debian, 13/10/2025 corrections)
- Dart SDK downgrade vers 3.5.4
- Packages ajustés pour compatibilité Flutter 3.24.5 (voir détails ci-dessous)
flutter cleanexécutéflutter pub getexécuté avec succès- CocoaPods mis à jour (1.16.2)
pod installexé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 sanswithValues()nimarkNeedsBuild())geolocator: 14.0.2 → 13.0.3 (sanstoARGB32())geolocator_android: forcé à 4.6.1battery_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 :
# 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
namespacedans 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
- CFBundleName corrigé :
geosector_app→GeoSector - Bundle Identifier vérifié :
fr.geosector.app3✅ - Team ID configurée :
6WT84NWCTC✅ - 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
- Fichier
Runner.entitlementscréé avec :- ✅ NFC Tag Reading (NDEF, TAG)
- ✅ Stripe Terminal - Tap to Pay on iPhone
- ✅ Network Access
- ✅ Keychain Sharing
- 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
flutter analyzeexé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.shcréé et prêt - Test final
./android.shrequis
- ⏳ 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 getsur 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
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 :
- Dans Xcode, sélectionner le target
Runner - Onglet
Signing & Capabilities - Vérifier si
Runner.entitlementsest bien lié - Si non lié :
- Aller dans
Build Settings - Rechercher
CODE_SIGN_ENTITLEMENTS - Ajouter :
Runner/Runner.entitlements
- Aller dans
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
- Dans Xcode, menu
Product > Archive - Attendre la fin de la compilation (~5-10 minutes)
- Vérifier qu'il n'y a pas d'erreurs
10.2 Valider l'archive
- Organizer s'ouvre automatiquement après l'archive
- Sélectionner l'archive créée
- Cliquer sur
Validate App - Choisir le bon certificat et profil de provisioning
- Attendre la validation (~2-5 minutes)
- Corriger les éventuels problèmes détectés
10.3 Uploader vers App Store Connect
- Dans Organizer, cliquer sur
Distribute App - Sélectionner
App Store Connect - Choisir
Upload - Sélectionner les options :
- ✅ Upload your app's symbols (pour crashlytics)
- ✅ Manage Version and Build Number (automatique)
- Cliquer sur
Upload - 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
namespacerequise 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.shcréé 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_plus3.1.0 avec Flutter 3.35.5 - Tentatives effectuées :
- ❌
flutter clean+ rebuild - ❌ Suppression complète Pods + réinstallation
- ❌
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
- Exécuter
flutter pub upgrade - Vérifier les changements de versions (notamment sensors_plus, package_info_plus, network_info_plus)
- Réinstaller les pods iOS :
cd ios rm -rf Pods Podfile.lock pod install cd .. - Nettoyer et récupérer les dépendances :
flutter clean flutter pub get - Retenter la compilation :
flutter build ios --release --no-codesign - Si succès → Ouvrir dans Xcode pour configuration finale
- 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 founddans 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 :
# Dans ~/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.7/ios/Classes/
sed -i '' 's|#import <Flutter/Flutter.h>|#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 :
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
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 :
- Ouvrir Xcode :
open ios/Runner.xcworkspace - Sélectionner destination : iPhone 16 (simulateur)
- Product > Clean Build Folder (
Cmd+Shift+K) - Product > Build (
Cmd+B)
Pour Archive App Store :
- Destination : Any iOS Device (arm64)
- Product > Clean Build Folder
- 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 :
flutter --version
Réexécuter le fix des headers :
cd /Users/pierre/dev/geosector/app/ios
./fix_flutter_headers.sh
Nettoyer et reconstruire :
flutter clean
cd ios && pod install && ./fix_flutter_headers.sh
Retourner à Flutter 3.35.5 si nécessaire :
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
# 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.shcréé - ✅ 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 :
#import <Flutter/Flutter.h>
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)
# 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.2package_info_plus: 8.3.1 → 4.2.0 ⚠️ TOUJOURS EN ERREURnetwork_info_plus: 7.0.0 → 4.1.0 ⚠️ TOUJOURS EN ERREURsensors_plus: 7.0.0 → 3.1.0 ⚠️ TOUJOURS EN ERREURimage_picker: 1.1.2 → 0.8.9
⚠️ Recommandations
Court terme (1-2 jours)
- ✅ Tester Option B (désactiver SwiftPM) - Effort moyen, espoir raisonnable
- ⏸️ Contacter le support Flutter sur GitHub Issues
- ⏸️ Chercher des forks communautaires des plugins problématiques
Moyen terme (1-2 semaines)
- ⏸️ Envisager Option C (patches manuels) si Option B échoue
- ⏸️ Surveiller les releases Flutter 3.28 beta
- ⏸️ Préparer un plan de migration React Native si nécessaire
Long terme (3+ mois)
- ⏸️ Attendre Flutter 3.28+ LTS avec SwiftPM stable
- ⏸️ Migrer vers les dernières versions des plugins
- ⏸️ 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
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 :
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
rm -rf ~/Library/Developer/Xcode/DerivedData/*
rm -rf build/ios
4. Compilation et création de l'archive
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
-
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
-
Format requis pour iOS :
- RGB uniquement (pas de canal alpha)
- Fond blanc obligatoire
- Résolution exacte pour chaque taille
-
Cache Xcode :
- Nettoyer systématiquement
DerivedData/ - Clean Build Folder avant Archive
- Nettoyer systématiquement
-
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
- Logo intégré avec succès
- Build 338 uploadé sur App Store Connect
- 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 :
#!/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