Crear aplicaciones usando React Native (JavaScript) es como un cuento de hadas ❤️❤️. Todo es color de rosa hasta el momento de lanzar una nueva versión de la aplicación🤦 , especialmente si no estás familiarizado con iOS o Android en lenguaje nativo.
El proceso para enviar una aplicación a las tiendas de App Store y Play Store es una experiencia muchas de las veces frustrante, lenta o desesperante 🤷. Y aunque existe mucha documentación, no siempre es clara o simplemente se pierden muchos pasos importantes, por que hay mucho que digerir .
Ahí es cuando ✨Fastlane ✨ viene al rescate ⛑!
En este artículo te explicaré cómo automatizar el proceso de lanzamiento para una aplicación iOS🍎y Android. 🤖Manejar las tareas más comunes, tales como: Certificados, Compilaciones de aplicaciones, Distribución Beta y mucho más.
Fastlane es una herramienta para desarrolladores de iOS y Android que les ayuda a automatizar tareas tediosas, tales como generar capturas de pantalla, tratar con certificados y lanzar tu aplicación.
Testimonio real:
🙇Desde que empecé a usar ✨Fastlane ✨, mi vida cambió, ahora tengo más tiempo para tomar café 🤛y relajarme en mi escritorio mientras Fastlane se encarga de todo. 🙇
Empezando
Antes de instalar ✨Fastlane ✨, asegúrese de tener instaladas las últimas herramientas de línea de comandos de Xcode, luego instale ✨Fastlane ✨ ⬇️.
brew cask install fastlane;
Una vez instalado, crea una carpeta fastlane / 📁 dentro de tu proyecto de React Native a nivel raíz. Luego, crea un archivo llamado Fastfile dentro de este directorio ☝️ (sin extensión, solo Fastlane).
El archivo Fastfile es el lugar donde vamos a codificar los carriles (lanes). Un carril contiene un grupo de acciones que se ejecutarán sincrónicamente para automatizar un proceso. Una acción, es una función que realiza una tarea.
Comencemos con esta plantilla base de Fastfile, como puede ver, hay un enlace before_all, que básicamente realiza una comprobación de estado 👨⚕️, con tres acciones, para garantizar que esté en la última rama (branch) “Master” con un estado limpio.
fastlane_version '2.53.1'
before_all do
ensure_git_branch
ensure_git_status_clean
git_pull
end
platform :ios do
# iOS Lanes
end
platform :android do
# Android Lanes
end
Certificados
Cuando se trata de lanzar una aplicación nueva, todo esta perfecto hasta que tienes que firmar y controlar los certificados de la aplicación.
iOS🍎
La mejor manera de firmar tu código es usando match ; Antes de integrar march en un carril (lane), primero debes seguir los siguientes pasos :
1- Usa Nuke para borrar los perfiles y certificados existentes.
2- Inicia la configuración de match a través del comando init .
Fastlane match init
3- Cree un carril en la plataforma de ios que use el emparejamiento.
desc 'Fetch certificates and provisioning profiles'
lane :certificates do
match(app_identifier: 'com.app.bundle', type: 'development', readonly: true)
match(app_identifier: 'com.app.bundle', type: 'appstore', readonly: true)
End
Después de eso ya puedes usar el comando fastlane ios certificates o usar certificates como una función en otro carril. Match guardará automáticamente los perfiles y certificados de en su llavero (Keychain) OS X.
Android 🤖
Cuando compilas una aplicación de Android usando la tarea de ensamblar (assemble) en el modo Release, la aplicación se firmará automáticamente. Pero primero necesitas generar o tener generada previamente la clave para firma y agregarla al proyecto, no te preocupes puedes consultar esta guía de Facebook para saber cómo hacerlo.
Compilación (build)
iOS🍎
Para generar una compilación (build) firmada, vamos a crear un carril (lane) que use el carril de certificados que ya creamos antes y usaremos gym para compilar nuestra aplicación de una manera rápida y sencilla. Al final del proceso, vamos a incrementar el número de compilación para enviar nuestra aplicación a los servicios de prueba beta
desc 'Build the iOS application.'
private_lane :build do
certificates
increment_build_number(xcodeproj: './ios/name.xcodeproj')
gym(scheme: 'name', project: './ios/name.xcodeproj')
end
Android 🤖
Para generar un .apk firmado, vamos a crear un carril de compilación. Como puedes ver, estamos usando una acción de gradle, para limpiar el proyecto y armar una versión de lanzamiento, con tareas de gradle.
desc 'Build the Android application.'
private_lane :build do
gradle(task: 'clean', project_dir: 'android/')
gradle(task: 'assemble', build_type: 'Release', project_dir: 'android/')
end
Luego, automatiza el incremento de VersionCode, conectando el assembleRelease con esta pequeña tarea.
Distribución
iOS🍎
TestFlight ✈️ es el camino a seguir cuando se trata de pruebas beta de iOS. Funciona realmente bien, aunque el Portal de desarrolladores es un poco confuso. Con pilot podemos gestionar nuestras compilaciones de TestFlight.
El carril beta utilizará el carril de compilación para proporcionar un .ipa firmado a pilot, luego enviará los elementos a git e impulsará los cambios producidos al aumentar el número de compilación y, finalmente, cargará la compilación local a Testflight. 🎉
desc 'Ship to Testflight.'
lane :beta do
build
pilot
commit_version_bump(message: 'Bump build', xcodeproj: './ios/name.xcodeproj')
push_to_git_remote
end
Android 🤖
Android usa Playstore para compartir versiones beta. ¡Podemos automatizar eso también con fastlane!
El carril beta para Android es casi el mismo que iOS, usa el carril de compilación para generar el .apk firmado, confirma los cambios del código de versión y el uso de supply promueve la compilación local de Playstore como versión beta. ✨
desc 'Ship to Playstore Beta.'
lane :beta do
build
supply(track: 'beta', track_promote_to: 'beta')
git_commit(path: ['./android/gradle.properties'], message: 'Bump versionCode')
push_to_git_remote
end
Al final 🙇 🙇 🙇
Tu Fastfile debe lucir muy parecido a el que muestro a continuación
fastlane_version '2.53.1'
before_all do
ensure_git_branch
ensure_git_status_clean
git_pull
end
platform :ios do
# iOS Lanes
desc 'Fetch certificates and provisioning profiles'
lane :certificates do
match(app_identifier: 'com.app.bundle', type: 'development', readonly: true)
match(app_identifier: 'com.app.bundle', type: 'appstore', readonly: true)
end
desc 'Build the iOS application.'
private_lane :build do
certificates
increment_build_number(xcodeproj: './ios/name.xcodeproj')
gym(scheme: 'name', project: './ios/name.xcodeproj')
end
desc 'Ship to Testflight.'
lane :beta do
build
pilot
commit_version_bump(message: 'Bump build', xcodeproj: './ios/name.xcodeproj')
push_to_git_remote
end
end
platform :android do
# Android Lanes
desc 'Build the Android application.'
private_lane :build do
gradle(task: 'clean', project_dir: 'android/')
gradle(task: 'assemble', build_type: 'Release', project_dir: 'android/')
end
desc 'Ship to Playstore Beta.'
lane :beta do
build
supply(track: 'beta', track_promote_to: 'beta')
git_commit(path: ['./android/gradle.properties'], message: 'Bump versionCode')
push_to_git_remote
end
end
Agradecimientos 🤛🤛🤛
Felix Krause, Carlos Cuesta
To my beautiful Ammy for the Amazing support!
Necesitas ayuda?
Mándame un mensaje y con gusto te ayudo!
Javier Munoz Barrios
(@javymb) | Twitter
Top comments (0)