Buscar..


Observaciones

fastlane es una herramienta para desarrolladores de iOS, Mac y Android para automatizar tareas tediosas como generar capturas de pantalla, tratar con perfiles de aprovisionamiento y lanzar su aplicación.

Docs: https://docs.fastlane.tools/

Código fuente: https://github.com/fastlane/fastlane

Archivo rápido para crear y cargar múltiples versiones a Beta by Crashlytics

Este es un ejemplo de configuración de Fastfile para una aplicación de múltiples sabores. Te da la opción de crear e implementar todos los sabores o un solo sabor. Después de la implementación, informa a Slack el estado de la implementación y envía una notificación a los evaluadores en Beta por el grupo de evaluadores de Crashlytics.

Para construir y desplegar todos los sabores usa:

fastlane android beta

Para construir un solo APK y desplegar uso:

fastlane android beta app:flavorName

Con un solo archivo Fastlane, puede administrar aplicaciones iOS, Android y Mac. Si está utilizando este archivo solo para una platform aplicaciones no es necesario.

Cómo funciona

  1. android argumento de android le dice a Fastlane que usaremos :android plataforma :android .
  2. En el interior :android plataforma de :android puede tener varios carriles. Actualmente solo tengo :beta lane. El segundo argumento del comando anterior especifica el carril que queremos usar.
  3. options[:app]
  4. Hay dos tareas de Gradle . Primero, corre gradle clean . Si proporcionó un sabor con la clave de la app , fastfile ejecuta gradle assembleReleaseFlavor . De lo contrario, ejecuta gradle assembleRelease para compilar todos los sabores de compilación.
  5. Si estamos construyendo para todos los tipos, una matriz de nombres de archivos APK generados se almacena en SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS . Usamos esto para recorrer los archivos generados y desplegarlos en Beta por Crashlytics . notifications campos de notifications y groups son opcionales. Se utilizan para notificar a los probadores registrados para la aplicación en Beta por Crashlytics .
  6. Si está familiarizado con Crashlytics, puede que sepa que para activar una aplicación en el portal, debe ejecutarla en un dispositivo y usarla primero. De lo contrario, Crashlytics asumirá la aplicación inactiva y lanzará un error. En este escenario, lo capturo e informo a Slack como un error, por lo que sabrá qué aplicación está inactiva.
  7. Si la implementación es exitosa, fastlane enviará un mensaje de éxito a Slack .
  8. #{/([^\/]*)$/.match(apk)} esta expresión regular se usa para obtener el nombre del sabor de la ruta APK. Puede eliminarlo si no funciona para usted.
  9. get_version_name y get_version_code son dos complementos de Fastlane para recuperar el nombre y el código de la versión de la aplicación. Tienes que instalar estas gemas si quieres usarlas, o puedes eliminarlas. Lea más acerca de los complementos aquí.
  10. La instrucción else se ejecutará si está creando y desplegando un único APK. No tenemos que proporcionar apk_path a Crashlytics ya que solo tenemos una aplicación.
  11. error do block al final se usa para recibir notificaciones si algo sale mal durante la ejecución.

Nota

No olvide reemplazar SLACK_URL , API_TOKEN , GROUP_NAME y BUILD_SECRET con sus propias credenciales.

fastlane_version "1.46.1"

default_platform :android

platform :android do

    before_all do
        ENV["SLACK_URL"] = "https://hooks.slack.com/servic...."
    end
    
    lane :beta do |options|
        # Clean and build the Release version of the app.
        # Usage `fastlane android beta app:flavorName`
    
        gradle(task: "clean")
    
        gradle(task: "assemble",
               build_type: "Release",
               flavor: options[:app])
    
        # If user calls `fastlane android beta` command, it will build all projects and push them to Crashlytics
        if options[:app].nil?
            lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |
    
                puts "Uploading APK to Crashlytics: " + apk
    
                begin
                    crashlytics(
                      api_token: "[API_TOKEN]",
                      build_secret: "[BUILD_SECRET]",
                      groups: "[GROUP_NAME]",
                      apk_path: apk,
                      notifications: "true"
                    )
    
                    slack(
                      message: "Successfully deployed new build for #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}",
                      success: true,
                      default_payloads: [:git_branch, :lane, :test_result]
                    )
                rescue => ex
                    # If the app is inactive in Crashlytics, deployment will fail. Handle it here and report to slack
                    slack(
                        message: "Error uploading => #{/([^\/]*)$/.match(apk)} #{get_version_name} - #{get_version_code}: #{ex}",
                        success: false,
                        default_payloads: [:git_branch, :lane, :test_result]
                    )
                end
            end
    
            after_all do |lane|
                # This block is called, only if the executed lane was successful
                slack(
                    message: "Operation completed for #{lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].size} app(s) for #{get_version_name} - #{get_version_code}",
                    default_payloads: [:git_branch, :lane, :test_result],
                    success: true
                )
            end
        else
            # Single APK upload to Beta by Crashlytics
            crashlytics(
                api_token: "[API_TOKEN]",
                build_secret: "[BUILD_SECRET]",
                groups: "[GROUP_NAME]",
                notifications: "true"
            )
    
            after_all do |lane|
                # This block is called, only if the executed lane was successful
                slack(
                    message: "Successfully deployed new build for #{options[:app]} #{get_version_name} - #{get_version_code}",
                    default_payloads: [:git_branch, :lane, :test_result],
                    success: true
                )
            end
        end
    
        error do |lane, exception|
            slack(
                message: exception.message,
                success: false,
                default_payloads: [:git_branch, :lane, :test_result]
            )
        end
    end
end

Fastfile lane para crear e instalar todos los sabores para un tipo de compilación dado en un dispositivo

Agregue este carril a su archivo Fastfile y ejecute fastlane installAll type:{BUILD_TYPE} en la línea de comandos. Reemplace BUILD_TYPE con el tipo de compilación que desea compilar.

Por ejemplo: fastlane installAll type:Debug

Este comando construirá todos los sabores del tipo dado y lo instalará en su dispositivo. Actualmente, no funciona si tiene más de un dispositivo conectado. Asegúrate de tener solo uno. En el futuro, estoy planeando agregar una opción para seleccionar el dispositivo de destino.

lane :installAll do |options|

    gradle(task: "clean")

    gradle(task: "assemble",
       build_type: options[:type])

    lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].each do | apk |

        puts "Uploading APK to Device: " + apk

        begin
            adb(
                command: "install -r #{apk}"
            )
        rescue => ex
            puts ex
        end
    end
end


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow