Gestione delle configurazioni nello sviluppo mobile: cos'è, quali opzioni e come configurarla

Autore: IT Sectr Pubblicato: 2026-05-30 Tempo di lettura: 8 min

La gestione delle configurazioni è uno degli aspetti più sottovalutati dello sviluppo mobile. Secondo CloudBees (2025), il 47% degli incidenti in produzione è correlato a configurazioni di build errate. La corretta configurazione di Build Variant, Scheme e file .env è la chiave per un CI/CD stabile e rilasci prevedibili.

Punti chiave

  • La gestione delle configurazioni nelle app mobili si basa su Build Variant (Android), Scheme (iOS) e .env (cross-platform) — il 47% degli incidenti in produzione è correlato a impostazioni errate.
  • iOS utilizza Scheme + .xcconfig. Scheme gestisce la compilazione, i test e l'archiviazione. .xcconfig esternalizza le impostazioni di build in file.
  • Gli strumenti cross-platform — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (variabili d'ambiente) — centralizzano la configurazione.
  • Compilazione condizionale — inclusione/esclusione di codice in fase di compilazione. #if DEBUG, BuildConfig.DEBUG — per il debug senza modificare il comportamento del rilascio.
  • Le chiavi API e i segreti non devono essere memorizzati nel codice. Utilizza .env, Build Config o un server proxy. Decompilare .apk/.ipa è banale.

Gestione delle configurazioni in Android: Build Variant e build.gradle

Build Variant — una combinazione di Build Type (debug/release/staging) e Product Flavor (free/paid, demo/full). Gradle crea automaticamente un variant per ogni combinazione: freeDebug, freeRelease, paidDebug, paidRelease. Ogni variant può avere il proprio codice, risorse e dipendenze — questa è la base della gestione delle configurazioni nelle app mobili su Android.

Build Variant vs Product Flavor

Build Type — impostazioni di build: se il debug è abilitato, firma, ottimizzazione ProGuard. debug per impostazione predefinita contiene debuggable=true, release — minifyEnabled=true.

Product Flavor — variante dell'app: gratuita (free), a pagamento (paid), demo. I flavor possono avere diversi applicationId, risorse e dipendenze SDK.

groovy
// build.gradle — configurazione dei flavor di prodotto in 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')
        }
    }
}

L'esempio crea due flavor: free e paid. Un applicationId separato è impostato per free — questo consente di installare entrambe le app su un unico dispositivo. BuildConfig viene generato per ogni variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Utilizza BuildConfig nel codice per la logica condizionale.

settings.gradle e Gradle KTS

settings.gradle — il file Gradle radice che descrive i moduli del progetto.

Gradle KTS — un'alternativa a Groovy che utilizza Kotlin DSL. KTS fornisce il completamento automatico in Android Studio e il controllo dei tipi. Consigliato per nuovi progetti.

Gestione delle configurazioni in iOS: Scheme e .xcconfig

La gestione delle configurazioni in iOS si basa su Scheme — una configurazione Xcode che definisce cosa e come compilare: Build Configuration (Debug/Release), test, analisi, archiviazione. Gli scheme possono essere duplicati per diversi ambienti (Development, Staging, Production). Gli scheme sono memorizzati in file .xcscheme nella cartella xcshareddata.

File .xcconfig

.xcconfig — un file di configurazione Xcode che memorizza le impostazioni di build in formato testuale. Per la gestione delle configurazioni delle app mobili, iOS utilizza .xcconfig: versionamento in Git, riutilizzo tra progetti, meno impostazioni manuali. In .xcconfig vengono impostati SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.

Info.plist — il file dei metadati dell'app. Memorizza la versione, l'identificatore, i permessi. Info.plist può essere diverso per ogni Scheme — tramite Info.plist File in Build Settings.

AndroidManifest.xml — l'equivalente Android: memorizza permessi, componenti, metadati.

Scheme vs Build Configuration

Scheme — lo scenario di build (cosa fare). Build Configuration — l'insieme di impostazioni (come fare). Un Scheme utilizza una Build Configuration (Debug o Release). Per CI/CD: configura l'azione Archive su Release e l'azione Test su Debug in un unico Scheme.

Gestione delle configurazioni in Flutter e React Native: pubspec.yaml, Podfile, .env

pubspec.yaml — il file di configurazione del progetto Flutter. Contiene dipendenze, versioni, risorse. Supporta le variabili d'ambiente tramite --dart-define.

Podfile — il gestore di dipendenze CocoaPods per iOS. Definisce le versioni delle librerie e la piattaforma.

.env — un file con variabili d'ambiente per tutte le piattaforme. Flutter e React Native utilizzano un approccio diverso per la gestione delle configurazioni: dart-define in Flutter, react-native-config in React Native. La gestione delle configurazioni nei progetti cross-platform coinvolge diversi strumenti a seconda dello stack.

.env e Variabili d'ambiente

.env — un file di testo con coppie chiave=valore. Non viene committato in Git (aggiungi a .gitignore). Per Flutter — flutter_dotenv, per iOS — Config.xcconfig con #include, per Android — BuildConfig. Variabili env: API_URL, SENTRY_DSN, APP_SECRET. Nella gestione delle configurazioni nello sviluppo mobile, .env è lo standard de facto per memorizzare i segreti fuori dal repository.

Podfile e pubspec.yaml

Podfile descrive le dipendenze CocoaPods e la piattaforma (platform :ios, '15.0'). pubspec.yaml per Flutter — dependencies e dev_dependencies. Entrambi supportano dipendenze condizionali: pod 'Analytics', :configs => ['Release'] o flutter pub add --flavor free. In IT Sectr, utilizziamo .env + BuildConfig per i segreti e Podfile per le dipendenze native nei progetti mobili.

Parametro Android iOS Flutter
Unità di configurazioneBuild VariantSchemeFlavor (--flavor)
File di buildbuild.gradle.xcconfigpubspec.yaml
Codice condizionaleBuildConfigActive Compilation Conditionsdart-define
SegretiBuildConfig/NDK.xcconfig.env/dart-define
Gestore dipendenzeGradle (Maven)SPM/CocoaPodspub (dart)

La tabella mostra le principali differenze nella gestione delle configurazioni tra le piattaforme mobili. Android offre maggiore flessibilità attraverso Build Variant. iOS è più semplice ma meno flessibile. Flutter centralizza la configurazione in dart-define, ma le dipendenze native richiedono comunque la configurazione di Podfile/build.gradle.

Compilazione condizionale nella gestione delle configurazioni

Compilazione condizionale — inclusione o esclusione di codice in fase di compilazione in base a flag. Questo fa parte della gestione delle configurazioni: permette di incorporare strumenti di debug (logging, ispettore) nelle build debug e rimuoverli dalla release. L'implementazione differisce tra le piattaforme.

Compilazione condizionale in Swift

#if DEBUG — direttiva del preprocessore Swift. Il codice all'interno del blocco viene compilato solo nella configurazione Debug. Altri flag: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions in Build Settings — aggiungi i tuoi flag personalizzati tramite -D FLAG_NAME. La gestione delle configurazioni di build tramite condizioni di compilazione è una pratica standard in iOS.

Compilazione condizionale in Kotlin

BuildConfig.DEBUG — campo booleano, true nella build debug. BuildConfig viene generato automaticamente da Gradle. Per flag personalizzati utilizza buildConfigField in build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". Nel codice: if (BuildConfig.REPORT_CRASHES) { ... }.

Compilazione condizionale in Flutter

dart-define — flag di compilazione Flutter: flutter run --dart-define=ENV=staging. Nel codice: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Per build condizionali di app mobili, utilizza il plugin build_runner con generazione di codice.

Domande frequenti

In che cosa Build Variant differisce da Product Flavor in Android?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor è la variante dell'app (a pagamento/gratuita, client/server), Build Type sono le impostazioni di build (debug/ottimizzazione). La combinazione flavour + type forma un variant: per esempio, paidDebug.

Cos'è .xcconfig e perché è necessario in iOS?

.xcconfig è un file di configurazione Xcode che memorizza le impostazioni di build in formato testuale. Permette di spostare le impostazioni dal progetto Xcode a file compatibili con Git, semplificando il CI/CD e il lavoro di squadra nei progetti mobili.

Come memorizzare in modo sicuro le chiavi API in un'app mobile?

Le chiavi API non devono essere memorizzate nel codice — qualsiasi .apk o .ipa può essere decompilato. Utilizza file .env, un proxy backend o offuscamento tramite Build Config. IT Sectr raccomanda di memorizzare i segreti sul server e rilasciarli al client dopo l'autenticazione.

Cos'è la compilazione condizionale e quando usarla?

La compilazione condizionale consiste nell'includere/escludere codice in fase di compilazione in base a flag. In Swift — #if DEBUG, in Kotlin — BuildConfig.DEBUG. Utilizzata per abilitare il logging in debug e disabilitarlo in release. Questo è un elemento chiave della gestione delle configurazioni nello sviluppo mobile.

Il Podfile è necessario in un progetto senza CocoaPods?

Podfile viene utilizzato solo quando si lavora con CocoaPods. Non è necessario per SPM o Carthage. Non lasciare Podfile in un progetto se hai abbandonato CocoaPods — confonde il team e il sistema CI/CD.

Riepilogo

  • La gestione delle configurazioni nelle app mobili è il fondamento di un CI/CD stabile. Android utilizza Build Variant, iOS utilizza Scheme, Flutter utilizza dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig viene generato per ogni variant.
  • iOS: Scheme + .xcconfig gestiscono la configurazione. Info.plist — metadati dell'app.
  • Flutter: dart-define per le variabili di build. pubspec.yaml per le dipendenze.
  • Compilazione condizionale (#if DEBUG, BuildConfig.DEBUG) — parte della gestione delle configurazioni, metodo standard per rimuovere il codice di debug in release.
  • .env — memorizzazione sicura dei segreti fuori dal repository. Non committare .env in Git.
  • La gestione delle configurazioni nei progetti mobili richiede attenzione dal primo commit — la corretta configurazione di build risparmia ore di debug a ogni rilascio.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto