# Guide : Déploiement Flutter iOS via Gitea → GitHub → Codemagic → TestFlight ## Prérequis obligatoires - [ ] Compte Apple Developer actif (99$/an) - [ ] App déjà créée sur App Store Connect - [ ] Projet Flutter fonctionnel dans Gitea - [ ] Compte GitHub - [ ] Certificats iOS et profils de provisioning ## Étape 1 : Configuration GitHub ### 1.1 Créer le dépôt GitHub ```bash # Sur GitHub, créer un nouveau repository (privé recommandé) # Nom : même nom que votre projet Gitea ``` ### 1.2 Configurer les remotes Git localement ```bash # Dans votre projet Flutter local cd /home/pierre/dev/votre-projet-flutter # Ajouter GitHub comme remote supplémentaire git remote add github https://github.com/votre-username/votre-projet.git # Vérifier les remotes git remote -v # origin https://votre-gitea.com/user/projet.git (fetch) # origin https://votre-gitea.com/user/projet.git (push) # github https://github.com/user/projet.git (fetch) # github https://github.com/user/projet.git (push) ``` ### 1.3 Push initial vers GitHub ```bash # Push toutes les branches vers GitHub git push github --all git push github --tags ``` ## Étape 2 : Automatisation Gitea → GitHub ### 2.1 Script de synchronisation Créer un script `sync-github.sh` dans votre projet : ```bash #!/bin/bash # sync-github.sh echo "🔄 Synchronisation vers GitHub..." # Push vers Gitea (origine) git push origin # Push vers GitHub (miroir) git push github echo "✅ Synchronisation terminée" ``` ```bash # Rendre le script exécutable chmod +x sync-github.sh # Utilisation ./sync-github.sh ``` ### 2.2 Hook Git automatique (optionnel) ```bash # Dans .git/hooks/post-commit #!/bin/bash git push github ``` ## Étape 3 : Configuration Apple Developer ### 3.1 Récupérer les certificats 1. **Apple Developer** → Certificates 2. Télécharger le **Distribution Certificate** 3. Télécharger le **Provisioning Profile** (App Store) ### 3.2 Convertir en format P12 ```bash # Si vous avez le certificat .cer # L'ouvrir dans Keychain Access (macOS) ou utiliser OpenSSL # Exporter au format .p12 avec mot de passe ``` ### 3.3 Informations nécessaires Noter : - **Team ID** (dans Apple Developer Account) - **Bundle ID** (com.votredomaine.votreapp) - **Mot de passe du certificat P12** ## Étape 4 : Configuration Codemagic ### 4.1 Inscription et connexion 1. Aller sur [codemagic.io](https://codemagic.io) 2. S'inscrire avec GitHub 3. Autoriser l'accès à vos dépôts ### 4.2 Ajouter le projet 1. **Add application from repository** 2. Sélectionner votre dépôt GitHub 3. **Flutter App** comme type de projet ### 4.3 Configuration de base ```yaml # codemagic.yaml à créer dans la racine du projet workflows: ios-workflow: name: iOS Workflow instance_type: mac_mini_m1 max_build_duration: 120 environment: flutter: stable groups: - app_store_credentials vars: APP_STORE_APPLE_ID: votre-apple-id@example.com BUNDLE_ID: com.votredomaine.votreapp scripts: - name: Set up code signing settings on Xcode project script: | xcode-project use-profiles - name: Get Flutter packages script: | flutter packages pub get - name: Flutter analyze script: | flutter analyze - name: Flutter unit tests script: | flutter test - name: Install pods script: | find . -name "Podfile" -execdir pod install \; - name: Flutter build ipa script: | flutter build ipa --release \ --build-name=1.0.$BUILD_NUMBER \ --export-options-plist=/Users/builder/export_options.plist artifacts: - build/ios/ipa/*.ipa - /tmp/xcodebuild_logs/*.log - flutter_drive.log publishing: app_store_connect: auth: integration submit_to_testflight: true beta_groups: - App Store Connect Users ``` ### 4.4 Upload des certificats 1. **App settings** → **Environment variables** 2. Créer un groupe **app_store_credentials** 3. Upload : - **APP_STORE_CONNECT_ISSUER_ID** - **APP_STORE_CONNECT_KEY_IDENTIFIER** - **APP_STORE_CONNECT_PRIVATE_KEY** - **CERTIFICATE_PRIVATE_KEY** (contenu du .p12 en base64) - **CERTIFICATE_PASSWORD** ### 4.5 Configuration App Store Connect API 1. **App Store Connect** → Users and Access → Integrations 2. Générer une **App Store Connect API Key** 3. Télécharger le fichier .p8 4. Noter l'**Issuer ID** et **Key ID** ## Étape 5 : Configuration iOS spécifique ### 5.1 Vérifier ios/Runner.xcodeproj ```xml CFBundleIdentifier com.votredomaine.votreapp CFBundleVersion $(FLUTTER_BUILD_NUMBER) CFBundleShortVersionString $(FLUTTER_BUILD_NAME) ``` ### 5.2 Signing Configuration ```bash # ios/Runner.xcodeproj/project.pbxproj # Vérifier que le PRODUCT_BUNDLE_IDENTIFIER correspond PRODUCT_BUNDLE_IDENTIFIER = com.votredomaine.votreapp; ``` ## Étape 6 : Premier build TestFlight ### 6.1 Préparer le build ```bash # Dans votre projet Flutter # Incrémenter la version dans pubspec.yaml version: 1.0.1+2 # Commit et push git add . git commit -m "feat: préparation build TestFlight v1.0.1" ./sync-github.sh ``` ### 6.2 Lancer le build sur Codemagic 1. **Codemagic Dashboard** → votre projet 2. **Start new build** 3. Sélectionner la branche `main` 4. **iOS Workflow** 5. **Start build** ### 6.3 Suivre le build - Durée estimée : 15-25 minutes - Vérifier les logs en cas d'erreur - L'IPA sera automatiquement envoyé à TestFlight ## Étape 7 : Validation TestFlight ### 7.1 Dans App Store Connect 1. **TestFlight** → votre app 2. Vérifier le nouveau build 3. Ajouter des **Release Notes** 4. **Submit for Review** (si nécessaire) ### 7.2 Inviter des testeurs 1. **TestFlight** → **Internal Testing** 2. Ajouter des testeurs internes 3. Ou créer des groupes de **External Testing** ## Script complet d'automatisation ```bash #!/bin/bash # deploy-ios.sh echo "🚀 Déploiement iOS automatisé" # Vérifications préalables if [ -z "$1" ]; then echo "❌ Version manquante. Usage: ./deploy-ios.sh 1.0.1" exit 1 fi VERSION=$1 BUILD_NUMBER=$(git rev-list --count HEAD) echo "📝 Version: $VERSION+$BUILD_NUMBER" # Mise à jour de pubspec.yaml sed -i "s/version: .*/version: $VERSION+$BUILD_NUMBER/" pubspec.yaml # Tests locaux echo "🧪 Tests Flutter..." flutter test if [ $? -ne 0 ]; then echo "❌ Tests échoués" exit 1 fi # Commit et push git add . git commit -m "release: v$VERSION build $BUILD_NUMBER" ./sync-github.sh echo "✅ Code pushé vers GitHub" echo "🔗 Allez sur Codemagic pour lancer le build iOS" echo "📱 TestFlight sera mis à jour automatiquement" ``` ## Utilisation quotidienne ```bash # Développement normal git add . git commit -m "feat: nouvelle fonctionnalité" ./sync-github.sh # Déploiement TestFlight ./deploy-ios.sh 1.0.2 ``` ## Dépannage courant ### Erreur de certificat - Vérifier que le Bundle ID correspond - Régénérer le Provisioning Profile - Vérifier la date d'expiration ### Build qui échoue - Vérifier les logs Codemagic - Tester `flutter build ios` localement - Vérifier les variables d'environnement ### TestFlight ne reçoit pas le build - Vérifier la configuration App Store Connect API - Contrôler les permissions du certificat --- **Temps estimé de configuration** : 2-3 heures **Coût** : Gratuit (500 min/mois Codemagic) **Prochaines publications** : ~10 minutes par build