name: Deploy Flutter to Firebase iOS on: push: branches: release jobs: deploy-ios: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Configurer Xcode & Flutter run: | # Xcode 26.2 est optimisé pour les builds parallèles xcodebuild -version flutter pub get - name: Installer Cocoapods run: | cd ios # Force la mise à jour pour Firebase 12.6.0 pod install --repo-update || pod update cd .. - name: Créer les fichiers de configuration (Secrets) run: | # Création du .env à la racine pour éviter l'erreur d'asset echo "${{ secrets.ENV_FILE }}" > .env # Création des credentials Firebase printf '%s' '${{ secrets.FIREBASE_CREDENTIALS }}' > ./ios/firebase_credentials.json - name: Préparer le Code Signing (Mode Safe) env: P12_BASE: ${{ secrets.IOS_P12_BASE64 }} P12_PASS: ${{ secrets.IOS_P12_PASSWORD }} PROV_BASE: ${{ secrets.IOS_PROVISION_BASE64 }} run: | # 1. Nettoyage et création d'un trousseau temporaire isolé security delete-keychain build.keychain || true security create-keychain -p "" build.keychain security unlock-keychain -p "" build.keychain # 2. Ajout à la liste de recherche (Indispensable pour Xcode 26.2) # Permet à Xcode de trouver le certificat sans impacter tes autres apps security list-keychains -d user -s build.keychain $(security list-keychains -d user | xargs) # 3. Importation du Certificat Apple Distribution echo "$P12_BASE" | base64 -D -o cert.p12 security import cert.p12 -k build.keychain -P "$P12_PASS" -T /usr/bin/codesign -T /usr/bin/productsign # 4. Autorisation de signature sans popup security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain # 5. Installation du Profil de Provisionnement mis à jour (avec Push Notifications) mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles echo "$PROV_BASE" | base64 -D -o ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision - name: Build IPA (Release) run: | # Build de l'archive via Xcode 26.2 # L'asset .env est maintenant correctement détecté à la racine flutter build ipa --release --export-method ad-hoc - name: Envoi vers Firebase App Distribution env: FIREBASE_IOS_APP_ID: ${{ secrets.FIREBASE_IOS_APP_ID }} run: | # 1. Configuration du chemin Ruby Homebrew export PATH="/opt/homebrew/opt/ruby/bin:/opt/homebrew/bin:$PATH" gem install bundler -v 2.7.2 --no-document # 2. Entrer dans le dossier ios avant toute opération cd ios # 3. Création du Gemfile "blindé" pour Ruby 3.4 # On écrase tout ancien fichier pour être sûr de repartir sur du propre echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.214.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile # Correctifs pour les gems retirées du cœur de Ruby 3.4 echo "gem 'ostruct'" >> Gemfile echo "gem 'nkf'" >> Gemfile echo "gem 'abbrev'" >> Gemfile echo "gem 'base64'" >> Gemfile echo "gem 'csv'" >> Gemfile echo "gem 'mutex_m'" >> Gemfile echo "gem 'bigdecimal'" >> Gemfile # 4. Installation des dépendances dans le dossier local bundle _2.7.2_ config set path 'vendor/bundle' bundle _2.7.2_ install # 5. Recherche dynamique de l'IPA # On cherche depuis la racine du projet (un dossier au-dessus) echo "🔍 Localisation de l'IPA..." IPA_PATH=$(find .. -name "*.ipa" -not -path "*/Pods/*" | head -n 1) if [ -z "$IPA_PATH" ]; then echo "❌ ERREUR : Aucun fichier .ipa trouvé. Vérifie l'étape de build." exit 1 fi echo "📦 IPA détectée : $IPA_PATH" # 6. Envoi final vers Firebase echo "🚀 Téléchargement vers Firebase App Distribution..." bundle _2.7.2_ exec fastlane run firebase_app_distribution \ app:"$FIREBASE_IOS_APP_ID" \ ipa_path:"$IPA_PATH" \ service_credentials_file:"firebase_credentials.json" \ release_notes: "Build stable TravelMate - Xcode 26.2" - name: Nettoyage (Post-build) if: always() run: | # Restauration de l'état du Trousseau pour ton Mac perso security list-keychains -d user -s login.keychain security delete-keychain build.keychain || true