- 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>
7.5 KiB
🚀 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
# 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
# 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)
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
# Commit la configuration fastlane
git add Gemfile Gemfile.lock fastlane/ .gitignore
git commit -m "chore: add fastlane configuration"
git push
5️⃣ Tester localement
# 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
# 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é)
# 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 :
pushsur branchemainou tagv* - 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
# 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.shcréé 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.ymlcréé - 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 ! 🎉