# 📜 Scripts iOS - Guide d'utilisation

**Date de création** : 14/10/2025
**Objectif** : Automatiser les corrections nécessaires pour compiler l'application iOS

---

## 📂 Scripts disponibles

### 1. `fix-permission-handler.sh` ✅ **TESTÉ ET FONCTIONNEL**

**Problème corrigé** : Le package `permission_handler_apple-9.4.7` embarque ses propres headers Flutter qui créent des conflits de compilation.

**Actions effectuées** :
- ✅ Détecte automatiquement la version du package dans `.pub-cache`
- ✅ Supprime le dossier `/ios/Classes/Flutter/` embarqué
- ✅ Corrige les imports dans `PermissionHandlerPlugin.h`
- ✅ Corrige les imports dans `PermissionManager.h`

**Usage** :
```bash
./fix-permission-handler.sh
```

**Quand l'exécuter** :
- ✅ Après chaque `flutter pub get`
- ✅ Avant `pod install`
- ✅ Si erreurs de compilation `'FlutterAppDelegate' has different definitions`

**Sortie attendue** :
```
🔧 Fix permission_handler_apple - Correction des conflits Flutter headers

📦 Package trouvé : /Users/pierre/.pub-cache/.../permission_handler_apple-9.4.7

✅ Dossier Flutter supprimé
✅ PermissionHandlerPlugin.h corrigé
✅ PermissionManager.h corrigé

🎉 Correction terminée avec succès !
```

---

### 2. `fix-nfc-manager.sh` ⚠️ **PRÉSENT MAIS NON TESTÉ SUR MAC**

**Problème corrigé** : Le package `nfc_manager-3.3.0` manque la déclaration `namespace` requise par Android Gradle Plugin 8+.

**Note** : Ce script était fonctionnel sur Debian Linux. Sur Mac, il semble y avoir une erreur `sed` à corriger.

**Actions prévues** :
- Ajout du `namespace` dans `AndroidManifest.xml`
- Correction du fichier `build.gradle`
- Correction du fichier `Translator.kt`

**Statut** : ⚠️ À débugger si nécessaire (erreur sed détectée)

---

### 3. `fix-ios-packages.sh` (Script maître) ⚠️ **EN DÉVELOPPEMENT**

**Objectif** : Exécuter tous les scripts de correction iOS en une seule commande.

**Inclut** :
- `fix-nfc-manager.sh` (si corrigé)
- `fix-permission-handler.sh` ✅

**Statut actuel** : Fonctionne partiellement (erreur sed dans fix-nfc-manager.sh)

---

## 🚀 Workflow de build iOS complet

### Option A : Build iOS uniquement (recommandé actuellement)

```bash
# 1. Nettoyer
flutter clean

# 2. Récupérer les dépendances
flutter pub get

# 3. 🔧 Corriger permission_handler_apple
./fix-permission-handler.sh

# 4. Installer les pods
cd ios && pod install && cd ..

# 5. Compiler
flutter build ios --release --no-codesign
```

### Option B : Build complet (Web + Android + iOS)

**Android** :
```bash
# Le script fix-nfc-manager.sh devrait être exécuté ici
flutter build appbundle --release
```

**iOS** :
```bash
# Utiliser Option A ci-dessus
```

**Web** :
```bash
flutter build web --release
```

---

## ✅ Vérifications avant compilation iOS

### 1. Version Flutter correcte

```bash
flutter --version
# Attendu : Flutter 3.24.5 • channel [user-branch]
#          Dart 3.5.4 • DevTools 2.37.3
```

### 2. Fichiers de configuration régénérés

```bash
cat ios/Flutter/Generated.xcconfig | grep FLUTTER_ROOT
# Attendu : FLUTTER_ROOT=/Users/pierre/dev/flutter
```

### 3. Permission handler corrigé

```bash
ls ~/.pub-cache/hosted/pub.dev/permission_handler_apple-*/ios/Classes/Flutter/
# Attendu : ls: .../Flutter/: No such file or directory (= bon signe !)
```

### 4. Pods installés

```bash
cat ios/Podfile.lock | grep "permission_handler_apple"
# Attendu : - permission_handler_apple (9.3.0):
```

---

## 🐛 Dépannage

### Erreur : `'FlutterAppDelegate' has different definitions`

**Solution** : Exécuter `./fix-permission-handler.sh`

### Erreur : `Flutter/Flutter.h: No such file or directory`

**Causes possibles** :
1. Le script `fix-permission-handler.sh` n'a pas été exécuté
2. Les imports n'ont pas été corrigés correctement
3. Le cache build doit être nettoyé

**Solution** :
```bash
./fix-permission-handler.sh
rm -rf build/ios ios/Pods
cd ios && pod install && cd ..
flutter build ios --release --no-codesign
```

### Erreur : `Invalid Podfile file: cannot load such file -- podhelper`

**Cause** : Le fichier `ios/Flutter/Generated.xcconfig` contient de mauvais chemins (Linux au lieu de Mac).

**Solution** :
```bash
rm ios/Flutter/Generated.xcconfig
flutter pub get
```

### Build réussi mais warnings CocoaPods

**Warning** :
```
[!] CocoaPods did not set the base configuration of your project...
```

**Impact** : ⚠️ Non bloquant, la compilation fonctionne

**Solution** : (Optionnel) Configurer manuellement dans Xcode les fichiers de configuration CocoaPods

---

## 📝 Historique des corrections

### 14/10/2025 - Solution finale trouvée ✅

**Problème** : Compilation iOS impossible avec erreurs de conflits de définitions Flutter

**Cause identifiée** : `permission_handler_apple-9.4.7` embarquait ses propres headers Flutter

**Solution appliquée** :
1. ✅ Suppression du dossier `/ios/Classes/Flutter/` du package
2. ✅ Modification des imports : `"Flutter/Flutter.h"` → `<Flutter/Flutter.h>`
3. ✅ Création du script `fix-permission-handler.sh`

**Résultat** :
```
✓ Built build/ios/iphoneos/Runner.app (107.4MB)
Xcode build done. 59,1s
```

### 13/10/2025 - Suppression packages problématiques

**Packages supprimés** : `package_info_plus`, `network_info_plus`, `sensors_plus`

**Raison** : Erreurs `'Flutter/Flutter.h' file not found` persistantes

**Impact** : Perte de fonctionnalités mineures (mode boussole, diagnostic WiFi)

### 11/10/2025 - Downgrade vers Flutter 3.24.5 LTS

**Versions testées sans succès** :
- ❌ Flutter 3.35.6 (bugs SwiftPM)
- ❌ Flutter 3.35.5 (bugs SwiftPM)
- ❌ Flutter 3.27.2 (incompatibilités)

**Version retenue** : Flutter 3.24.5 LTS + Dart 3.5.4

---

## 🔗 Références

### Documentation

- `SOLUTION-IOS.md` - Guide complet de la solution finale
- `README-IOS.md` - Historique détaillé des tentatives
- `TRANSFERT-MAC.md` - Guide de transfert Linux → Mac

### Scripts

- `fix-permission-handler.sh` - ✅ Fonctionnel
- `fix-nfc-manager.sh` - ⚠️ À débugger (erreur sed)
- `fix-ios-packages.sh` - ⚠️ Dépend du fix nfc_manager

---

**Auteur** : Claude Code + Pierre
**Version** : 1.0.0
**Dernière mise à jour** : 14/10/2025 12:45

✅ **Le script `fix-permission-handler.sh` est prêt à l'emploi !**
