feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles

- 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>
This commit is contained in:
pierre
2025-11-09 18:26:27 +01:00
parent 21657a3820
commit 2f5946a184
812 changed files with 142105 additions and 25992 deletions

279
app/FASTLANE.md Normal file
View File

@@ -0,0 +1,279 @@
# 🚀 Guide Fastlane - Déploiement automatisé iOS/Android
**Date** : 22/10/2025
**Version actuelle** : 3.4.2 (Build 342)
---
## 📋 Objectif
Automatiser 100% du déploiement iOS et Android depuis Debian, sans écran ni manipulation manuelle sur le Mac mini.
**Avant** : Transfert manuel + Xcode GUI + 30 min de clics
**Après** : 1 commande SSH + 0 supervision
---
## 🎯 Installation
### 1⃣ Sur le Mac mini (192.168.1.34) - Runtime uniquement
```bash
# Connexion SSH
ssh pierre@192.168.1.34
# Installer fastlane via Homebrew (recommandé)
brew install fastlane
# Vérifier l'installation
fastlane --version
# Activer le partage SSH (si pas déjà fait)
# Préférences Système > Partage > Session à distance
```
### 2⃣ Sur Debian - Configuration du projet
```bash
# Installer Ruby (si pas déjà fait)
sudo apt install ruby-full build-essential
# Configurer Bundler pour installation locale
cd /home/pierre/dev/geosector/app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'fastlane'" >> Gemfile
bundle config set --local path 'vendor/bundle'
bundle install
# Ajouter au .gitignore
echo "vendor/bundle" >> .gitignore
# Vérifier
bundle exec fastlane --version
```
**Important** : Cette installation est à faire **une seule fois par projet Flutter**. Le dossier `fastlane/` est versionné dans Git et transféré avec le code.
---
## ⚙️ Configuration initiale
### 1⃣ Initialiser fastlane dans le projet (sur Debian)
```bash
cd /home/pierre/dev/geosector/app
bundle exec fastlane init
# Sélectionner :
# iOS : Option 2 (Automate beta distribution to TestFlight)
# Android : Option 2 (Automate deployment to Google Play)
```
### 2⃣ Configurer les credentials
**Pour iOS (App Store Connect)** :
- Apple ID : votre compte développeur
- Team ID : `6WT84NWCTC`
- App Identifier : `fr.geosector.app`
**Pour Android (Google Play Console)** :
- JSON API Key : télécharger depuis Google Play Console > API Access
- Package name : `fr.geosector.app`
- Keystore : utiliser votre keystore existant
### 3⃣ Créer le Fastfile
Créer `fastlane/Fastfile` avec les lanes iOS et Android :
- Lane iOS : clean + build + archive + upload TestFlight
- Lane Android : clean + build AAB + upload Play Store
### 4⃣ Versionner dans Git
```bash
# Commit la configuration fastlane
git add Gemfile Gemfile.lock fastlane/ .gitignore
git commit -m "chore: add fastlane configuration"
git push
```
### 5⃣ Tester localement
```bash
# Transférer vers Mac mini
rsync -avz --exclude 'build' --exclude '.dart_tool' . pierre@192.168.1.34:/Users/pierre/dev/geosector/app_342/
# Test iOS sur Mac mini
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector/app_342 && fastlane ios release"
# Test Android sur Mac mini
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector/app_342 && fastlane android release"
```
---
## 🚀 Utilisation depuis Debian
### Workflow simple
```bash
# 1. Transférer le code vers le Mac mini (crée app_342/)
cd /home/pierre/dev/geosector/app
rsync -avz --exclude 'build' --exclude '.dart_tool' --exclude 'vendor/bundle' . pierre@192.168.1.34:/Users/pierre/dev/geosector/app_342/
# 2. Lancer le build iOS à distance
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector/app_342 && fastlane ios release"
# 3. Lancer le build Android à distance
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector/app_342 && fastlane android release"
# 4. Archiver la version après succès
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector && zip -r app_342.zip app_342"
```
### Workflow parallèle (iOS + Android simultané)
```bash
# Transfert vers dossier versionné
rsync -avz --exclude 'build' --exclude 'vendor/bundle' . pierre@192.168.1.34:/Users/pierre/dev/geosector/app_342/
# Build iOS et Android en parallèle
ssh pierre@192.168.1.34 "cd /Users/pierre/dev/geosector/app_342 && fastlane ios release & fastlane android release"
```
### Créer un script de déploiement
Créer `deploy-all.sh` dans le projet :
- Étape 1 : rsync vers Mac mini
- Étape 2 : fastlane ios release
- Étape 3 : fastlane android release
- Étape 4 : notification de fin
Usage : `./deploy-all.sh`
---
## ⚡ CI/CD avec Gitea Actions
### Objectif
Automatiser le déploiement à chaque `git push` sur la branche `main` ou `release`.
### Architecture
```
Gitea (gitea.d6soft.fr)
↓ git push
Gitea Actions (workflow)
↓ SSH
Mac mini (self-hosted runner)
↓ fastlane
App Store Connect + Google Play Console
```
### Configuration
**1. Activer Gitea Actions**
- Gitea > Settings > Actions > Enable Actions
- Créer un runner sur le Mac mini
**2. Installer le runner sur le Mac mini**
- Télécharger act_runner depuis Gitea
- Enregistrer le runner avec le token Gitea
- Lancer le runner en service (launchd)
**3. Créer le workflow `.gitea/workflows/deploy.yml`**
- Trigger : `push` sur branche `main` ou tag `v*`
- Steps : checkout + flutter pub get + fastlane ios release + fastlane android release
- Runner : `runs-on: self-hosted`
**4. Sécuriser les secrets**
- Gitea > Settings > Secrets
- Ajouter : APPLE_ID, FASTLANE_PASSWORD, GOOGLE_PLAY_JSON_KEY
- Utiliser `${{ secrets.APPLE_ID }}` dans le workflow
### Résultat
```bash
# Sur Debian
cd /home/pierre/dev/geosector/app
git add .
git commit -m "feat: nouvelle fonctionnalité"
git push origin main
# 🤖 Gitea Actions détecte le push
# 🏗️ Mac mini build automatiquement
# 📤 Upload vers TestFlight + Play Store
# ✅ Notification par email/Slack
```
**Zéro action manuelle, déploiement automatique 24/7.**
---
## 📊 Checklist de migration
### Phase 1 : Installation de base
- [ ] Fastlane installé sur Mac mini
- [ ] Fastfile créé et testé pour iOS
- [ ] Fastfile créé et testé pour Android
- [ ] Credentials configurés (Apple ID, Google Play)
- [ ] Test manuel réussi : `fastlane ios release`
- [ ] Test manuel réussi : `fastlane android release`
### Phase 2 : Déploiement distant
- [ ] SSH sans mot de passe configuré (clé SSH)
- [ ] Script `deploy-all.sh` créé et testé
- [ ] Test de déploiement complet depuis Debian
- [ ] Validation sur TestFlight + Play Store
### Phase 3 : CI/CD (optionnel mais recommandé)
- [ ] Gitea Actions activé sur le dépôt
- [ ] Runner installé sur Mac mini
- [ ] Workflow `.gitea/workflows/deploy.yml` créé
- [ ] Secrets configurés dans Gitea
- [ ] Test de déploiement automatique sur `git push`
- [ ] Notifications configurées (email/Slack)
---
## 🎯 Gains de productivité
| Action | Avant | Après |
|--------|-------|-------|
| Build iOS | 30 min (manuel + VNC) | 1 commande SSH |
| Build Android | 20 min (manuel) | 1 commande SSH |
| Upload stores | 10 min (formulaires) | Automatique |
| Présence requise | 60 min | 0 min |
| Mac mini | Écran + clavier | Headless |
| Déploiement | À la demande | Automatique sur git push |
**Temps gagné par release : ~60 minutes → 0 minute**
---
## 📚 Ressources
- **Fastlane** : https://fastlane.tools
- **Gitea Actions** : https://docs.gitea.com/usage/actions/overview
- **App Store Connect** : https://appstoreconnect.apple.com
- **Google Play Console** : https://play.google.com/console
---
## 🔧 Troubleshooting
**Erreur "Could not find action"**
→ Vérifier que fastlane est dans le PATH du Mac mini
**Erreur de signature iOS**
→ Vérifier que les certificats sont bien installés sur le Mac mini (Xcode > Preferences > Accounts)
**Erreur Google Play API**
→ Vérifier que le JSON key a les bonnes permissions (Admin/Release Manager)
**Runner Gitea ne démarre pas**
→ Vérifier les logs : `journalctl -u gitea-runner -f`
---
**Mac mini headless opérationnel !** 🎉