# 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