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:
400
app/fastlane/scripts/ios/ios.sh
Executable file
400
app/fastlane/scripts/ios/ios.sh
Executable file
@@ -0,0 +1,400 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de génération de l'application iOS pour GEOSECTOR
|
||||
# Usage: ./ios.sh
|
||||
# Options: ./ios.sh --skip-archive (build uniquement sans archive Xcode)
|
||||
|
||||
set -e # Arrêter le script en cas d'erreur
|
||||
|
||||
# Couleurs pour les messages
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
MAGENTA='\033[0;35m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Options
|
||||
SKIP_ARCHIVE=false
|
||||
if [[ "$1" == "--skip-archive" ]]; then
|
||||
SKIP_ARCHIVE=true
|
||||
fi
|
||||
|
||||
# Fonction pour afficher les messages
|
||||
print_message() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_step() {
|
||||
echo -e "${MAGENTA}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# Fonction pour gérer les erreurs
|
||||
handle_error() {
|
||||
print_error "Une erreur est survenue lors de l'exécution de la commande"
|
||||
print_error "Ligne $1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Trap pour capturer les erreurs
|
||||
trap 'handle_error $LINENO' ERR
|
||||
|
||||
# Vérifier que nous sommes dans le bon dossier
|
||||
if [ ! -f "pubspec.yaml" ]; then
|
||||
print_error "Ce script doit être exécuté depuis le dossier racine de l'application Flutter"
|
||||
print_error "Fichier pubspec.yaml introuvable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que nous sommes sur macOS
|
||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
print_error "Ce script doit être exécuté sur macOS pour compiler iOS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
print_message "========================================="
|
||||
print_message " GEOSECTOR - Build iOS Application"
|
||||
print_message "========================================="
|
||||
echo
|
||||
|
||||
# Vérifier que Flutter est installé
|
||||
if ! command -v flutter &> /dev/null; then
|
||||
print_error "Flutter n'est pas installé ou n'est pas dans le PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier la version Flutter
|
||||
FLUTTER_VERSION=$(flutter --version | head -n 1 | cut -d' ' -f2)
|
||||
print_message "Flutter version : $FLUTTER_VERSION"
|
||||
|
||||
# Vérifier que c'est Flutter 3.24.5 (recommandé)
|
||||
if [[ "$FLUTTER_VERSION" != "3.24.5" ]]; then
|
||||
print_warning "Version Flutter détectée : $FLUTTER_VERSION"
|
||||
print_warning "Version recommandée : 3.24.5 LTS"
|
||||
read -p "Voulez-vous continuer ? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_message "Build annulé par l'utilisateur"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Vérifier que CocoaPods est installé
|
||||
if ! command -v pod &> /dev/null; then
|
||||
print_error "CocoaPods n'est pas installé"
|
||||
print_error "Installation : sudo gem install cocoapods"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
POD_VERSION=$(pod --version)
|
||||
print_message "CocoaPods version : $POD_VERSION"
|
||||
|
||||
# Vérifier que Xcode est installé
|
||||
if ! command -v xcodebuild &> /dev/null; then
|
||||
print_error "Xcode n'est pas installé"
|
||||
print_error "Installation : App Store > Xcode"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
XCODE_VERSION=$(xcodebuild -version | head -n 1)
|
||||
print_message "$XCODE_VERSION"
|
||||
|
||||
# Récupérer la version depuis pubspec.yaml
|
||||
VERSION=$(grep "^version:" pubspec.yaml | sed 's/version: //' | sed 's/+/-/')
|
||||
if [ -z "$VERSION" ]; then
|
||||
print_error "Impossible de récupérer la version depuis pubspec.yaml"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extraire le version code
|
||||
VERSION_CODE=$(echo $VERSION | cut -d'-' -f2)
|
||||
if [ -z "$VERSION_CODE" ]; then
|
||||
print_error "Impossible d'extraire le version code"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_NAME=$(echo $VERSION | cut -d'-' -f1)
|
||||
|
||||
print_message "Version détectée : $VERSION_NAME ($VERSION_CODE)"
|
||||
echo
|
||||
|
||||
# Vérifier que le dossier ios existe
|
||||
if [ ! -d "ios" ]; then
|
||||
print_error "Dossier ios/ introuvable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_success "Vérifications préliminaires terminées"
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 1 : Nettoyage complet
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 1/7 : Nettoyage complet du projet..."
|
||||
echo
|
||||
|
||||
print_message "Suppression du cache Flutter..."
|
||||
flutter clean
|
||||
|
||||
print_message "Suppression du cache iOS (Pods, build, symlinks)..."
|
||||
rm -rf ios/Pods
|
||||
rm -rf ios/Podfile.lock
|
||||
rm -rf ios/.symlinks
|
||||
rm -rf build/ios
|
||||
|
||||
print_success "Nettoyage terminé"
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 2 : Récupération des dépendances Flutter
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 2/7 : Récupération des dépendances Flutter..."
|
||||
echo
|
||||
|
||||
flutter pub get
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Dépendances Flutter récupérées"
|
||||
else
|
||||
print_error "Échec de la récupération des dépendances Flutter"
|
||||
exit 1
|
||||
fi
|
||||
echo
|
||||
|
||||
# Vérifier que Generated.xcconfig a été créé avec les bons chemins
|
||||
if [ ! -f "ios/Flutter/Generated.xcconfig" ]; then
|
||||
print_error "Fichier ios/Flutter/Generated.xcconfig non généré"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FLUTTER_ROOT=$(grep "FLUTTER_ROOT=" ios/Flutter/Generated.xcconfig | cut -d'=' -f2)
|
||||
print_message "FLUTTER_ROOT configuré : $FLUTTER_ROOT"
|
||||
|
||||
if [[ "$FLUTTER_ROOT" == *"/opt/flutter"* ]] || [[ "$FLUTTER_ROOT" == *"/home/"* ]]; then
|
||||
print_error "FLUTTER_ROOT contient un chemin Linux invalide : $FLUTTER_ROOT"
|
||||
print_error "Régénération nécessaire..."
|
||||
rm ios/Flutter/Generated.xcconfig
|
||||
flutter pub get
|
||||
fi
|
||||
|
||||
print_success "Configuration Flutter vérifiée"
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 3 : Patch permission_handler_apple (critique pour iOS)
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 3/7 : Application du patch permission_handler_apple..."
|
||||
echo
|
||||
|
||||
if [ -f "./fastlane/scripts/commun/fix-permission-handler.sh" ]; then
|
||||
./fastlane/scripts/commun/fix-permission-handler.sh
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Patch permission_handler_apple appliqué"
|
||||
else
|
||||
print_error "Échec du patch permission_handler_apple"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_warning "Script fix-permission-handler.sh introuvable"
|
||||
print_warning "La compilation peut échouer sans ce patch"
|
||||
read -p "Voulez-vous continuer malgré tout ? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_message "Build annulé par l'utilisateur"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 4 : Installation des pods CocoaPods
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 4/7 : Installation des pods CocoaPods..."
|
||||
echo
|
||||
|
||||
cd ios
|
||||
pod install
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Pods installés avec succès"
|
||||
|
||||
# Compter le nombre de pods installés
|
||||
POD_COUNT=$(grep -c "Installing" Podfile.lock 2>/dev/null || echo "0")
|
||||
print_message "Nombre de pods installés : $POD_COUNT"
|
||||
else
|
||||
print_error "Échec de l'installation des pods"
|
||||
exit 1
|
||||
fi
|
||||
cd ..
|
||||
|
||||
echo
|
||||
|
||||
# Vérifier que le workspace a été créé
|
||||
if [ ! -d "ios/Runner.xcworkspace" ]; then
|
||||
print_error "Workspace Xcode non créé : ios/Runner.xcworkspace"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_success "Workspace Xcode créé : ios/Runner.xcworkspace"
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 5 : Analyse du code (optionnel)
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 5/7 : Analyse du code Dart..."
|
||||
echo
|
||||
|
||||
flutter analyze --no-fatal-infos --no-fatal-warnings || {
|
||||
print_warning "Des avertissements ont été détectés dans le code"
|
||||
read -p "Voulez-vous continuer malgré les avertissements ? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_message "Build annulé par l'utilisateur"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
print_success "Analyse du code terminée"
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 6 : Build iOS (sans signature)
|
||||
# =============================================================================
|
||||
|
||||
print_step "Étape 6/7 : Compilation iOS (release, sans signature)..."
|
||||
echo
|
||||
|
||||
print_message "Cette opération peut prendre plusieurs minutes..."
|
||||
print_message "Compilation en cours..."
|
||||
|
||||
flutter build ios --release --no-codesign
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
print_success "Compilation iOS réussie !"
|
||||
|
||||
# Vérifier que l'app a été créée
|
||||
if [ -d "build/ios/iphoneos/Runner.app" ]; then
|
||||
APP_SIZE=$(du -sh build/ios/iphoneos/Runner.app | cut -f1)
|
||||
print_message "Taille de l'app : $APP_SIZE"
|
||||
print_message "Chemin : build/ios/iphoneos/Runner.app"
|
||||
else
|
||||
print_warning "Application générée mais introuvable à l'emplacement attendu"
|
||||
fi
|
||||
else
|
||||
print_error "Échec de la compilation iOS"
|
||||
print_error "Consultez les logs ci-dessus pour plus de détails"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# ÉTAPE 7 : Archive Xcode (optionnel)
|
||||
# =============================================================================
|
||||
|
||||
if [ "$SKIP_ARCHIVE" = false ]; then
|
||||
print_step "Étape 7/7 : Création de l'archive Xcode..."
|
||||
echo
|
||||
|
||||
print_message "L'archive Xcode nécessite une signature de code"
|
||||
print_message "Cette étape ouvrira Xcode pour créer l'archive manuellement"
|
||||
echo
|
||||
|
||||
read -p "Voulez-vous ouvrir Xcode pour créer l'archive ? (y/n) " -n 1 -r
|
||||
echo
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
print_message "Ouverture de Xcode..."
|
||||
open ios/Runner.xcworkspace
|
||||
|
||||
echo
|
||||
print_message "========================================="
|
||||
print_message " Instructions pour l'archive Xcode"
|
||||
print_message "========================================="
|
||||
echo
|
||||
print_message "1. Dans Xcode, sélectionner : Any iOS Device (arm64)"
|
||||
print_message "2. Menu : Product > Clean Build Folder (Cmd+Shift+K)"
|
||||
print_message "3. Menu : Product > Archive"
|
||||
print_message "4. Attendre la fin de la compilation (~5-10 min)"
|
||||
print_message "5. Organizer s'ouvre automatiquement"
|
||||
print_message "6. Cliquer sur 'Validate App'"
|
||||
print_message "7. Puis 'Distribute App' > 'App Store Connect' > 'Upload'"
|
||||
echo
|
||||
print_warning "Ne fermez pas ce terminal pendant l'archive Xcode"
|
||||
echo
|
||||
|
||||
read -p "Appuyez sur Entrée quand l'archive est terminée..." -r
|
||||
echo
|
||||
|
||||
print_success "Archive créée avec succès (si aucune erreur Xcode)"
|
||||
else
|
||||
print_message "Archive ignorée"
|
||||
print_message "Vous pouvez créer l'archive plus tard avec :"
|
||||
print_message " open ios/Runner.xcworkspace"
|
||||
fi
|
||||
else
|
||||
print_message "Étape 7/7 : Archive Xcode ignorée (--skip-archive)"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# =============================================================================
|
||||
# RÉSUMÉ FINAL
|
||||
# =============================================================================
|
||||
|
||||
print_message "========================================="
|
||||
print_success " BUILD iOS TERMINÉ AVEC SUCCÈS !"
|
||||
print_message "========================================="
|
||||
echo
|
||||
print_message "Version : ${GREEN}$VERSION_NAME ($VERSION_CODE)${NC}"
|
||||
print_message "Bundle ID : ${GREEN}fr.geosector.app3${NC}"
|
||||
print_message "Application : ${GREEN}build/ios/iphoneos/Runner.app${NC}"
|
||||
echo
|
||||
|
||||
if [ "$SKIP_ARCHIVE" = false ]; then
|
||||
print_message "Prochaines étapes (dans Xcode) :"
|
||||
print_message "1. ✅ Build iOS réussi"
|
||||
print_message "2. ⏳ Créer l'archive (Product > Archive)"
|
||||
print_message "3. ⏳ Valider l'archive (Organizer > Validate App)"
|
||||
print_message "4. ⏳ Upload vers App Store Connect"
|
||||
print_message "5. ⏳ Configurer les métadonnées"
|
||||
print_message "6. ⏳ Soumettre pour révision Apple"
|
||||
else
|
||||
print_message "Prochaines étapes :"
|
||||
print_message "1. Ouvrir Xcode : open ios/Runner.xcworkspace"
|
||||
print_message "2. Créer l'archive : Product > Archive"
|
||||
print_message "3. Upload vers App Store Connect"
|
||||
fi
|
||||
|
||||
echo
|
||||
print_message "Documentation :"
|
||||
print_message " - BUILD-IOS-SUCCESS.md (guide complet)"
|
||||
print_message " - SOLUTION-IOS.md (détails de la solution)"
|
||||
print_message " - SCRIPTS-IOS.md (documentation des scripts)"
|
||||
echo
|
||||
|
||||
print_success "Script terminé !"
|
||||
echo
|
||||
|
||||
# Afficher un résumé des fichiers importants
|
||||
print_message "Fichiers générés :"
|
||||
print_message " - Runner.app : build/ios/iphoneos/Runner.app"
|
||||
if [ -d "build/ios/archive" ]; then
|
||||
print_message " - Archive : build/ios/archive/ (si créée)"
|
||||
fi
|
||||
echo
|
||||
Reference in New Issue
Block a user