Xcode vs VS Code
El IDE oficial de Apple, Xcode, se enfrenta al popular editor de Microsoft, VS Code, en el desarrollo iOS. ¿Qué herramienta es más eficiente para ti?
Estrategia de ramificación estructurada — main, develop, feature, release, hotfix
Una sola rama principal, commits frecuentes, despliegue seguro con feature flags
| Categoría | Git Flow | Trunk-Based Development |
|---|---|---|
| Rendimiento | 6/10 | 9/10 |
| Facilidad de aprendizaje | 5/10 | 7/10 |
| Ecosistema | 8/10 | 9/10 |
| Comunidad | 8/10 | 9/10 |
| Mercado laboral | 8/10 | 9/10 |
| A prueba de futuro | 5/10 | 10/10 |
# Git Flow - Ejemplo de flujo de trabajo completo
# Configuración inicial
git flow init -d
# Ramas: main, develop, feature/, release/, hotfix/
# Desarrollo de nueva función
git flow feature start user-profile-redesign
# → se creó la rama feature/user-profile-redesign
# Proceso de desarrollo
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"
# Función completada — fusionar con develop
git flow feature finish user-profile-redesign
# → la rama feature se eliminó, se fusionó con develop
# Preparación del release
git flow release start 2.4.0
# → se creó la rama release/2.4.0
# ¡En la rama release solo correcciones de errores!
git commit -m "fix: avatar cache invalidation on logout"
git commit -m "chore: bump version to 2.4.0"
# Release completado
git flow release finish 2.4.0
# → merge a main, se creó el tag (v2.4.0), merge de vuelta a develop
# Detección de error en producción
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
# → merge a main y develop, tag v2.4.1# Trunk-Based Development - Flujo de trabajo diario
# Cada mañana: empieza actualizado
git pull origin main
# Rama feature corta (¡máx. 1-2 días!)
git checkout -b feat/quick-login-improvement
# Commits pequeños y atómicos
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"
# Merge inmediato al trunk (¡aunque no esté terminado, con 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
# Ocultar función incompleta con 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 {
// Leer desde remote config o desde un override local
return RemoteConfig.shared.bool(forKey: flag.rawValue)
}
}
// Uso en la vista
if FeatureFlagService.isEnabled(.newLoginUI) {
NewLoginView()
} else {
LegacyLoginView()
}
# CI/CD pipeline (GitHub Actions)
# .github/workflows/ci.yml:
# on: push (branches: [main])
# → lint → test → build → deploy staging → smoke test → deploy productionPara servicios web y productos SaaS, Trunk-Based Development es el estándar moderno — encaja perfectamente con CI/CD e iteración rápida. Para apps iOS, una versión aligerada de Git Flow (solo ramas main + feature) es práctica: el proceso de revisión de la App Store y los ciclos de versión se adaptan mejor a esta estructura. GitHub Flow (main + ramas feature de corta duración) es un buen punto intermedio.
Solicita una consultoría gratuitaGitHub Flow es una versión simplificada: solo existen main y ramas feature. No hay rama release ni rama develop. Es el punto intermedio ideal para equipos pequeños-medianos.