Gerenciamento de configurações no desenvolvimento móvel: o que é, quais opções e como configurar

Autor: IT Sectr Publicado: 2026-05-30 Tempo de leitura: 8 min

O gerenciamento de configurações é um dos aspectos mais subestimados do desenvolvimento móvel. De acordo com a CloudBees (2025), 47% dos incidentes em produção estão relacionados a configurações de build incorretas. A configuração adequada de Build Variant, Scheme e arquivos .env é a chave para um CI/CD estável e lançamentos previsíveis.

Principais pontos

  • O gerenciamento de configurações em aplicativos móveis é baseado em Build Variant (Android), Scheme (iOS) e .env (multiplataforma) — 47% dos incidentes em produção estão relacionados a configurações incorretas.
  • O iOS usa Scheme + .xcconfig. O Scheme gerencia a compilação, os testes e o arquivamento. O .xcconfig move as configurações de build para arquivos.
  • Ferramentas multiplataforma — pubspec.yaml (Flutter), Podfile (CocoaPods), .env (variáveis de ambiente) — centralizam a configuração.
  • Compilação condicional — inclusão/exclusão de código em tempo de compilação. #if DEBUG, BuildConfig.DEBUG — para depuração sem alterar o comportamento da versão de lançamento.
  • Chaves de API e segredos não podem ser armazenados no código. Use .env, Build Config ou um servidor proxy. Descompilar .apk/.ipa é trivial.

Gerenciamento de configurações no Android: Build Variant e build.gradle

Build Variant — uma combinação de Build Type (debug/release/staging) e Product Flavor (free/paid, demo/full). O Gradle cria automaticamente um variant para cada combinação: freeDebug, freeRelease, paidDebug, paidRelease. Cada variant pode ter seu próprio código, recursos e dependências — esta é a base do gerenciamento de configurações em aplicativos móveis no Android.

Build Variant vs Product Flavor

Build Type — configurações de build: se a depuração está habilitada, assinatura, otimização ProGuard. debug por padrão contém debuggable=true, release — minifyEnabled=true.

Product Flavor — variante do aplicativo: gratuito (free), pago (paid), demo. Os flavors podem ter diferentes applicationId, recursos e dependências de SDK.

groovy
// build.gradle — configuração de flavors de produto no 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')
        }
    }
}

O exemplo cria dois flavors: free e paid. Um applicationId separado é definido para free — isso permite instalar ambos os aplicativos em um dispositivo. BuildConfig é gerado para cada variant: BuildConfig.FLAVOR = "free", BuildConfig.BUILD_TYPE = "debug". Use BuildConfig no código para lógica condicional.

settings.gradle e Gradle KTS

settings.gradle — o arquivo Gradle raiz que descreve os módulos do projeto.

Gradle KTS — uma alternativa ao Groovy usando Kotlin DSL. O KTS fornece autocompletar no Android Studio e verificação de tipos. Recomendado para novos projetos.

Gerenciamento de configurações no iOS: Scheme e .xcconfig

O gerenciamento de configurações no iOS é baseado em Scheme — uma configuração do Xcode que define o que e como compilar: Build Configuration (Debug/Release), testes, análise, arquivamento. Os schemes podem ser duplicados para diferentes ambientes (Development, Staging, Production). Os schemes são armazenados em arquivos .xcscheme na pasta xcshareddata.

Arquivos .xcconfig

.xcconfig — um arquivo de configuração do Xcode que armazena as configurações de build em formato de texto. Para o gerenciamento de configurações em aplicativos móveis, o iOS usa .xcconfig: versionamento no Git, reutilização entre projetos, menos configurações manuais. No .xcconfig são definidos SWIFT_ACTIVE_COMPILATION_CONDITIONS, PRODUCT_BUNDLE_IDENTIFIER, CODE_SIGN_IDENTITY.

Info.plist — o arquivo de metadados do aplicativo. Armazena a versão, o identificador, as permissões. O Info.plist pode ser diferente para cada Scheme — através de Info.plist File em Build Settings.

AndroidManifest.xml — o equivalente no Android: armazena permissões, componentes, metadados.

Scheme vs Build Configuration

Scheme — o cenário de build (o que fazer). Build Configuration — o conjunto de configurações (como fazer). Um Scheme usa uma Build Configuration (Debug ou Release). Para CI/CD: configure a ação Archive para Release e a ação Test para Debug em um mesmo Scheme.

Gerenciamento de configurações no Flutter e React Native: pubspec.yaml, Podfile, .env

pubspec.yaml — o arquivo de configuração do projeto Flutter. Contém dependências, versões, recursos. Suporta variáveis de ambiente através de --dart-define.

Podfile — o gerenciador de dependências CocoaPods para iOS. Define as versões das bibliotecas e a plataforma.

.env — um arquivo com variáveis de ambiente para todas as plataformas. Flutter e React Native usam uma abordagem diferente para o gerenciamento de configurações: dart-define no Flutter, react-native-config no React Native. O gerenciamento de configurações em projetos multiplataforma envolve diferentes ferramentas dependendo da stack.

.env e Variáveis de Ambiente

.env — um arquivo de texto com pares chave=valor. Não é commitado no Git (adicione ao .gitignore). Para Flutter — flutter_dotenv, para iOS — Config.xcconfig com #include, para Android — BuildConfig. Variáveis env: API_URL, SENTRY_DSN, APP_SECRET. No gerenciamento de configurações no desenvolvimento móvel, .env é o padrão de facto para armazenar segredos fora do repositório.

Podfile e pubspec.yaml

O Podfile descreve as dependências do CocoaPods e a plataforma (platform :ios, '15.0'). O pubspec.yaml para Flutter — dependencies e dev_dependencies. Ambos suportam dependências condicionais: pod 'Analytics', :configs => ['Release'] ou flutter pub add --flavor free. Na IT Sectr, usamos .env + BuildConfig para segredos e Podfile para dependências nativas em projetos móveis.

Parâmetro Android iOS Flutter
Unidade de configuraçãoBuild VariantSchemeFlavor (--flavor)
Arquivo de buildbuild.gradle.xcconfigpubspec.yaml
Código condicionalBuildConfigActive Compilation Conditionsdart-define
SegredosBuildConfig/NDK.xcconfig.env/dart-define
Gerenciador de dependênciasGradle (Maven)SPM/CocoaPodspub (dart)

A tabela mostra as principais diferenças no gerenciamento de configurações entre plataformas móveis. O Android oferece mais flexibilidade através do Build Variant. O iOS é mais simples, mas menos flexível. O Flutter centraliza a configuração no dart-define, mas as dependências nativas ainda exigem a configuração do Podfile/build.gradle.

Compilação condicional no gerenciamento de configurações

Compilação condicional — inclusão ou exclusão de código em tempo de compilação dependendo de flags. Isso faz parte do gerenciamento de configurações: permite incorporar ferramentas de depuração (logging, inspetor) em builds debug e removê-las do release. A implementação difere entre plataformas.

Compilação condicional em Swift

#if DEBUG — diretiva de pré-processador do Swift. O código dentro do bloco compila apenas na configuração Debug. Outras flags: #if !RELEASE, #if targetEnvironment(simulator). Active Compilation Conditions em Build Settings — adicione suas flags personalizadas através de -D FLAG_NAME. O gerenciamento de configurações de build através de condições de compilação é prática padrão no iOS.

Compilação condicional em Kotlin

BuildConfig.DEBUG — campo booleano, true em build debug. O BuildConfig é gerado automaticamente pelo Gradle. Para flags personalizadas use buildConfigField no build.gradle: buildConfigField "boolean", "REPORT_CRASHES", "true". No código: if (BuildConfig.REPORT_CRASHES) { ... }.

Compilação condicional em Flutter

dart-define — flags de compilação do Flutter: flutter run --dart-define=ENV=staging. No código: const env = String.fromEnvironment('ENV', defaultValue: 'production'). Para compilações condicionais de aplicativos móveis, use o plugin build_runner com geração de código.

Perguntas frequentes

Como o Build Variant difere do Product Flavor no Android?

Build Variant = Build Type (debug/release) + Product Flavor. Flavor é a variante do aplicativo (pago/gratuito, cliente/servidor), Build Type são as configurações de build (depuração/otimização). A combinação de flavour + type forma um variant: por exemplo, paidDebug.

O que é .xcconfig e por que é necessário no iOS?

.xcconfig é um arquivo de configuração do Xcode que armazena as configurações de build em formato de texto. Ele permite mover as configurações do projeto Xcode para arquivos compatíveis com Git, simplificando o CI/CD e o trabalho em equipe em projetos móveis.

Como armazenar chaves de API com segurança em um aplicativo móvel?

As chaves de API não devem ser armazenadas no código — qualquer .apk ou .ipa pode ser descompilado. Use arquivos .env, um proxy de backend ou ofuscação através do Build Config. A IT Sectr recomenda armazenar segredos no servidor e fornecê-los ao cliente após a autenticação.

O que é compilação condicional e quando usá-la?

Compilação condicional é incluir/excluir código em tempo de compilação dependendo de flags. Em Swift — #if DEBUG, em Kotlin — BuildConfig.DEBUG. Usada para habilitar o logging em debug e desabilitá-lo em release. Este é um elemento chave do gerenciamento de configurações no desenvolvimento móvel.

O Podfile é necessário em um projeto sem CocoaPods?

Podfile é usado apenas ao trabalhar com CocoaPods. Não é necessário para SPM ou Carthage. Não deixe o Podfile em um projeto se você abandonou o CocoaPods — isso confunde a equipe e o sistema CI/CD.

Resumo

  • O gerenciamento de configurações em aplicativos móveis é a base de um CI/CD estável. O Android usa Build Variant, o iOS usa Scheme, o Flutter usa dart-define.
  • Android: Build Variant = Build Type × Product Flavor. BuildConfig é gerado para cada variant.
  • iOS: Scheme + .xcconfig gerenciam a configuração. Info.plist — metadados do aplicativo.
  • Flutter: dart-define para variáveis de build. pubspec.yaml para dependências.
  • Compilação condicional (#if DEBUG, BuildConfig.DEBUG) — parte do gerenciamento de configurações, forma padrão de remover código de depuração em release.
  • .env — armazenamento seguro de segredos fora do repositório. Não commite .env no Git.
  • O gerenciamento de configurações em projetos móveis precisa de atenção desde o primeiro commit — a configuração adequada de build economiza horas de depuração em cada lançamento.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto