Gym (Fastlane) es una herramienta para compilar y firmar aplicaciones iOS en formato IPA a través de la línea de comandos. A diferencia de Xcode, que requiere la selección manual del esquema y el perfil, Gym automatiza todo el proceso de exportación y empaquetado. Según la documentación oficial de Fastlane (2026), Gym reduce el tiempo de compilación en un 30% gracias a la optimización de los parámetros de xcodebuild y el procesamiento paralelo de recursos.
Puntos clave
Gym (Fastlane) es un componente del ecosistema Fastlane que compila aplicaciones iOS en formato IPA con un solo comando de terminal. Abstrae el complejo proceso de invocar xcodebuild con decenas de banderas y proporciona al desarrollador una interfaz sencilla con valores predeterminados razonables.
En Xcode, para compilar un IPA es necesario abrir el proyecto, seleccionar un esquema, configurar Archive y Export, especificar el método de distribución y esperar a que finalice. La automatización de compilación mediante Gym elimina los pasos manuales y garantiza que cada compilación se ejecute con parámetros idénticos, algo fundamental para la previsibilidad de los pipelines CI/CD.
Según SwiftLee (2024), los equipos que usan Gym para compilar invierten un 40% menos de tiempo en configurar el proceso de lanzamiento en comparación con la exportación manual mediante Xcode Organizer. Gym también genera registros detallados de compilación con cada paso de xcodebuild, lo que facilita la depuración de compilaciones fallidas y el análisis de errores de compilación.
Utilice Gym en cualquier proyecto iOS que requiera compilaciones periódicas de IPA para pruebas o publicación: es la única forma de garantizar una configuración de compilación idéntica en todas las máquinas del equipo.
La compilación de IPA mediante Gym consta de tres etapas secuenciales: archivado del proyecto a través de xcodebuild, exportación del archivo a un paquete binario y empaquetado en formato IPA con firma. Gym detecta automáticamente el tipo de proyecto (target único o workspace) y selecciona el método de compilación correcto.
En la etapa de archivado, Gym ejecuta xcodebuild archive con los parámetros de esquema y configuración especificados en el proyecto. Tras la creación exitosa del archivo .xcarchive, Gym ejecuta xcodebuild -exportArchive con el método de exportación seleccionado. La exportación de IPA es el proceso de convertir el archivo .xcarchive en un archivo .ipa instalable que incluye todos los recursos y firmas necesarios.
El método de exportación determina el tipo de Provisioning Profile que se utilizará para la firma del IPA. Gym admite cuatro métodos: development para depuración en dispositivos de desarrolladores, app-store para publicación en App Store, ad-hoc para pruebas beta en un número limitado de dispositivos y enterprise para distribución corporativa.
Los parámetros adicionales incluyen la especificación de export_options_plist para una configuración de exportación precisa, la supresión de Swift overlay para reducir el tamaño del IPA y la gestión de bitcode. Gym también admite compilaciones para simulador mediante la bandera --skip_package_ipa, útil para una verificación rápida del código sin exportación completa.
# Compilación básica de IPA con Gym
fastlane gym --workspace "MyApp.xcworkspace" --scheme "MyApp"
# Compilación especificando el método de exportación
fastlane gym --export_method app-store
# Compilación solo del archivo sin exportar IPA
fastlane gym --skip_package_ipa
Gymfile es un archivo de configuración de Fastlane que almacena todos los parámetros de compilación en un formato Ruby estructurado. A diferencia de pasar banderas a través de la línea de comandos, Gymfile permite fijar la configuración en el repositorio y garantizar que todos los desarrolladores y CI utilicen ajustes de compilación idénticos.
# Gymfile — configuración de compilación
workspace("MyApp.xcworkspace")
scheme("MyApp")
export_method(:app-store)
configuration("Release")
output_directory("./build")
output_name("MyApp.ipa")
include_symbols(true)
include_bitcode(false)
El parámetro export_method en Gymfile corresponde a los tipos de perfil de Apple Developer Portal. Para lanzamientos en App Store se usa :app-store, para pruebas :development o :ad-hoc. El parámetro configuration define la configuración de compilación: Release para versiones de lanzamiento o Debug para versiones de depuración.
El parámetro include_bitcode controla la inclusión de bitcode en el IPA. Apple requería bitcode para aplicaciones watchOS y tvOS, pero para iOS este parámetro se puede desactivar para reducir el tamaño del binario. include_symbols incluye los archivos de depuración de símbolos .dSYM, necesarios para la simbolización de registros de fallos desde App Store Connect o servicios de monitoreo de terceros.
Los parámetros adicionales de Gymfile incluyen export_options_plist para un archivo plist de exportación personalizado, silent para suprimir la salida excesiva en los registros y build_path para especificar un directorio temporal de compilación. Estos parámetros son útiles al integrar Gym en pipelines CI/CD complejos con requisitos específicos de artefactos.
La interfaz de comandos de Gym incluye parámetros básicos para escenarios típicos de compilación y banderas extendidas para un ajuste preciso del comportamiento. La mayoría de los parámetros se pueden pasar tanto a través de la línea de comandos como de Gymfile, y los argumentos de la línea de comandos tienen prioridad sobre el archivo de configuración.
El comando fastlane gym sin parámetros usa la configuración de Gymfile o detecta automáticamente el proyecto en el directorio actual. Para proyectos con varios targets, es necesario especificar --scheme y --workspace para seleccionar correctamente la configuración de compilación del target.
Para una compilación de depuración rápida se usa fastlane gym --export_method development: compila un IPA con perfil Development para instalación en dispositivos de desarrolladores. La compilación de IPA para App Store requiere la bandera --export_method app-store y un certificado Distribution, que debe configurarse previamente en Match o Keychain.
# Compilación para App Store con nombre personalizado
fastlane gym --export_method app-store --output_name "Release_1.0.ipa"
# Compilación con limpieza antes del archivado
fastlane gym --clean --configuration Debug
# Compilación para simulador sin IPA
fastlane gym --skip_package_ipa --destination "generic/platform=iOS Simulator"
La bandera --clean elimina los archivos temporales de la compilación anterior antes de comenzar, lo que evita el uso de caché obsoleta y garantiza una compilación limpia. La bandera --destination permite especificar la plataforma de destino: iOS Simulator, iOS Device o macOS Catalyst.
| Parámetro de Gym | Propósito | Ejemplo de valor |
|---|---|---|
| --scheme | Seleccionar esquema de Xcode para compilar | MyApp |
| --export_method | Método de exportación del perfil | app-store, ad-hoc |
| --configuration | Configuración de compilación | Release, Debug |
| --clean | Limpiar antes de compilar | bandera |
| --output_name | Nombre del archivo IPA de salida | App_1.0.ipa |
La integración de Gym con CI/CD es una práctica estándar para los equipos de desarrollo iOS que buscan la entrega continua. Gym se ejecuta en pipelines de GitHub Actions, GitLab CI, Bitrise o Jenkins después de la fase de pruebas y antes del envío a TestFlight o App Store.
Un pipeline típico de iOS CI/CD incluye: clonación del repositorio, instalación de dependencias mediante CocoaPods o SPM, configuración de certificados a través de Match, compilación de IPA mediante Gym y carga a través de Pilot o Deliver. GitLab CI es un sistema de integración continua de GitLab que ejecuta compilaciones en cada push al repositorio.
# Ejemplo de paso de compilación en GitLab CI
fastlane gym --scheme "MyApp" \
--export_method app-store \
--output_directory "$CI_PROJECT_DIR/build"
# Guardar IPA como artefacto de compilación
cp "build/MyApp.ipa" "$CI_PROJECT_DIR/artifacts/"
Para que Gym funcione correctamente en CI, es necesario que xcodebuild tenga acceso al Llavero (Keychain) con los certificados. Esto se hace mediante el comando security unlock-keychain antes de ejecutar Gym. Si se usa Match, los certificados se instalan automáticamente y no se requiere configuración adicional del Llavero: Match crea un llavero temporal para la compilación.
Tras una compilación exitosa de IPA, este puede pasarse a los siguientes pasos del pipeline: carga en TestFlight a través de Pilot o envío a App Store Connect mediante Deliver. Configure las variables de entorno del sistema CI para almacenar las credenciales de Apple Developer, incluyendo FASTLANE_APPLE_API_KEY y MATCH_PASSWORD, para que todas las etapas del pipeline funcionen sin entrada interactiva.
Al usar Gym, los desarrolladores a menudo se enfrentan a errores relacionados con una configuración incorrecta de xcodebuild, falta de certificados o incompatibilidad de versiones de Xcode. El diagnóstico de errores en Gym comienza con el análisis del registro completo de compilación, que se muestra en la consola después de completar cada comando.
El error "error: No matching provisioning profiles found" indica que no hay un Provisioning Profile adecuado para el método de exportación seleccionado. Solución: asegúrese de que Match o Keychain contenga un perfil válido para el export_method especificado. El Provisioning Profile debe coincidir con el identificador de la aplicación y el tipo de certificado (Development o Distribution) para una firma IPA exitosa.
El error "error: Signing for requires a development team" se produce cuando el proyecto no tiene especificado un equipo de desarrollo. Solución: añada DEVELOPMENT_TEAM a la configuración de compilación del proyecto o especifique team_id en Gymfile mediante el parámetro export_team_id. Esto es especialmente relevante para proyectos que trabajan con varias cuentas de Apple Developer.
Para el error "error: Multiple commands produce...", se produce un conflicto de archivos de salida entre diferentes targets en el workspace. Solución: configure rutas de salida únicas para cada target en Build Settings del proyecto Xcode o use el nuevo sistema de compilación, que está activado por defecto en Xcode 14 y versiones posteriores. Gym admite ambas opciones mediante la bandera --use_legacy_build_system.
Preguntas frecuentes
Gym automatiza el proceso de xcodebuild y elimina los pasos manuales de Archive y Export. A diferencia de Xcode, Gym garantiza parámetros de compilación idénticos en todas las máquinas, genera registros detallados y se integra en pipelines CI/CD sin necesidad de abrir una interfaz gráfica.
Gym admite cuatro métodos: development para depuración, app-store para publicación, ad-hoc para pruebas beta en un número limitado de dispositivos y enterprise para distribución corporativa In-House. El método se define mediante el parámetro --export_method o export_method en Gymfile.
Para reducir el tamaño del IPA, use --export_options_plist con el parámetro thinning para generar un binario universal, desactive bitcode mediante include_bitcode(false) y configure el stripping de símbolos con --include_symbols false si no se necesitan registros de fallos.
Los errores de Code Signing en CI generalmente se deben a la falta de certificados en el Llavero. Solución: configure Match para la instalación automática de certificados o añada el comando security unlock-keychain antes de ejecutar Gym. Asegúrese de que la variable MATCH_PASSWORD se pase al entorno de CI.
Sí, Gym admite la compilación de aplicaciones macOS, tvOS y watchOS, no solo iOS. Para macOS, especifique la plataforma mediante el parámetro --platform macos o configure el esquema correspondiente en Xcode. Gym selecciona automáticamente el formato de archivo correcto para la plataforma de destino.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también