diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 230012e..dec0c95 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -63,57 +63,67 @@ jobs: printf '%s' '${{ secrets.FIREBASE_CREDENTIALS }}' > ./ios/firebase_credentials.json cd ios && (pod install --repo-update || pod update) - - name: Préparer le Code Signing (Xcode 26.2) + - name: Préparer le Code Signing env: P12_BASE: ${{ secrets.IOS_P12_BASE64 }} P12_PASS: ${{ secrets.IOS_P12_PASSWORD }} PROV_BASE: ${{ secrets.IOS_PROVISION_BASE64 }} + TEAM_ID: ${{ secrets.IOS_TEAM_ID }} run: | + # Créer et configurer le keychain security delete-keychain build.keychain || true security create-keychain -p "" build.keychain security unlock-keychain -p "" build.keychain security list-keychains -d user -s build.keychain $(security list-keychains -d user | xargs) + security set-keychain-settings -lut 21600 build.keychain + + # Importer le certificat echo "$P12_BASE" | base64 -D -o cert.p12 security import cert.p12 -k build.keychain -P "$P12_PASS" -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple: -s -k "" build.keychain + + # Installer le profil de provisioning mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles - echo "$PROV_BASE" | base64 -D -o ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision + PROFILE_PATH=~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision + echo "$PROV_BASE" | base64 -D -o "$PROFILE_PATH" + + # Extraire l'UUID du profil + PROFILE_UUID=$(/usr/libexec/PlistBuddy -c "Print UUID" /dev/stdin <<< $(/usr/bin/security cms -D -i "$PROFILE_PATH")) + echo "Profile UUID: $PROFILE_UUID" + + # Copier avec l'UUID correct + cp "$PROFILE_PATH" ~/Library/MobileDevice/Provisioning\ Profiles/$PROFILE_UUID.mobileprovision - - name: Build IPA avec xcodebuild + - name: Configurer le projet Xcode env: TEAM_ID: ${{ secrets.IOS_TEAM_ID }} BUNDLE_ID: ${{ secrets.IOS_BUNDLE_ID }} run: | - flutter clean - flutter pub get - flutter build ios --release --no-codesign - - # Créer le dossier de sortie - mkdir -p build/ios/ipa - - # Construire l'archive avec xcodebuild cd ios - xcodebuild -workspace Runner.xcworkspace \ - -scheme Runner \ - -configuration Release \ - -archivePath ../build/ios/Runner.xcarchive \ - clean archive \ - CODE_SIGN_IDENTITY="Apple Distribution" \ - PROVISIONING_PROFILE_SPECIFIER="distribution" \ - DEVELOPMENT_TEAM="$TEAM_ID" - # Export en IPA - xcodebuild -exportArchive \ - -archivePath ../build/ios/Runner.xcarchive \ - -exportPath ../build/ios/ipa \ - -exportOptionsPlist exportOptions.plist + # Extraire le nom du profil de provisioning + PROV_NAME=$(/usr/libexec/PlistBuddy -c "Print Name" /dev/stdin <<< $(/usr/bin/security cms -D -i ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision)) + echo "Provisioning Profile Name: $PROV_NAME" - cd .. - echo "📦 Contenu du dossier IPA :" - ls -lah build/ios/ipa/ + # Configurer le projet avec xcconfig + cat > build_config.xcconfig < ios/exportOptions.plist < @@ -122,22 +132,69 @@ jobs: method ad-hoc teamID - ${{ secrets.IOS_TEAM_ID }} + $TEAM_ID + signingStyle + manual provisioningProfiles - ${{ secrets.IOS_BUNDLE_ID }} - distribution + $BUNDLE_ID + $PROV_NAME EOF - - name: Envoi Firebase iOS + - name: Build avec xcodebuild + env: + TEAM_ID: ${{ secrets.IOS_TEAM_ID }} + run: | + cd ios + + # Extraire le nom du profil + PROV_NAME=$(/usr/libexec/PlistBuddy -c "Print Name" /dev/stdin <<< $(/usr/bin/security cms -D -i ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision)) + + # Clean et build avec Flutter + cd .. + flutter clean + flutter pub get + flutter build ios --release --no-codesign + + # Créer le dossier de sortie + mkdir -p build/ios/ipa + + # Archive avec xcodebuild + cd ios + xcodebuild -workspace Runner.xcworkspace \ + -scheme Runner \ + -configuration Release \ + -archivePath ../build/ios/Runner.xcarchive \ + -xcconfig build_config.xcconfig \ + archive \ + CODE_SIGN_STYLE=Manual \ + CODE_SIGN_IDENTITY="Apple Distribution" \ + PROVISIONING_PROFILE_SPECIFIER="$PROV_NAME" \ + DEVELOPMENT_TEAM="$TEAM_ID" \ + | xcpretty || true + + # Export en IPA + xcodebuild -exportArchive \ + -archivePath ../build/ios/Runner.xcarchive \ + -exportPath ../build/ios/ipa \ + -exportOptionsPlist exportOptions.plist \ + -allowProvisioningUpdates \ + | xcpretty || true + + cd .. + echo "📦 Contenu du dossier IPA :" + ls -lah build/ios/ipa/ || echo "Dossier IPA non trouvé" + + - name: Vérification et Upload Firebase env: FIREBASE_IOS_APP_ID: ${{ secrets.FIREBASE_IOS_APP_ID }} run: | cd ios - # Utilisation du Gemfile stabilisé + + # Configuration Fastlane echo "source 'https://rubygems.org'" > Gemfile echo "gem 'fastlane', '>= 2.230.0'" >> Gemfile echo "gem 'fastlane-plugin-firebase_app_distribution'" >> Gemfile @@ -146,18 +203,20 @@ jobs: gem install bundler -v 2.7.2 --no-document bundle _2.7.2_ update - # RECHERCHE DYNAMIQUE DE L'IPA + # Recherche de l'IPA IPA_FILE=$(find ../build/ios/ipa -name "*.ipa" | head -n 1) if [ -z "$IPA_FILE" ]; then echo "❌ ERREUR : Aucun fichier IPA trouvé !" - echo "Contenu du dossier :" - ls -R ../build/ios/ + echo "📂 Structure complète du dossier build :" + ls -R ../build/ exit 1 fi - echo "📦 IPA trouvée : $IPA_FILE" - + echo "✅ IPA trouvée : $IPA_FILE" + echo "📊 Taille : $(du -h "$IPA_FILE" | cut -f1)" + + # Upload vers Firebase bundle _2.7.2_ exec fastlane run firebase_app_distribution \ app:"$FIREBASE_IOS_APP_ID" \ ipa_path:"$IPA_FILE" \