305 lines
7.5 KiB
Markdown
305 lines
7.5 KiB
Markdown
# 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
|
|
<!-- ios/Runner/Info.plist -->
|
|
<key>CFBundleIdentifier</key>
|
|
<string>com.votredomaine.votreapp</string>
|
|
<key>CFBundleVersion</key>
|
|
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
|
<key>CFBundleShortVersionString</key>
|
|
<string>$(FLUTTER_BUILD_NAME)</string>
|
|
```
|
|
|
|
### 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 |