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:
279
app/FASTLANE.md
Normal file
279
app/FASTLANE.md
Normal 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 !** 🎉
|
||||
Reference in New Issue
Block a user