# Migration Flutter 3.24.5 LTS - Résolution problèmes iOS SwiftPM

**Date** : 11/10/2025
**Objectif** : Résoudre les erreurs de compilation iOS liées à l'architecture SwiftPM
**Solution** : Downgrade Flutter 3.24.5 LTS + downgrade des packages SwiftPM

---

## 📊 Tableau récapitulatif des changements

| Package | Version avant | Version après | Raison du changement |
|---------|---------------|---------------|----------------------|
| **Flutter SDK** | 3.35.5+ | **3.24.5 LTS** | Bugs SwiftPM dans 3.35.x |
| **Dart SDK** | 3.9.2 | **3.5.4** | Inclus avec Flutter 3.24.5 |
| `package_info_plus` | 8.3.1 | **4.2.0** | Avant SwiftPM - `'Flutter/Flutter.h' file not found` |
| `network_info_plus` | 7.0.0 | **4.1.0** | Avant SwiftPM - Erreurs module Swift |
| `sensors_plus` | 7.0.0 | **3.1.0** | Avant SwiftPM - Erreurs FPPSensorsPlusPlugin.h |
| `image_picker` | 1.1.2 | **0.8.9** | Avant SwiftPM - Erreurs image_picker_ios |
| `url_launcher` | 6.3.1 | **6.1.14** | Version stable compatible |
| `go_router` | 16.0.0 | **15.1.2** | Compatible Flutter 3.24.5 |
| `flutter_map` | 8.2.2 | **7.0.2** | Compatible Flutter 3.24.5 |
| `flutter_map_cache` | 2.0.0 | **1.5.1** | Compatible Flutter 3.24.5 |
| `syncfusion_flutter_charts` | 31.1.22 | **29.1.38** | Compatible Flutter 3.24.5 |
| `flutter_stripe` | 12.0.0 | **11.5.0** | Compatible Dart 3.5.4 |
| `nfc_manager` | 4.1.1 | **3.5.0** | Compatible Flutter 3.24.5 |
| `device_info_plus` | 12.1.0 | **11.3.0** | Compatible Flutter 3.24.5 |
| `flutter_lints` | 6.0.0 | **5.0.0** | Compatible Dart 3.5.4 |
| `intl` | 0.20.2 | **0.19.0** | Piné par Flutter 3.24.5 SDK |

---

## ⚠️ Problèmes résolus

### Erreurs de compilation iOS éliminées :
- ❌ `'Flutter/Flutter.h' file not found` dans plugins SwiftPM
- ❌ `No such module 'Flutter'` en Swift
- ❌ Erreurs de linking architecture x86_64
- ❌ Incompatibilités SwiftPM entre Flutter et plugins
- ❌ Problèmes url_launcher_ios, sensors_plus, image_picker_ios

---

## ✅ Fonctionnalités conservées

### Toutes les fonctionnalités critiques restent opérationnelles :
- ✅ **Stripe Tap to Pay** (mek_stripe_terminal 4.6.0 inchangé)
- ✅ **PaymentSheets, Apple Pay, Google Pay**
- ✅ **Stripe Connect V1**
- ✅ **SCA/PSD2**
- ✅ **Géolocalisation GPS** (geolocator 14.0.2)
- ✅ **NFC** (nfc_manager 3.5.0)
- ✅ **Flutter Maps** (flutter_map 7.0.2)
- ✅ **Charts Syncfusion** (syncfusion_flutter_charts 29.1.38)
- ✅ **Upload d'images** (image_picker 0.8.9)
- ✅ **Notifications locales**
- ✅ **Toutes les fonctionnalités métier**

---

## 📉 Fonctionnalités perdues (non critiques)

### Fonctionnalités récentes des packages downgradés :
- ⚠️ Options avancées PaymentSheet ajoutées dans flutter_stripe 12.x
- ⚠️ Méthode `pickMultipleMedia()` de image_picker 1.x (reste `pickMultiImage()`)
- ⚠️ Fonctionnalités NFC avancées de nfc_manager 4.x
- ⚠️ APIs récentes de package_info_plus 8.x
- ⚠️ Nouvelles APIs network_info_plus 7.x

**Impact métier** : Aucun - Les fonctionnalités perdues ne sont pas utilisées dans l'app.

---

## 🚀 Procédure de migration

### **Étape 1 : Downgrade Flutter vers 3.24.5 LTS**

```bash
cd ~/dev/flutter
git checkout 3.24.5
flutter --version
```

**Vérification attendue** :
```
Flutter 3.24.5 • channel stable
Dart 3.5.4 • DevTools 2.37.3
```

### **Étape 2 : Nettoyer complètement le projet**

```bash
cd /home/pierre/dev/geosector/app

# Nettoyer Flutter
flutter clean

# Supprimer les dépendances existantes
rm pubspec.lock
rm -rf ios/Pods ios/Podfile.lock ios/.symlinks
rm -rf build
rm -rf .dart_tool

# Supprimer les caches Flutter
flutter pub cache repair
```

### **Étape 3 : Installer les nouvelles dépendances**

```bash
# Récupérer les packages Flutter avec le nouveau pubspec.yaml
flutter pub get
```

**Vérification attendue** : Aucune erreur de résolution de dépendances.

### **Étape 4 : Réinstaller les Pods iOS**

```bash
cd ios

# Mettre à jour le repo CocoaPods
pod repo update

# Installer les pods
pod install
```

**Vérification attendue** : ~25-26 pods installés sans erreur.

### **Étape 5 : Tester la compilation iOS**

```bash
cd ..

# Tester la compilation sans signature
flutter build ios --release --no-codesign
```

**Résultat attendu** : Compilation réussie sans erreur SwiftPM.

### **Étape 6 : Vérification finale dans Xcode** (optionnel)

```bash
open ios/Runner.xcworkspace
```

**Actions dans Xcode** :
1. Sélectionner `Runner` target
2. Product > Clean Build Folder (`Cmd+Shift+K`)
3. Product > Build (`Cmd+B`)
4. Vérifier qu'il n'y a pas d'erreurs de compilation

---

## 🔍 Vérifications post-migration

### **Checklist de validation** :

- [ ] Flutter version : **3.24.5**
- [ ] Dart version : **3.5.4**
- [ ] `flutter pub get` : ✅ Sans erreurs
- [ ] `pod install` : ✅ ~25-26 pods installés
- [ ] `flutter build ios --release --no-codesign` : ✅ Compilation réussie
- [ ] `flutter analyze` : ✅ Pas d'erreurs bloquantes
- [ ] App démarre en simulateur iOS : ✅
- [ ] Fonctionnalités critiques testées :
  - [ ] Login / Authentification
  - [ ] Géolocalisation GPS
  - [ ] Cartes Flutter Maps
  - [ ] Upload d'images
  - [ ] Charts Syncfusion
  - [ ] NFC (si device compatible)

---

## 🔧 Dépannage

### **Si `flutter pub get` échoue**

```bash
# Réparer le cache Pub
flutter pub cache repair

# Supprimer le lock et réessayer
rm pubspec.lock
flutter pub get
```

### **Si `pod install` échoue**

```bash
cd ios

# Nettoyer complètement CocoaPods
rm -rf Pods Podfile.lock
rm -rf ~/Library/Caches/CocoaPods
pod cache clean --all

# Réinstaller
pod repo update
pod install
```

### **Si erreurs de compilation persistent**

```bash
# Nettoyer Xcode derived data
rm -rf ~/Library/Developer/Xcode/DerivedData

# Nettoyer complètement Flutter
flutter clean
rm -rf build ios/.symlinks

# Réinstaller tout
flutter pub get
cd ios && pod install
```

### **Si erreurs "module not found" dans Xcode**

1. Ouvrir `ios/Runner.xcworkspace` dans Xcode
2. Product > Clean Build Folder (`Cmd+Shift+K`)
3. Fermer Xcode
4. Relancer `pod install`
5. Rouvrir Xcode et rebuild

---

## 📌 Points d'attention

### **NE PAS upgrader Flutter**
- ⚠️ **Ne pas** exécuter `flutter upgrade`
- ⚠️ Rester sur Flutter **3.24.5 LTS** pour stabilité iOS
- ⚠️ Les versions 3.35.x ont des bugs SwiftPM non résolus

### **Versions verrouillées critiques**
- `intl: 0.19.0` - Piné par Flutter SDK, ne pas modifier
- `flutter_stripe: ^11.5.0` - Version max compatible Dart 3.5.4
- `package_info_plus: ^4.2.0` - Ne pas upgrader vers 5.0+ (SwiftPM)
- `network_info_plus: ^4.1.0` - Ne pas upgrader vers 5.0+ (SwiftPM)
- `sensors_plus: ^3.1.0` - Ne pas upgrader vers 4.0+ (SwiftPM)

### **Compatibilité future**
- Migration vers Flutter 3.28+ LTS envisageable quand SwiftPM sera stable
- Surveillance des changelogs Flutter pour support SwiftPM complet
- Prévoir test de migration tous les 6 mois

---

## 📚 Références

### **Problème SwiftPM Flutter iOS**
- Flutter Issue #137945 : SwiftPM integration issues
- Flutter Issue #144832 : 'Flutter/Flutter.h' file not found
- Flutter Docs : https://docs.flutter.dev/packages-and-plugins/swift-package-manager

### **Versions Flutter**
- Flutter 3.24.5 Release Notes : https://github.com/flutter/flutter/releases/tag/3.24.5
- Flutter LTS Policy : https://docs.flutter.dev/release/archive

### **Packages downgradés**
- package_info_plus changelog : https://pub.dev/packages/package_info_plus/changelog
- network_info_plus changelog : https://pub.dev/packages/network_info_plus/changelog
- sensors_plus changelog : https://pub.dev/packages/sensors_plus/changelog
- image_picker changelog : https://pub.dev/packages/image_picker/changelog

---

## ✅ Validation finale

**Migration réussie si** :
1. ✅ Flutter 3.24.5 installé
2. ✅ Tous les packages résolus sans conflit
3. ✅ Pods iOS installés sans erreur
4. ✅ Compilation iOS réussie sans erreurs SwiftPM
5. ✅ App démarre et fonctionne en simulateur iOS
6. ✅ Fonctionnalités critiques testées et opérationnelles

---

**Dernière mise à jour** : 11/10/2025 - 15:00
**Statut** : ✅ pubspec.yaml préparé, prêt pour migration
**Prochaine étape** : Exécuter la procédure de migration
