Xcode vs VS Code
L'IDE officiel d'Apple, Xcode, face à l'éditeur populaire de Microsoft, VS Code, pour le développement iOS. Quel outil est le plus efficace pour vous ?
Une stratégie de branches structurée — main, develop, feature, release, hotfix
Une seule branche principale, commits fréquents, déploiement sécurisé via feature flags
| Catégorie | Git Flow | Trunk-Based Development |
|---|---|---|
| Performance | 6/10 | 9/10 |
| Facilité d'apprentissage | 5/10 | 7/10 |
| Écosystème | 8/10 | 9/10 |
| Communauté | 8/10 | 9/10 |
| Marché de l'emploi | 8/10 | 9/10 |
| Pérennité | 5/10 | 10/10 |
# Git Flow - Exemple de workflow complet
# Configuration initiale
git flow init -d
# Branches : main, develop, feature/, release/, hotfix/
# Développement d'une nouvelle fonctionnalité
git flow feature start user-profile-redesign
# → la branche feature/user-profile-redesign est créée
# Processus de développement
git add src/views/ProfileView.swift
git commit -m "feat(profile): redesign user profile card"
git add src/viewmodels/ProfileViewModel.swift
git commit -m "feat(profile): add avatar lazy loading"
# Fonctionnalité terminée — fusionner dans develop
git flow feature finish user-profile-redesign
# → la branche feature est supprimée, fusionnée dans develop
# Préparation de la release
git flow release start 2.4.0
# → la branche release/2.4.0 est créée
# Sur la branche release, uniquement des corrections de bugs !
git commit -m "fix: avatar cache invalidation on logout"
git commit -m "chore: bump version to 2.4.0"
# Release terminée
git flow release finish 2.4.0
# → fusion dans main, tag créé (v2.4.0), fusion retour dans develop
# Détection d'un incident en production
git flow hotfix start fix-crash-on-launch
git commit -m "fix: nil pointer in AppDelegate startup"
git flow hotfix finish fix-crash-on-launch
# → fusion dans main et develop, tag v2.4.1# Trunk-Based Development - Workflow quotidien
# Chaque matin : démarrer à jour
git pull origin main
# Branche de fonctionnalité courte (max 1-2 jours !)
git checkout -b feat/quick-login-improvement
# Commits petits et atomiques
git add src/views/LoginView.swift
git commit -m "feat: add biometric login button"
git add tests/LoginTests.swift
git commit -m "test: biometric auth unit tests"
# Fusion immédiate dans le trunk (même incomplet, grâce au feature flag !)
git checkout main
git pull origin main
git merge feat/quick-login-improvement
git push origin main
git branch -d feat/quick-login-improvement
# Masquer une fonctionnalité incomplète avec un feature flag (Swift)
# FeatureFlags.swift
enum FeatureFlag: String {
case newLoginUI = "new_login_ui"
case profileV2 = "profile_v2"
case darkModeV3 = "dark_mode_v3"
}
class FeatureFlagService {
static func isEnabled(_ flag: FeatureFlag) -> Bool {
// Lire depuis remote config ou un override local
return RemoteConfig.shared.bool(forKey: flag.rawValue)
}
}
// Utilisation dans la vue
if FeatureFlagService.isEnabled(.newLoginUI) {
NewLoginView()
} else {
LegacyLoginView()
}
# Pipeline CI/CD (GitHub Actions)
# .github/workflows/ci.yml :
# on: push (branches: [main])
# → lint → test → build → deploy staging → smoke test → deploy productionPour les services web et produits SaaS, Trunk-Based Development est le standard moderne — excellente compatibilité CI/CD, itération rapide. Pour les applications iOS, une version allégée de Git Flow (uniquement main + branches de fonctionnalité) est pratique : le processus de revue de l'App Store et les cycles de version s'adaptent mieux à cette structure. GitHub Flow (main + branches de fonctionnalité de courte durée) constitue un bon compromis.
Obtenir une consultation gratuiteGitHub Flow est une version simplifiée : il n'y a que les branches main et feature. Pas de branche release, pas de branche develop. Un compromis idéal pour les équipes petites à moyennes.