<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Javi MB</title>
    <description>The latest articles on DEV Community by Javi MB (@javymb).</description>
    <link>https://dev.to/javymb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F175365%2F52832aa6-8527-41d2-b773-0d4631a74813.jpeg</url>
      <title>DEV Community: Javi MB</title>
      <link>https://dev.to/javymb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/javymb"/>
    <language>en</language>
    <item>
      <title>Libera 🚀 aplicaciones de React Native con✨ Fastlane✨</title>
      <dc:creator>Javi MB</dc:creator>
      <pubDate>Mon, 10 Jun 2019 00:04:18 +0000</pubDate>
      <link>https://dev.to/javymb/libera-aplicaciones-de-react-native-con-fastlane-9g8</link>
      <guid>https://dev.to/javymb/libera-aplicaciones-de-react-native-con-fastlane-9g8</guid>
      <description>&lt;p&gt;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.&lt;br&gt;
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 .&lt;/p&gt;

&lt;p&gt;Ahí es cuando ✨Fastlane ✨ viene al rescate ⛑! &lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;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.&lt;br&gt;
Testimonio real: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🙇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. 🙇&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Empezando
&lt;/h2&gt;

&lt;p&gt;Antes de instalar ✨Fastlane ✨, asegúrese de tener instaladas las últimas herramientas de línea de comandos de Xcode, luego instale ✨Fastlane ✨ ⬇️.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brew cask install fastlane;&lt;/code&gt;&lt;br&gt;
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).&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Comencemos con esta plantilla base de &lt;em&gt;Fastfile&lt;/em&gt;, 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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Certificados
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS🍎
&lt;/h3&gt;

&lt;p&gt;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 :&lt;/p&gt;

&lt;p&gt;1- Usa Nuke para borrar los perfiles y certificados existentes.&lt;/p&gt;

&lt;p&gt;2- Inicia la configuración de match a través del comando init .&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Fastlane match init&lt;/code&gt;&lt;br&gt;
3- Cree un carril en la plataforma de ios que use el emparejamiento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android 🤖
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compilación (build)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  iOS🍎
&lt;/h3&gt;

&lt;p&gt;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 &lt;em&gt;prueba beta&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Android 🤖
&lt;/h3&gt;

&lt;p&gt;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 &lt;a href="https://docs.gradle.org/current/userguide/userguide.html"&gt;gradle&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego, automatiza el incremento de &lt;em&gt;VersionCode&lt;/em&gt;, conectando el &lt;em&gt;assembleRelease&lt;/em&gt; con esta pequeña tarea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distribución
&lt;/h2&gt;

&lt;h3&gt;
  
  
  iOS🍎
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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. 🎉&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;desc 'Ship to Testflight.'
  lane :beta do
    build
    pilot
    commit_version_bump(message: 'Bump build', xcodeproj: './ios/name.xcodeproj')
    push_to_git_remote
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Android 🤖
&lt;/h3&gt;

&lt;p&gt;Android usa Playstore para compartir versiones beta. ¡Podemos automatizar eso también con fastlane!&lt;/p&gt;

&lt;p&gt;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. ✨&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al final 🙇 🙇 🙇&lt;br&gt;
Tu Fastfile debe lucir muy parecido a el que muestro a continuación&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agradecimientos&lt;/strong&gt; 🤛🤛🤛&lt;br&gt;
Felix Krause, Carlos Cuesta&lt;/p&gt;

&lt;p&gt;To my beautiful Ammy for the Amazing support!&lt;br&gt;
Necesitas ayuda?&lt;br&gt;
Mándame un mensaje y con gusto te ayudo!&lt;/p&gt;

&lt;p&gt;Javier Munoz Barrios &lt;br&gt;
(&lt;a class="mentioned-user" href="https://dev.to/javymb"&gt;@javymb&lt;/a&gt;) | Twitter&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>mobile</category>
      <category>fastlane</category>
    </item>
  </channel>
</rss>
