Entrega continua con Flutter
Cómo automatizar la compilación y el lanzamiento continuos de tu aplicación Flutter.
Sigue las mejores prácticas de entrega continua con Flutter para asegurarte de que tu aplicación se entregue a tus probadores beta y se valide con frecuencia sin tener que recurrir a flujos de trabajo manuales.
Opciones de CI/CD
#Hay varias opciones de integración continua (CI) y entrega continua (CD) disponibles para ayudar a automatizar la entrega de tu aplicación.
Opciones todo en uno con funcionalidad Flutter integrada
#Integrar fastlane con flujos de trabajo existentes
#Puedes usar fastlane con las siguientes herramientas:
Esta guía muestra cómo configurar fastlane y luego integrarlo con tus flujos de trabajo existentes de prueba e integración continua (CI). Para más información, consulta "Integrar fastlane con flujos de trabajo existentes".
fastlane
#fastlane es una suite de herramientas de código abierto para automatizar lanzamientos y despliegues para tu aplicación.
Configuración local
#Se recomienda probar el proceso de compilación y despliegue localmente antes de migrar a un sistema basado en la nube. También puedes optar por realizar la entrega continua desde una máquina local.
- Instala fastlane usando
gem install fastlaneobrew install fastlane. Visita las instrucciones de fastlane para más información. - Crea una variable de entorno llamada
FLUTTER_ROOT, y establécela en el directorio raíz de tu SDK de Flutter. (Esto es necesario para los scripts que realizan el despliegue para iOS). -
Create your Flutter project, and when ready, make sure that your project builds via
flutter build appbundle; y
flutter build ipa.
-
Initialize the fastlane projects for each platform.
En tu directorio [project]/android, ejecutafastlane init.
En tu directorio [project]/ios, ejecutafastlane init.
-
Edit the
Appfiles to ensure they have adequate metadata for your app.
Comprueba que el package_nameen[project]/android/fastlane/Appfilecoincide con tu nombre de paquete en AndroidManifest.xml.
Comprueba que el app_identifieren[project]/ios/fastlane/Appfiletambién coincide con el identificador de bundle de Info.plist. Completaapple_id,itc_team_id,team_idcon la información de tu cuenta respectiva.
-
Set up your local login credentials for the stores.
Sigue los pasos de configuración de Supply
y asegúrate de que fastlane supply initsincronice con éxito los datos de tu consola de Play Store. Trata el archivo .json como si fuera tu contraseña y no lo subas a ningún repositorio de control de código fuente público.
Tu nombre de usuario de iTunes Connect ya está
en el campo apple_idde tuAppfile. Define la variable de entorno de la shellFASTLANE_PASSWORDcon tu contraseña de iTunes Connect. De lo contrario, se te solicitará cuando realices la subida a iTunes/TestFlight.
-
Set up code signing.
Sigue los pasos de firma de la aplicación Android.
On iOS, create and sign using a
distribution certificate instead of a development certificate when you're
ready to test and deploy using TestFlight or App Store.- Crea y descarga un certificado de distribución en la consola de tu cuenta de desarrollador de Apple.
open [project]/ios/Runner.xcworkspace/y selecciona el certificado de distribución en el panel de configuración de tu target.
-
Create a
Fastfilescript for each platform.
En Android, sigue la
guía de despliegue beta de fastlane para Android.
Tu edición podría ser tan simple como añadir una laneque llame aupload_to_play_store. Establece el argumentoaaben../build/app/outputs/bundle/release/app-release.aabpara usar el app bundle queflutter buildya construyó.
En iOS, sigue la
guía de despliegue beta de fastlane para iOS.
Puedes especificar la ruta del archivo (archive path) para evitar reconstruir el proyecto. Por ejemplo:rubybuild_app( skip_build_archive: true, archive_path: "../build/ios/archive/Runner.xcarchive", ) upload_to_testflight
Ahora estás listo para realizar despliegues localmente o migrar el proceso de despliegue a un sistema de integración continua (CI).
Ejecutar el despliegue localmente
#-
Build the release mode app.
flutter build appbundle.
flutter build ipa.
-
Run the Fastfile script on each platform.
cd androidy luegofastlane [nombre de la lane que creaste].
cd iosy luegofastlane [nombre de la lane que creaste].
Configuración de compilación y despliegue en la nube
#Primero, sigue la sección de configuración local descrita en 'Configuración local' para asegurarte de que el proceso funcione antes de migrar a un sistema en la nube como Travis.
Lo principal a considerar es que, dado que las instancias en la nube son efímeras y no confiables, no dejarás tus credenciales (como el JSON de la cuenta de servicio de Play Store o tu certificado de distribución de iTunes) en el servidor.
Los sistemas de integración continua (CI) generalmente admiten variables de entorno
encriptadas para almacenar datos privados. Puedes pasar estas variables de entorno
usando --dart-define MY_VAR=MY_VALUE mientras compilas la aplicación.
Ten la precaución de no volver a mostrar los valores de esas variables en la consola en tus scripts de prueba. Esas variables tampoco están disponibles en las solicitudes de extracción (pull requests) hasta que se fusionen para garantizar que actores maliciosos no puedan crear una pull request que imprima estos secretos. Ten cuidado con las interacciones con estos secretos en las pull requests que aceptes y fusiones.
-
Hacer que las credenciales de inicio de sesión sean efímeras.
On Android:- Remove the
json_key_filefield fromAppfileand store the string content of the JSON in your CI system's encrypted variable. Read the environment variable directly in yourFastfile.upload_to_play_store( ... json_key_data: ENV['<variable name>'] ) - Serialize your upload key (for example, using base64) and save it as
an encrypted environment variable. You can deserialize it on your CI
system during the install phase withbash
echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > [path to your upload keystore]
- Remove the
On iOS:- Mueve la variable de entorno local
FASTLANE_PASSWORDpara usar variables de entorno encriptadas en el sistema de CI. - El sistema de CI necesita acceso a tu certificado de distribución. Se recomienda el sistema Match de fastlane para sincronizar tus certificados entre máquinas.
- Mueve la variable de entorno local
-
Se recomienda usar un Gemfile en lugar de utilizar un comando indeterminado
gem install fastlaneen el sistema de CI cada vez para garantizar que las dependencias de fastlane sean estables y reproducibles entre las máquinas locales y en la nube. Sin embargo, este paso es opcional.- In both your
[project]/androidand[project]/iosfolders, create aGemfilecontaining the following content:source "https://rubygems.org" gem "fastlane" - En ambos directorios, ejecuta
bundle updatey sube tantoGemfilecomoGemfile.lockal control de código fuente. - Cuando ejecutes localmente, usa
bundle exec fastlaneen lugar defastlane.
- In both your
-
Crea el script de prueba de CI como
.travis.ymlo.cirrus.ymlen la raíz de tu repositorio.- Consulta la documentación de fastlane CI para la configuración específica de CI.
- Fragmentar tu script para que se ejecute tanto en plataformas Linux como macOS.
- During the setup phase of the CI task, do the following:
- Asegúrate de que Bundler esté disponible usando
gem install bundler. - Ejecuta
bundle installen[project]/androido[project]/ios. - Asegúrate de que el SDK de Flutter esté disponible y establecido en el
PATH. - Para Android, asegúrate de que el SDK de Android esté disponible y de que la ruta
ANDROID_SDK_ROOTesté configurada. - Para iOS, es posible que tengas que especificar una dependencia de Xcode
(por ejemplo,
osx_image: xcode9.2).
- Asegúrate de que Bundler esté disponible usando
- In the script phase of the CI task:
- Ejecuta
flutter build appbundleoflutter build ios --release --no-codesign --config-only, dependiendo de la plataforma. cd androidocd iosbundle exec fastlane [nombre de la lane]
- Ejecuta
Xcode Cloud
#Xcode Cloud es un servicio de integración y entrega continua para compilar, probar y distribuir aplicaciones y frameworks para plataformas de Apple.
Requisitos
#- Xcode 13.4.1 o superior.
- Estar inscrito en el Apple Developer Program.
Script de compilación personalizado
#Xcode Cloud reconoce scripts de compilación personalizados
que se pueden
usar para realizar tareas adicionales en un momento designado. También incluye un conjunto
de variables de entorno predefinidas, como
$CI_WORKSPACE, que es la
ubicación de tu repositorio clonado.
Script post-clonación
#Aprovecha el script de compilación personalizado posterior a la clonación que se ejecuta después de que Xcode Cloud clone tu repositorio de Git utilizando las siguientes instrucciones:
Crea un archivo en ios/ci_scripts/ci_post_clone.sh y agrega el contenido a continuación.
#!/bin/sh
# Fail this script if any subcommand fails.
set -e
# The default execution directory of this script is the ci_scripts directory.
cd $CI_PRIMARY_REPOSITORY_PATH # change working directory to the root of your cloned repo.
# Install Flutter using git.
git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter
export PATH="$PATH:$HOME/flutter/bin"
# Install Flutter artifacts for iOS (--ios), or macOS (--macos) platforms.
flutter precache --ios
# Install Flutter dependencies.
flutter pub get
# Install CocoaPods using Homebrew.
HOMEBREW_NO_AUTO_UPDATE=1 # disable homebrew's automatic updates.
brew install cocoapods
# Install CocoaPods dependencies.
cd ios && pod install # run `pod install` in the `ios` directory.
exit 0
Este archivo debe agregarse a tu repositorio de git y marcarse como ejecutable.
git add --chmod=+x ios/ci_scripts/ci_post_clone.sh
Configuración del flujo de trabajo
#Un flujo de trabajo de Xcode Cloud define los pasos realizados en el proceso de CI/CD cuando se activa tu flujo de trabajo.
Para crear un nuevo flujo de trabajo en Xcode, sigue las siguientes instrucciones:
-
Elige Product > Xcode Cloud > Create Workflow para abrir la hoja Create Workflow.
-
Selecciona el producto (aplicación) al que se debe adjuntar el flujo de trabajo, luego haz clic en el botón Next.
-
La siguiente hoja muestra una descripción general del flujo de trabajo predeterminado proporcionado por Xcode, y se puede personalizar haciendo clic en el botón Edit Workflow.
Cambios en las ramas
#De forma predeterminada, Xcode sugiere la condición Cambios en las Ramas (Branch Changes) que inicia una nueva compilación para cada cambio en la rama predeterminada de tu repositorio de Git.
Para la variante de iOS de tu aplicación, es razonable que desees que Xcode Cloud active
tu flujo de trabajo después de realizar cambios en tus paquetes de Flutter, o de
modificar los archivos de código fuente de Dart o iOS dentro de los directorios lib\ y ios\.
Esto se puede lograr utilizando las siguientes condiciones de Archivos y Carpetas:
Siguiente número de compilación
#Xcode Cloud establece de forma predeterminada el número de compilación para nuevos flujos de trabajo en 1 e incrementa
este valor por cada compilación exitosa. Si estás utilizando una aplicación existente con un número de compilación
más alto, deberás configurar Xcode Cloud para que use el número de compilación correcto
para sus compilaciones simplemente especificando el Siguiente número de compilación en tu iteración.
Consulta Configurar el siguiente número de compilación para las compilaciones de Xcode Cloud para obtener más información.
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-11. Ver código fuente oreportar un problema.