Entrega Continua usando fastlane con Flutter
Sigue las mejores prácticas de Entrega Continua con Flutter para asegurar que tu aplicación sea entregada a tus beta testers y validada con frequencia sin tener que recurrir a workflows manuales.
Esta guía muestra como integrar fastlane, un suite de herramientas de código abierto, con tus workflows de pruebas en integración continua (CI) existentes (por ejemplo, Travis o Cirrus).
Configuración local
Se recomienda que pruebes el proceso de compilación y despliegue localmente antes de migrar a un sistema basado en la nube. Podrías también elegir realizar entrega continua desde una máquina local.
- Instala fastlane
gem install fastlaneobrew cask install fastlane. - Crea tu proyecto Flutter, y cuando esté listo, asegúrate que tu proyecto compila via
-
flutter build apk --release; y -
flutter build ios --release --no-codesign.
-
- Inicializa el proyecto fastlane para cada plataforma.
-
En tu carpeta [project]/android, ejecutafastlane init. -
En tu carpeta [project]/ios, ejecutafastlane init.
-
- Edita el
Appfilepara asegurar que tenga los metadatos adecuados para tu app.-
Verifica que package_nameen[project]/android/Appfilecoincida con tu nombre de paquete en AndroidManifest.xml.. -
Verifica que app_identifieren[project]/ios/Appfiletambién coincida Info.plist’s bundle identifier. Rellenaapple_id,itc_team_id,team_idcon tu información respectiva de tu cuenta.
-
- Configura las credenciales de inicio de sesión locales para las tiendas.
-
Sigue los pasos de configuración de Supply
y asegúrate que fastlane supply initsincroniza con existo datos de tu consola de Play Store. Trata el fichero .json como tu contraseña y no lo incluyas en ningún repositorio de control de código público. -
Tu nombre de usuario de iTunes Connect ya está en
tu campo apple_iddeAppfile. Configura la variable de entorno de consolaFASTLANE_PASSWORDcon tu contraseña de iTunes Connect. De otra manera, se te preguntaría cuando se suba a iTunes/TestFlight.
-
- Configura el firmado de código.
-
-
En Android, hay dos claves de firmado - despliegue y subida. El usuario final descarga el .apk firmado con la ‘clave de despligue’. Y la ‘clave de subida’ es usada para autentificar el .apk subido por los desarrolladores en la Play Store y es refirmado con la clave de despliegue una vez en la Play Store.
- Se recomienda muy especialmente utilizar la autenticación automática administrada en la nube para la clave de despliegue. Para obtener más información, consulta la documentación oficial de Play Store.
- Sigue los pasos de generación de claves para crear tu clave de subida.
- Configura gradle para usar tu clave de subida cuando compilas tu app en modo
release editando
android.buildTypes.releaseen[project]/android/app/build.gradle.
-
-
En iOS, crea y firma usando un
certificado de distribución en lugar de un certificado de desarrollo cuando estes
preparado para probar y desplegar usando TestFlight o App Store.
- Crea y descarga un certificado de distribución en tu Apple Developer Account console.
-
open [project]/ios/Runner.xcworkspace/y selecciona el certificado de distribucion en el panel de configuración de tu target.
-
- Crea un script
Fastfilepara cada plataforma.-
En Android, sigue la
Guía de despliegue Fastlane Android.
Tu edición puede ser tan simple como añadir un laneque llama aupload_to_play_store. Configura el argumentoapka../build/app/outputs/apk/release/app-release.apkpara usar el apk ya compilado conflutter build. -
En iOS, sigue la guía de despliegue fastlane iOS beta.
Tu edición de código podría ser tan simple como añadir un laneque llame abuild_ios_appconexport_method: 'app-store'yupload_to_testflight. En iOS una compilación extra es requerida ya queflutter buildcompila un .app en lugar de archivar .ipas para release.
-
Ahora estas preparado para realizar despliegues localmente o migrar el proceso de despliegue a un sistema de integración continua (CI).
Ejecutando el despliegue localmente
- Compila la app en modo release.
-
flutter build apk --release. -
flutter build ios --release --no-codesign. No es necesario firmar ahora ya que fastlane firmará en la fase de archivado.
-
- Ejecuta el script Fastfile en cada plataforma.
-
cd androidy despuésfastlane [nombre del lane que creaste]. -
cd iosy despuésfastlane [nombre del lane que creaste].
-
Configuración para compilar y desplegar en la nube
Primero, sigue la sección de configuración local descrita en ‘Configuración local’ para asegurarte que el proceso funciona antes de migrar hacia un sistema en la nube como Travis.
Lo principal para tener en cuenta es que como las instancias cloud son efímeras y no confiables, no dejarás tus credenciales como tu cuenta de servicio de Play Store JSON o tu certificado de distribución de iTunes en el servidor.
Los sistemas de integración continua (CI) , como Cirrus generalmente soportan variables de entorno encriptadas para almacenar datos privados.
Ten precaución de no imprimir por consola los valores de estas variables en tus scripts de prueba. Estas variables tampoco están disponibles en los pull request hasta que estos son fusionados para asegurar que los actores maliciosos no puedan crear un pull request que imprima estos secretos. Se precavido con las interacciones con estos secretos en los pull request que tu aceptes y fusiones.
- Haz que las credenciales de inicio de sesión sean efímeras.
-
En Android:
- Elimina el campo
json_key_filedelAppfiley guarda el texto contenido en el JSON en la variable encriptada de tu sistema CI. Usa el argumentojson_key_dataenupload_to_play_storepara leer la variable de entorno directamente en tuFastfile. - Serializa tu clave de subida (por ejemplo, usando base64) y guardala como
una variable de entorno encriptada. Puedes deserializarla en tu sistema
CI durante la fase de instalación con
echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > /home/cirrus/[directorio # y nombre de fichero especificado en tu gradle].keystore
- Elimina el campo
-
En iOS:
- Traslada la variable de entorno local
FASTLANE_PASSWORDpara emplear variables de entorno cifradas en el sistema CI. - El sitema de CI necesita acceso a tu certificado de distribución. Se recomienda el sistema Match de fastlane para sincronizar tus certificados entre distintas máquinas.
- Traslada la variable de entorno local
-
- Se recomienda usar un fichero Gemfile en lugar de usar cada vez una gema indeterminada
gem install fastlaneen el sistema de CI para garantizar que las dependencias de fastlane sean estables y reproducibles entre las máquinas locales y las de la nube. Sin embargo, este paso es opcional.- En tus directorios
[project]/androidy[project]/ios, crea un ficheroGemfilecon el siguiente contenido:source "https://rubygems.org" gem "fastlane" - En ambos directorios, ejecuta
bundle updatey verifica ambos ficherosGemfileyGemfile.locken tu sistema de control de versiones. - Cuando ejecutes localmente, usa
bundle exec fastlaneen lugar defastlane.
- En tus directorios
- Crea el script de pruebas de CI, como
.travis.ymlo.cirrus.ymlen la raíz de tu repositorio.- Fragmenta tu script para ejecutarse tanto en plataformas Linux como macOS.
- Recuerda especificar una dependencia de Xcode para macOS (por ejemplo
osx_image: xcode9.2). - Mira la documentación CI de fastlane para configuraciones espécificas del CI.
- Durante la fase de configuración, dependiendo de la plataforma, asegúrate de que:
- Está disponible Bundler usando
gem install bundler. - Para Android, asegúrate que el Android SDK esta disponible y que
ANDROID_HOMEestá configurado en el path. - Ejecuta
bundle installen[project]/androido[project]/ios. - Asegúrate que el SDK de Flutter está disponible y configurado en
PATH.
- Está disponible Bundler usando
- En la fase de script de la tarea (task) del CI:
- Ejecuta
flutter build apk --releaseoflutter build ios --release --no-codesigndependiendo de la plataforma. -
cd androidocd ios. -
bundle exec fastlane [nombre del lane].
- Ejecuta
Referencía
La app Flutter Gallery en el repositorio de Flutter usa fastlane para despliegue continuo. Mira el código fuente para ver un ejemplo funcional de fastlane en acción. También mira el script Cirrus.

