Ricerca…


Osservazioni

fastlane è uno strumento per gli sviluppatori iOS, Mac e Android per automatizzare attività noiose come la generazione di schermate, la gestione dei profili di provisioning e il rilascio della tua applicazione.

Documenti: https://docs.fastlane.tools/

Codice sorgente: https://github.com/fastlane/fastlane

Fastfile per creare e caricare più versioni su Beta da Crashlytics

Questa è una configurazione di Fastfile di esempio per un'app multi-flavor. Ti dà la possibilità di costruire e distribuire tutti i sapori o un singolo sapore. Dopo la distribuzione, riporta a Slack lo stato della distribuzione e invia una notifica ai tester in Beta dal gruppo di tester Crashlytics.

Per costruire e distribuire tutti i sapori utilizzare:

fastlane android beta

Per creare un singolo APK e distribuire l'uso:

fastlane android beta app:flavorName

Utilizzando un singolo file Fastlane, è possibile gestire app iOS, Android e Mac. Se si utilizza questo file solo per una platform app non è richiesto.

Come funziona

  1. argomento android dice fastlane che useremo :android piattaforma :android .
  2. All'interno :android piattaforma :android è possibile avere più corsie. Attualmente, ho solo :beta lane. Il secondo argomento del comando precedente specifica la corsia che vogliamo usare.
  3. options[:app]
  4. Ci sono due compiti Gradle . In primo luogo, funziona gradle clean . Se hai fornito un sapore con la chiave app , fastfile esegue gradle assembleReleaseFlavor . Altrimenti, esegue gradle assembleRelease per costruire tutti i sapori di build.
  5. Se stiamo costruendo per tutti i gusti, una serie di nomi di file APK generati viene archiviata in SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS . Lo usiamo per fare il loop dei file generati e distribuirli su Beta da Crashlytics . notifications e i campi dei groups sono facoltativi. Sono utilizzati per informare i tester registrati per l'app su Beta da Crashlytics .
  6. Se hai familiarità con Crashlytics, potresti sapere che per attivare un'app nel portale, devi eseguirla su un dispositivo e usarla prima. Altrimenti, Crashlytics assumerà l'app inattiva e genererà un errore. In questo scenario, l'ho catturato e segnalato a Slack come un errore, quindi saprai quale app non è attiva.
  7. Se la distribuzione ha successo, fastlane invierà un messaggio di successo a Slack .
  8. #{/([^\/]*)$/.match(apk)} questo regex è usato per ottenere il nome di sapore dal percorso APK. Puoi rimuoverlo se non funziona per te.
  9. get_version_name e get_version_code sono due plugin di Fastlane per recuperare nome e codice della versione dell'app. Devi installare queste gemme se vuoi usarle o puoi rimuoverle. Leggi di più sui plugin qui.
  10. La dichiarazione else verrà eseguita se si sta creando e distribuendo un singolo APK. Non dobbiamo fornire apk_path a Crashlytics poiché abbiamo una sola app.
  11. error do blocco di error do alla fine viene usato per ricevere una notifica se qualcosa va storto durante l'esecuzione.

Nota

Non dimenticare di sostituire SLACK_URL , API_TOKEN , GROUP_NAME e BUILD_SECRET con le tue credenziali.

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 per costruire e installare tutti gli aromi per un determinato tipo di build su un dispositivo

Aggiungi questa corsia al tuo Fastfile ed esegui fastlane installAll type:{BUILD_TYPE} nella riga di comando. Sostituisci BUILD_TYPE con il tipo di build che vuoi costruire.

Ad esempio: fastlane installAll type:Debug

Questo comando creerà tutte le caratteristiche del tipo specificato e lo installerà sul tuo dispositivo. Attualmente, non funziona se hai più di un dispositivo collegato. Assicurati di averne solo uno. In futuro ho intenzione di aggiungere un'opzione per selezionare il dispositivo di destinazione.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow