# 🍎 Guide de transfert et compilation iOS sur Mac mini

**Date** : 14/10/2025
**Projet** : GEOSECTOR v3.3.6 (Build 336)
**Source** : Debian Linux (minipi1)
**Destination** : Mac mini (compilation iOS)

---

## ✅ Corrections effectuées sur Linux (Debian)

### 🎉 Android : COMPILATION RÉUSSIE

**Problèmes résolus** :
1. ✅ JDK incomplet → Installation `openjdk-21-jdk-headless`
2. ✅ nfc_manager 3.3.0 → Triple patch automatique (AndroidManifest + build.gradle + Translator.kt)
3. ✅ Conflit BouncyCastle/Stripe → Configuration `packaging` dans build.gradle.kts

**Scripts créés** :
- ✅ `fix-nfc-manager.sh` - Patch automatique nfc_manager 3.3.0 (3 corrections)
- ✅ `android.sh` - Build Android avec auto-patch intégré
- ✅ `deploy-app.sh` - Déploiement DEV avec auto-patch et nettoyage cache

**Résultat** : Bundle Android généré avec succès → `geosector-336.aab`

---

### 📦 Packages Flutter modifiés

#### Packages supprimés (incompatibles iOS)
Ces packages causaient des erreurs `'Flutter/Flutter.h' file not found` sur iOS :

| Package | Action | Remplacement |
|---------|--------|--------------|
| `package_info_plus` | ❌ SUPPRIMÉ | ✅ `AppInfoService` auto-généré dans `lib/core/services/app_info_service.dart` |
| `network_info_plus` | ❌ SUPPRIMÉ | ✅ `NetworkInterface` natif Dart (dart:io) |
| `sensors_plus` | ❌ SUPPRIMÉ | ⚠️ Mode boussole retiré (feature optionnelle peu utilisée) |

**Impact fonctionnel** : Minimal - Perte de fonctionnalités mineures (mode boussole, diagnostic WiFi SSID/BSSID)

#### Configuration finale pubspec.yaml

```yaml
dependencies:
  flutter:
    sdk: flutter

environment:
  sdk: '>=3.0.0 <4.0.0'

# Flutter 3.24.5 LTS + Dart 3.5.4
# Packages downgradés pour compatibilité
```

**Versions clés** :
- `nfc_manager: 3.3.0` - Nécessite patch (automatique via scripts)
- `syncfusion_flutter_charts: 27.2.5` - Sweet spot compatible
- `geolocator: 13.0.3` - Sans toARGB32()
- `battery_plus: 6.0.3` - Fix Gradle AGP 8
- `connectivity_plus: 6.0.5` - Fix Gradle AGP 8

---

## 📋 Étapes de compilation iOS sur Mac mini

### 1️⃣ Décompression et setup initial

```bash
# Décompresser l'archive
cd ~/dev/geosector
unzip app-14oct2025.zip

cd app

# Vérifier la version Flutter (doit être 3.24.5 LTS)
flutter --version
# Flutter 3.24.5 • channel stable
# Dart 3.5.4
```

### 2️⃣ Installation des dépendances

```bash
# Nettoyer (par précaution)
flutter clean

# Récupérer les dépendances Flutter
flutter pub get

# Installer les pods iOS
cd ios
pod install
cd ..
```

**Résultat attendu** :
- ✅ 25 pods installés
- ✅ Aucune erreur de dépendances

### 3️⃣ Vérification de la configuration iOS

**Fichiers critiques à vérifier** :

#### `ios/Runner/Info.plist`
Doit contenir les permissions :
- ✅ Localisation (GPS)
- ✅ NFC (tags secteurs)
- ✅ Bluetooth (terminaux Stripe)
- ✅ Caméra (scan cartes)
- ✅ Photos (justificatifs)

#### `ios/Runner/Runner.entitlements`
Doit contenir :
- ✅ NFC Tag Reading (NDEF, TAG)
- ✅ Stripe Terminal - Tap to Pay on iPhone
- ✅ Network Access
- ✅ Keychain Sharing

### 4️⃣ Compilation de test (sans signature)

```bash
# Build iOS en release sans codesign
flutter build ios --release --no-codesign
```

**Résultats possibles** :

#### ✅ Si compilation réussit
→ Passer directement à l'étape 5 (Xcode)

#### ❌ Si erreurs de compilation
Consulter `README-IOS.md` (section "Diagnostic final - Problème structurel iOS")

**Erreurs possibles** :
- `'Flutter/Flutter.h' file not found` → Problème SwiftPM (voir README-IOS.md)
- Erreurs de pods → Réexécuter `pod install`

### 5️⃣ Configuration Xcode

```bash
# Ouvrir le workspace Xcode
open ios/Runner.xcworkspace
```

#### Dans Xcode :

**A. Vérifier le Team ID**
1. Sélectionner le target `Runner`
2. Onglet `Signing & Capabilities`
3. Team : `6WT84NWCTC` ✅

**B. Vérifier Bundle Identifier**
- Bundle ID : `fr.geosector.app3` ✅

**C. Vérifier les Capabilities**
- ✅ Near Field Communication Tag Reading
- ⚠️ Tap to Pay on iPhone (nécessite approbation Apple spéciale)

**D. Vérifier la version**
- Version : `3.3.6`
- Build : `336`

### 6️⃣ Archive pour App Store

```bash
# Dans Xcode :
# Product > Clean Build Folder (Cmd+Shift+K)
# Product > Archive
```

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

---

## 🔧 Résolution de problèmes iOS

### Problème : Erreur SwiftPM / Flutter.h

**Symptôme** :
```
'Flutter/Flutter.h' file not found
```

**Causes possibles** :
1. Flutter 3.24.5 LTS avec packages récents (incompatibilité SwiftPM)
2. Transition SwiftPM incomplète dans l'écosystème Flutter

**Solutions documentées dans `README-IOS.md`** :
- Option A : Désactiver SwiftPM (forcer CocoaPods pur)
- Option B : Patcher manuellement les headers
- Option C : Attendre Flutter 3.28+ LTS avec SwiftPM stable

### Problème : Pods non installés

```bash
cd ios
rm -rf Pods Podfile.lock
pod install
cd ..
```

### Problème : Cache Flutter

```bash
flutter clean
rm -rf ios/Pods ios/Podfile.lock
flutter pub get
cd ios && pod install && cd ..
```

---

## 📊 État actuel du projet

| Plateforme | Statut | Notes |
|------------|--------|-------|
| **Web** | ✅ Compilé | Déployable immédiatement |
| **Android** | ✅ Compilé | Bundle prêt : `geosector-336.aab` |
| **iOS** | ⏳ En attente | Configuration Mac mini requise |

---

## 📂 Structure du projet transféré

```
app/
├── fix-nfc-manager.sh           # Script de patch nfc_manager (Android uniquement)
├── android.sh                    # Build Android avec auto-patch
├── deploy-app.sh                 # Déploiement DEV avec auto-patch
├── pubspec.yaml                  # Configuration finale Flutter 3.24.5 LTS
├── README-IOS.md                 # Guide détaillé iOS (historique problèmes)
├── TRANSFERT-MAC.md             # Ce fichier
├── docs/
│   └── TODO-APP.md              # Documentation complète (Phase 8 Android complétée)
├── lib/
│   └── core/services/
│       └── app_info_service.dart # Remplace package_info_plus (auto-généré)
├── android/
│   └── app/build.gradle.kts     # Configuration packaging BouncyCastle
└── ios/
    ├── Runner/
    │   ├── Info.plist           # Permissions iOS
    │   └── Runner.entitlements  # Entitlements Stripe Tap to Pay
    └── Podfile                   # CocoaPods configuration

```

---

## 🎯 Objectif final iOS

**Créer l'archive App Store** :
1. ✅ Compilation iOS réussie
2. ✅ Validation de l'archive (Organizer)
3. ✅ Upload vers App Store Connect
4. ✅ Configuration métadonnées + captures d'écran
5. ✅ Soumission pour révision Apple

**Deadline** : Aucune urgence (Android fonctionnel pour tests)

---

## 📞 Support et documentation

**Documents de référence** :
- `README-IOS.md` - Guide complet iOS avec historique des tentatives
- `docs/TODO-APP.md` - Documentation technique complète (Phase 8 Android)
- Apple Developer : https://developer.apple.com
- App Store Connect : https://appstoreconnect.apple.com

**Configuration serveur** :
- DEV : dapp.geosector.fr
- REC : rapp.geosector.fr
- PROD : app3.geosector.fr

---

**✅ Le projet est prêt pour le transfert et la compilation iOS !**

**Prochaines étapes** :
1. Zipper le dossier `app/`
2. Transférer sur Mac mini (Samba/rsync)
3. Suivre les étapes 1-6 ci-dessus
4. Croiser les doigts pour la compilation iOS 🤞

**Bonne chance !** 🚀
