Automatizador de Envíos a App Store y Google Play
Experto en automatizar envíos a App Store y Google Play con Fastlane, generación de capturas de pantalla, gestión de metadatos y optimización de revisiones.
Puntos de Decisión
Cuándo usar Despliegue Gradual vs Completo
SI es la primera versión de la app O hay cambios importantes de funcionalidad:
└── Usar despliegue gradual: 10% → 50% → 100% durante 7 días
└── Monitorear tasas de fallos y comentarios de usuarios en cada etapa
SI NO, si es un hotfix o actualización menor:
└── SI es un parche de seguridad crítico:
└── Despliegue completo inmediatamente
SI NO:
└── Usar 50% → 100% durante 2-3 días
Matriz de Decisión para Renovación de Certificados
| Escenario | Días hasta Vencimiento | Acción |
|---|---|---|
| Certificado de distribución | < 30 días | Ejecutar fastlane match nuke distribution, luego regenerar |
| Certificado de desarrollo | < 30 días | Ejecutar fastlane match nuke development |
| Perfil de aprovisionamiento | < 14 días | Ejecutar match con force_for_new_devices: true |
| Certificado push | < 30 días | Regenerar en el Portal de Desarrolladores de Apple, actualizar el servidor |
Selección del Tipo de Envío
SI se necesitan pruebas internas:
├── iOS: Usar grupos externos de TestFlight (hasta 10,000 testers)
└── Android: Usar track interno (hasta 100 testers)
SI NO, si es beta pública:
├── iOS: Usar enlace público de TestFlight
└── Android: Usar track cerrado con URL de suscripción
SI NO, si está listo para producción:
├── Verificar que se cumplen todos los requisitos de la tienda (ver Quality Gates)
└── Usar track de producción/lanzamiento
Modos de Fallo
Discrepancia de Credenciales de Match
- Síntoma: "No certificate found" o "Profile doesn't match certificate"
- Diagnóstico: Repositorio Git desincronizado o un miembro del equipo generó certificados manualmente
- Solución: Ejecutar
fastlane match nuke, regenerar todos los certificados, confirmar en el repositorio de match
Rechazo en Revisión de la App - Información Faltante
- Síntoma: "Necesitamos información adicional para revisar tu aplicación"
- Diagnóstico: Faltan credenciales de demostración, información de contacto o notas de revisión
- Solución: Agregar demo_user.txt, demo_password.txt y detailed_notes.txt en fastlane/metadata/review_information/
Tiempo de Compilación Agotado en Apps Grandes
- Síntoma: Fastlane agota el tiempo de espera durante el paso
build_app - Diagnóstico: Tamaño de la app > 2GB o proceso de compilación complejo
- Solución: Agregar
build_timeout: 7200a la acción build_app, habilitar compilaciones incrementales
Fallo en la Generación de Capturas de Pantalla
- Síntoma: snapshot/screengrab produce capturas en blanco o incorrectas
- Diagnóstico: Las pruebas de UI no esperan animaciones o usan simuladores incorrectos
- Solución: Agregar esperas explícitas en las pruebas de UI, verificar que los nombres de los simuladores coincidan con la lista de dispositivos en Snapfile
Límite de Caracteres de Metadatos Superado
- Síntoma: La subida falla con error "Descripción demasiado larga"
- Diagnóstico: Los metadatos localizados superan los límites de la plataforma (App Store: 4000 caracteres, Play Store: 4000 caracteres)
- Solución: Ejecutar
fastlane precheckantes del envío, recortar las descripciones a los límites de la plataforma
Ejemplo Práctico
Escenario: Configurar envío automatizado para una app React Native con objetivos iOS y Android
Evaluación inicial:
- La app tiene un proceso de envío manual existente
- Un equipo de 4 desarrolladores necesita firma de código compartida
- Se requiere despliegue gradual y automatización de capturas de pantalla
Paso 1: Decisión de Configuración
# En la raíz del proyecto
fastlane init
# Elegir opción 4 (Configuración manual)
Punto de Decisión Alcanzado: Estrategia de gestión de certificados
- Opción novata: Usar firma automática de Xcode (falla en CI)
- Opción experta: Configurar match para compartir certificados entre el equipo
Paso 2: Configurar Match
# fastlane/Matchfile
git_url("https://github.com/company/certificates")
storage_mode("git")
type("appstore") # También soporta: development, adhoc
Paso 3: Crear Lanes (Decisión Clave: Beta vs Producción)
# fastlane/Fastfile
desc "Envío a TestFlight con incremento de número de compilación"
lanes :beta do
setup_ci if ENV['CI']
match(type: "appstore", readonly: true)
# Decisión: Siempre incrementar compilación, versión solo para lanzamientos
increment_build_number(build_number: ENV['BUILD_NUMBER'])
build_app(workspace: "ios/MyApp.xcworkspace", scheme: "MyApp")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
Consejo de Experto: Usa siempre skip_waiting_for_build_processing: true en CI para evitar tiempos de espera
Paso 4: Validación Antes del Primer Envío
- Ejecutar
fastlane precheckpara validar metadatos - Probar en un solo dispositivo antes de la automatización completa de capturas
- Verificar que el entorno CI tenga la versión correcta de Xcode
Resultado: Pipeline automatizado que reduce el tiempo de envío de 45 minutos a 8 minutos
Quality Gates
Lista de verificación previa al envío que debe pasar antes de ejecutar lanes de producción:
-
fastlane precheckse ejecuta sin advertencias - Todos los archivos de metadatos requeridos existen en fastlane/metadata/[locale]/
- Capturas de pantalla generadas para todos los tamaños de dispositivo requeridos (iPhone 6.9", 6.3", iPad 13")
- Número de versión incrementado respecto al lanzamiento anterior
- El número de compilación es único y mayor que el último de TestFlight
- Los certificados de firma de código son válidos por más de 30 días
- Credenciales de demostración proporcionadas en review_information/ (si la app requiere inicio de sesión)
- Porcentaje de despliegue gradual configurado (se recomienda empezar en 10%)
- Variables de entorno del CI configuradas: FASTLANE_USER, MATCH_PASSWORD, FASTLANE_SESSION
- Todas las localizaciones completas para los mercados objetivo
- Icono de la app y activos requeridos presentes en los formatos correctos
Límites de Uso (NO-FOR)
NO utilices este skill para:
-
Configuración de Pipelines CI/CD → Usa
github-actions-pipeline-builderen su lugar- Este skill asume que CI ya existe; no crea flujos de trabajo/pipelines
-
Decisiones de Arquitectura de la App → Usa
react-native-architecten su lugar- Este skill maneja el despliegue, no la estructura del código ni la navegación
-
Analíticas y Reporte de Fallos → Usa
mobile-analytics-crash-reporting-experten su lugar- Este skill se enfoca en el envío a tiendas, no en la monitorización post-lanzamiento
-
Optimización en la Tienda de Aplicaciones (ASO) → Usa un especialista ASO dedicado
- Este skill maneja el envío técnico, no la optimización de palabras clave ni la conversión
-
Desarrollo de APIs Backend → Usa
api-architecten su lugar- Este skill asume que el backend de tu app está listo para producción
Cuándo delegar:
- Para problemas de configuración de compilación →
react-native-architect - Para configuración de CI/CD desde cero →
github-actions-pipeline-builder - Para monitoreo de rendimiento de la app →
mobile-analytics-crash-reporting-expert