# 📜 Scripts de Build GEOSECTOR

**Version** : 3.3.6
**Date** : 14/10/2025

---

## 📦 Scripts disponibles

| Script | Plateforme | Description | Statut |
|--------|-----------|-------------|--------|
| `android.sh` | Android | Build bundle (.aab) + APK optionnel | ✅ Fonctionnel |
| `ios.sh` | iOS | Build + Archive Xcode complète | ✅ **NOUVEAU** |
| `fix-permission-handler.sh` | iOS | Patch package problématique | ✅ Testé |
| `fix-nfc-manager.sh` | Android | Patch namespace Android | ⚠️ À vérifier |
| `fix-ios-packages.sh` | iOS | Script maître (tous les patchs) | ⚠️ Dépend du fix nfc |
| `deploy-app.sh` | DEV | Déploiement sur dapp.geosector.fr | ✅ Existant |

---

## 🍎 Script iOS : `ios.sh`

### Fonctionnalités

Le script `ios.sh` automatise **TOUTE** la chaîne de build iOS :

1. ✅ **Vérifications préliminaires**
   - Vérification Flutter 3.24.5 LTS
   - Vérification CocoaPods
   - Vérification Xcode
   - Vérification que nous sommes sur macOS

2. ✅ **Nettoyage complet**
   - `flutter clean`
   - Suppression `ios/Pods`
   - Suppression `ios/Podfile.lock`
   - Suppression `ios/.symlinks`
   - Suppression `build/ios`

3. ✅ **Récupération des dépendances**
   - `flutter pub get`
   - Vérification des chemins Flutter (détection erreurs Linux)

4. ✅ **Patch permission_handler_apple**
   - Exécution automatique de `fix-permission-handler.sh`
   - Correction des conflits de headers Flutter

5. ✅ **Installation des pods**
   - `cd ios && pod install`
   - Vérification du workspace Xcode

6. ✅ **Analyse du code**
   - `flutter analyze` (non bloquant)
   - Possibilité de continuer malgré les warnings

7. ✅ **Compilation iOS**
   - `flutter build ios --release --no-codesign`
   - Affichage de la taille de l'app

8. ✅ **Archive Xcode (optionnel)**
   - Ouverture de Xcode
   - Instructions pas à pas
   - Attente de la fin de l'archive

### Usage

#### Build standard (avec archive Xcode)

```bash
./ios.sh
```

**Étapes** :
1. Exécute toutes les étapes automatiquement
2. Ouvre Xcode à la fin
3. Affiche les instructions pour créer l'archive
4. Attend que vous appuyiez sur Entrée après l'archive

**Durée estimée** : 5-10 minutes (hors archive Xcode)

#### Build rapide (sans archive)

```bash
./ios.sh --skip-archive
```

**Étapes** :
1. Exécute toutes les étapes jusqu'à la compilation
2. N'ouvre pas Xcode
3. Vous laisse créer l'archive manuellement plus tard

**Durée estimée** : 3-5 minutes

### Sorties du script

#### Succès

```
[INFO] =========================================
[SUCCESS]    BUILD iOS TERMINÉ AVEC SUCCÈS !
[INFO] =========================================

Version : 3.3.6 (336)
Bundle ID : fr.geosector.app3
Application : build/ios/iphoneos/Runner.app

Prochaines étapes (dans Xcode) :
1. ✅ Build iOS réussi
2. ⏳ Créer l'archive (Product > Archive)
3. ⏳ Valider l'archive (Organizer > Validate App)
4. ⏳ Upload vers App Store Connect
```

#### Erreur

```
[ERROR] Échec de la compilation iOS
[ERROR] Consultez les logs ci-dessus pour plus de détails
```

### Gestion des erreurs

Le script s'arrête automatiquement en cas d'erreur et affiche :
- La ligne de l'erreur
- Un message explicatif
- Les logs de la commande qui a échoué

---

## 🤖 Script Android : `android.sh`

### Fonctionnalités

1. ✅ Nettoyage du projet (`flutter clean`)
2. ✅ Récupération des dépendances (`flutter pub get`)
3. ✅ Patch nfc_manager automatique
4. ✅ Analyse du code Dart
5. ✅ Génération du bundle (.aab)
6. ✅ Copie du bundle avec nom versionné
7. ✅ Génération optionnelle de l'APK

### Usage

```bash
./android.sh
```

**Sortie** : `geosector-336.aab` (+ optionnel `geosector-336.apk`)

---

## 🔧 Scripts de correction

### `fix-permission-handler.sh` (iOS uniquement)

**Problème corrigé** : Conflits de headers Flutter dans `permission_handler_apple-9.4.7`

**Actions** :
1. Supprime `/ios/Classes/Flutter/` du package
2. Corrige les imports dans `PermissionHandlerPlugin.h`
3. Corrige les imports dans `PermissionManager.h`

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

**Quand l'utiliser** :
- Automatiquement via `ios.sh`
- Manuellement après `flutter pub get`
- Si erreur `'FlutterAppDelegate' has different definitions`

---

### `fix-nfc-manager.sh` (Android uniquement)

**Problème corrigé** : Namespace Android manquant dans `nfc_manager-3.3.0`

**Actions** :
1. Ajoute `namespace` dans `AndroidManifest.xml`
2. Corrige `build.gradle`
3. Corrige `Translator.kt`

**Usage** :
```bash
./fix-nfc-manager.sh
```

**Quand l'utiliser** :
- Automatiquement via `android.sh`
- Manuellement après `flutter pub get`
- Si erreur de compilation Android Gradle

**⚠️ Note** : Sur macOS, ce script peut avoir une erreur `sed`. À débugger si nécessaire.

---

## 🚀 Workflows recommandés

### Build iOS complet

```bash
# Option 1 : Tout automatique
./ios.sh

# Option 2 : Build sans archive
./ios.sh --skip-archive
# Puis plus tard :
open ios/Runner.xcworkspace
# Product > Archive dans Xcode
```

### Build Android complet

```bash
./android.sh
# Génère : geosector-336.aab
```

### Build Web

```bash
flutter build web --release
# Ou via deploy-app.sh pour DEV
```

### Build toutes les plateformes

```bash
# 1. Android
./android.sh

# 2. iOS
./ios.sh --skip-archive

# 3. Web
flutter build web --release
```

---

## 📋 Checklist avant build

### Avant `android.sh`

- [ ] Flutter version correcte
- [ ] Keystore présent : `android/app/geosector2025.jks`
- [ ] Fichier `android/key.properties` configuré
- [ ] Version incrémentée dans `pubspec.yaml`

### Avant `ios.sh`

- [ ] Sur macOS
- [ ] Flutter 3.24.5 LTS installé
- [ ] Xcode installé et à jour
- [ ] CocoaPods installé
- [ ] Team ID configuré : `6WT84NWCTC`
- [ ] Bundle ID correct : `fr.geosector.app3`
- [ ] Version incrémentée dans `pubspec.yaml`
- [ ] Script `fix-permission-handler.sh` présent

---

## 🐛 Dépannage

### Erreur : "Flutter n'est pas dans le PATH"

**Solution** :
```bash
# Ajouter Flutter au PATH
export PATH="$PATH:$HOME/dev/flutter/bin"
# Ou ajouter dans ~/.zshrc (Mac)
```

### Erreur : "CocoaPods not installed"

**Solution** :
```bash
sudo gem install cocoapods
```

### Erreur : "Invalid Podfile file"

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

### Erreur : "Build iOS failed"

**Solutions** :
1. Vérifier que `fix-permission-handler.sh` a été exécuté
2. Nettoyer complètement :
   ```bash
   flutter clean
   rm -rf ios/Pods ios/Podfile.lock
   flutter pub get
   ./fix-permission-handler.sh
   cd ios && pod install
   ```
3. Vérifier les logs Xcode pour l'erreur exacte

### Script `ios.sh` s'arrête à l'étape 3

**Cause** : Script `fix-permission-handler.sh` introuvable ou non exécutable

**Solution** :
```bash
chmod +x fix-permission-handler.sh
./ios.sh
```

---

## 📊 Temps d'exécution estimés

| Script | Durée | Notes |
|--------|-------|-------|
| `android.sh` | 5-10 min | Dépend de la machine |
| `ios.sh` (sans archive) | 3-5 min | Sur Mac mini/MacBook |
| `ios.sh` (avec archive) | 10-20 min | + temps Xcode Archive |
| `fix-permission-handler.sh` | < 5 secondes | Très rapide |
| `flutter clean` | 10-30 secondes | Variable |
| `flutter pub get` | 30-60 secondes | Variable |
| `pod install` | 30-90 secondes | Première fois plus long |

---

## 📝 Logs et debug

### Activer les logs détaillés

**Android** :
```bash
flutter build appbundle --release --verbose
```

**iOS** :
```bash
flutter build ios --release --no-codesign --verbose
```

### Voir les logs Xcode

Dans Xcode après une erreur :
- Product > Show Build Log (Cmd+B puis Cmd+7)
- Ou dans Terminal :
  ```bash
  tail -f ~/Library/Logs/DiagnosticReports/xcodebuild*
  ```

---

## 🔗 Références

### Documentation créée

- `BUILD-IOS-SUCCESS.md` - Récapitulatif du succès iOS
- `SOLUTION-IOS.md` - Guide complet de la solution
- `SCRIPTS-IOS.md` - Documentation des scripts iOS
- `README-SCRIPTS.md` - Ce fichier

### Scripts

- `ios.sh` - ✅ Script maître iOS
- `android.sh` - ✅ Script maître Android
- `fix-permission-handler.sh` - ✅ Patch iOS
- `fix-nfc-manager.sh` - ⚠️ Patch Android (à vérifier)

---

## 🎯 Prochaines améliorations possibles

### Script `ios.sh`

- [ ] Création de l'archive via ligne de commande (sans ouvrir Xcode)
- [ ] Upload automatique vers App Store Connect via `xcrun altool`
- [ ] Génération automatique des métadonnées App Store
- [ ] Tests automatisés avant build

### Script `android.sh`

- [ ] Upload automatique vers Google Play Console
- [ ] Tests automatisés avant build
- [ ] Génération de screenshots automatiques

### Scripts communs

- [ ] Script `build-all.sh` - Build toutes les plateformes en une fois
- [ ] Script `test-all.sh` - Tests automatisés toutes plateformes
- [ ] Script `deploy-all.sh` - Déploiement vers tous les environnements

---

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

✅ **Les scripts `android.sh` et `ios.sh` sont prêts à l'emploi !**
