Gestión de configuraciones en desarrollo móvil: qué es, qué opciones hay y cómo configurarla

Autor: IT Sectr Publicado: 2026-05-30 Tiempo de lectura: 8 min

La gestión de configuraciones es uno de los aspectos más infravalorados del desarrollo móvil. Según CloudBees (2025), el 47% de los incidentes en producción están relacionados con configuraciones de compilación incorrectas. La configuración adecuada de Build Variant, Scheme y archivos .env es la clave para un CI/CD estable y lanzamientos predecibles.

Puntos clave

  • La gestión de configuraciones en aplicaciones móviles se basa en Build Variant (Android), Scheme (iOS) y .env (multiplataforma) — el 47% de los incidentes en producción están relacionados con configuraciones incorrectas.
  • iOS utiliza Scheme + .xcconfig. Scheme gestiona la compilación, las pruebas y el archivado. .xcconfig traslada la configuración de compilación a archivos.
  • Las herramientas multiplataforma — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (variables de entorno) — centralizan la configuración.
  • Compilación condicional — inclusión/exclusión de código en tiempo de compilación. #if DEBUG, BuildConfig.DEBUG — para depuración sin cambiar el comportamiento de la versión de lanzamiento.
  • Las claves API y los secretos no deben almacenarse en el código. Utilice .env, Build Config o un servidor proxy. Descompilar .apk/.ipa es trivial.

Gestión de configuraciones en Android: Build Variant y build.gradle

Build Variant — una combinación de Build Type (debug/release/staging) y Product Flavor (free/paid, demo/full). Gradle crea automáticamente un variant para cada combinación: freeDebug, freeRelease, paidDebug, paidRelease. Cada variant puede tener su propio código, recursos y dependencias — esta es la base de la gestión de configuraciones en aplicaciones móviles en Android.

Build Variant vs Product Flavor

Build Type — configuraciones de compilación: si la depuración está habilitada, firma, optimización ProGuard. debug por defecto contiene debuggable=true, release — minifyEnabled=true.

Product Flavor — variante de la aplicación: gratuita (free), de pago (paid), demo. Los flavours pueden tener diferentes applicationId, recursos y dependencias de SDK.

groovy
// build.gradle — configuración de flavours de producto en Android
android {
    productFlavors {
        free {
            applicationId "com.example.app.free"
            versionName "1.0-free"
        }
        paid {
            applicationId "com.example.app.paid"
            versionName "1.0-paid"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

El ejemplo crea dos flavours: free y paid. Se establece un applicationId separado para free — esto permite instalar ambas aplicaciones en un mismo dispositivo. BuildConfig se genera para cada variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Utilice BuildConfig en el código para lógica condicional.

settings.gradle y Gradle KTS

settings.gradle — el archivo raíz de Gradle que describe los módulos del proyecto.

Gradle KTS — una alternativa a Groovy usando Kotlin DSL. KTS proporciona autocompletado en Android Studio y verificación de tipos. Recomendado para proyectos nuevos.

Gestión de configuraciones en iOS: Scheme y .xcconfig

La gestión de configuraciones en iOS se basa en Scheme — una configuración de Xcode que define qué y cómo compilar: Build Configuration (Debug/Release), pruebas, análisis, archivado. Los esquemas se pueden duplicar para diferentes entornos (Development, Staging, Production). Los esquemas se almacenan en archivos .xcscheme en la carpeta xcshareddata.

Archivos .xcconfig

.xcconfig — un archivo de configuración de Xcode que almacena la configuración de compilación en formato de texto. Para la gestión de configuraciones en aplicaciones móviles, iOS utiliza .xcconfig: versionado en Git, reutilización entre proyectos, menos configuraciones manuales. En .xcconfig se definen SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.

Info.plist — el archivo de metadatos de la aplicación. Almacena la versión, el identificador, los permisos. Info.plist puede ser diferente para cada Scheme — a través de Info.plist File en Build Settings.

AndroidManifest.xml — el equivalente en Android: almacena permisos, componentes, metadatos.

Scheme vs Build Configuration

Scheme — el escenario de compilación (qué hacer). Build Configuration — el conjunto de configuraciones (cómo hacerlo). Un Scheme utiliza una Build Configuration (Debug o Release). Para CI/CD: configure la acción Archive en Release y la acción Test en Debug en un mismo Scheme.

Gestión de configuraciones en Flutter y React Native: pubspec.yaml, Podfile, .env

pubspec.yaml — el archivo de configuración del proyecto Flutter. Contiene dependencias, versiones, recursos. Admite variables de entorno a través de --dart-define.

Podfile — el gestor de dependencias CocoaPods para iOS. Define las versiones de las librerías y la plataforma.

.env — un archivo con variables de entorno para todas las plataformas. Flutter y React Native utilizan un enfoque diferente para la gestión de configuraciones: dart-define en Flutter, react-native-config en React Native. La gestión de configuraciones en proyectos multiplataforma involucra diferentes herramientas según el stack.

.env y Variables de Entorno

.env — un archivo de texto con pares clave=valor. No se sube a Git (añadir a .gitignore). Para Flutter — flutter_dotenv, para iOS — Config.xcconfig con #include, para Android — BuildConfig. Variables de entorno: API_URL, SENTRY_DSN, APP_SECRET. En la gestión de configuraciones en desarrollo móvil, .env es el estándar de facto para almacenar secretos fuera del repositorio.

Podfile y pubspec.yaml

Podfile describe las dependencias de CocoaPods y la plataforma (platform :ios, '15.0'). pubspec.yaml para Flutter — dependencies y dev_dependencies. Ambos admiten dependencias condicionales: pod 'Analytics', :configs => ['Release'] o flutter pub add --flavor free. En IT Sectr, utilizamos .env + BuildConfig para secretos y Podfile para dependencias nativas en proyectos móviles.

Parámetro Android iOS Flutter
Unidad de configuraciónBuild VariantSchemeFlavor (--flavor)
Archivo de compilaciónbuild.gradle.xcconfigpubspec.yaml
Código condicionalBuildConfigActive Compilation Conditionsdart-define
SecretosBuildConfig/NDK.xcconfig.env/dart-define
Gestor de dependenciasGradle (Maven)SPM/CocoaPodspub (dart)

La tabla muestra las diferencias clave en la gestión de configuraciones entre plataformas móviles. Android ofrece más flexibilidad a través de Build Variant. iOS es más simple pero menos flexible. Flutter centraliza la configuración en dart-define, pero las dependencias nativas aún requieren configurar Podfile/build.gradle.

Compilación condicional en la gestión de configuraciones

Compilación condicional — inclusión o exclusión de código en tiempo de compilación según banderas. Esto es parte de la gestión de configuraciones: permite integrar herramientas de depuración (registro, inspector) en compilaciones debug y eliminarlas de release. La implementación difiere entre plataformas.

Compilación condicional en Swift

#if DEBUG — directiva de preprocesador de Swift. El código dentro del bloque se compila solo en la configuración Debug. Otras banderas: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions en Build Settings — añada banderas personalizadas mediante -D FLAG_NAME. La gestión de configuraciones de compilación mediante condiciones de compilación es una práctica estándar en iOS.

Compilación condicional en Kotlin

BuildConfig.DEBUG — campo booleano, true en compilación debug. BuildConfig lo genera Gradle automáticamente. Para banderas personalizadas use buildConfigField en build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". En código: if (BuildConfig.REPORT_CRASHES) { ... }.

Compilación condicional en Flutter

dart-define — banderas de compilación de Flutter: flutter run --dart-define=ENV=staging. En código: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Para compilaciones condicionales de aplicaciones móviles, use el plugin build_runner con generación de código.

Preguntas frecuentes

¿En qué se diferencia Build Variant de Product Flavor en Android?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor es la variante de la aplicación (de pago/gratuita, cliente/servidor), Build Type son las configuraciones de compilación (depuración/optimización). La combinación de flavour + type forma un variant: por ejemplo, paidDebug.

¿Qué es .xcconfig y por qué se necesita en iOS?

.xcconfig es un archivo de configuración de Xcode que almacena la configuración de compilación en formato de texto. Permite mover la configuración del proyecto Xcode a archivos compatibles con Git, simplificando el CI/CD y el trabajo en equipo en proyectos móviles.

¿Cómo almacenar de forma segura las claves API en una aplicación móvil?

Las claves API no deben almacenarse en el código — cualquier .apk o .ipa se puede descompilar. Utilice archivos .env, un proxy de backend u ofuscación mediante Build Config. IT Sectr recomienda almacenar los secretos en el servidor y entregarlos al cliente después de la autenticación.

¿Qué es la compilación condicional y cuándo usarla?

La compilación condicional consiste en incluir/excluir código en tiempo de compilación según banderas. En Swift — #if DEBUG, en Kotlin — BuildConfig.DEBUG. Se utiliza para habilitar el registro en debug y deshabilitarlo en release. Este es un elemento clave de la gestión de configuraciones en el desarrollo móvil.

¿Se necesita Podfile en un proyecto sin CocoaPods?

Podfile solo se utiliza cuando se trabaja con CocoaPods. No es necesario para SPM o Carthage. No deje Podfile en un proyecto si ha abandonado CocoaPods — confunde al equipo y al sistema CI/CD.

Resumen

  • La gestión de configuraciones en aplicaciones móviles es la base de un CI/CD estable. Android utiliza Build Variant, iOS utiliza Scheme, Flutter utiliza dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig se genera para cada variant.
  • iOS: Scheme + .xcconfig gestionan la configuración. Info.plist — metadatos de la aplicación.
  • Flutter: dart-define para variables de compilación. pubspec.yaml para dependencias.
  • Compilación condicional (#if DEBUG, BuildConfig.DEBUG) — parte de la gestión de configuraciones, forma estándar de eliminar código de depuración en release.
  • .env — almacenamiento seguro de secretos fuera del repositorio. No suba .env a Git.
  • La gestión de configuraciones en proyectos móviles necesita atención desde el primer commit — una configuración de compilación adecuada ahorra horas de depuración en cada lanzamiento.

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.

Discutir el proyecto