Files
geo/app/FASTLANE.md
pierre 2f5946a184 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>
2025-11-09 18:26:27 +01:00

7.5 KiB
Raw Blame History

🚀 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 : 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

# 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


🔧 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 ! 🎉