Szukaj…


Uwagi

fastlane to narzędzie dla programistów systemów iOS, Mac i Android do automatyzacji żmudnych zadań, takich jak generowanie zrzutów ekranu, obsługa profili udostępniania i wypuszczanie aplikacji.

Dokumenty: https://docs.fastlane.tools/

Kod źródłowy: https://github.com/fastlane/fastlane

Fastfile do tworzenia i przesyłania wielu wersji smakowych do wersji beta przez Crashlytics

To jest przykładowa konfiguracja Fastfile dla aplikacji obsługującej wiele smaków. Daje ci możliwość zbudowania i wdrożenia wszystkich smaków lub jednego smaku. Po wdrożeniu zgłasza Slackowi status wdrożenia i wysyła powiadomienie do testerów w wersji beta przez grupę testerów Crashlytics.

Aby zbudować i wdrożyć wszystkie smaki, użyj:

fastlane android beta

Aby zbudować jeden pakiet APK i wdrożyć, użyj:

fastlane android beta app:flavorName

Za pomocą jednego pliku Fastlane możesz zarządzać aplikacjami na iOS, Android i Mac. Jeśli używasz tego pliku tylko dla jednej aplikacji, platform nie jest wymagana.

Jak to działa

  1. argument android mówi fastlane, że użyjemy :android platformy :android .
  2. Wewnątrz :android platforma :android może mieć wiele pasów. Obecnie mam tylko :beta ścieżkę :beta . Drugi argument z powyższego polecenia określa linię, której chcemy użyć.
  3. options[:app]
  4. Istnieją dwa zadania Gradle . Po pierwsze, działa w gradle clean . Jeśli podałeś smak kluczem app , fastfile uruchamia gradle assembleReleaseFlavor . W przeciwnym razie działa gradle assembleRelease aby zbudować wszystkie smaki kompilacji.
  5. Jeśli budujemy dla wszystkich smaków, tablica wygenerowanych nazw plików APK jest przechowywana wewnątrz SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS . Używamy tego, aby przeglądać wygenerowane pliki i wdrażać je w Beta przez Crashlytics . pola notifications i groups są opcjonalne. Służą do powiadamiania testerów zarejestrowanych dla aplikacji w wersji beta przez Crashlytics .
  6. Jeśli znasz Crashlytics, możesz wiedzieć, że aby aktywować aplikację w portalu, musisz uruchomić ją na urządzeniu i najpierw z niej korzystać. W przeciwnym razie Crashlytics uzna, że aplikacja jest nieaktywna i zgłosi błąd. W tym scenariuszu wychwytuję go i zgłaszam Slackowi jako awarię, abyś wiedział, która aplikacja jest nieaktywna.
  7. Jeśli wdrożenie się powiedzie, Fastlane wyśle komunikat o powodzeniu do Slacka .
  8. #{/([^\/]*)$/.match(apk)} ten regex służy do uzyskania nazwy smaku ze ścieżki APK. Możesz go usunąć, jeśli to nie działa.
  9. get_version_name i get_version_code to dwie wtyczki Fastlane do pobierania nazwy wersji i kodu aplikacji. Musisz zainstalować te klejnoty, jeśli chcesz ich użyć, lub możesz je usunąć. Przeczytaj więcej o wtyczkach tutaj.
  10. Instrukcja else zostanie wykonana, jeśli budujesz i wdrażasz pojedynczy pakiet APK. Nie musimy podawać apk_path Crashlytics, ponieważ mamy tylko jedną aplikację.
  11. error do block na końcu służy do otrzymywania powiadomień, jeśli coś innego pójdzie nie tak podczas wykonywania.

Uwaga

Nie zapomnij zastąpić SLACK_URL , API_TOKEN , GROUP_NAME i BUILD_SECRET własnymi danymi uwierzytelniającymi.

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

Linia Fastfile do kompilacji i instalacji wszystkich smaków dla danego typu kompilacji na urządzeniu

Dodaj ten pas do pliku Fastfile i uruchom polecenie fastlane installAll type:{BUILD_TYPE} w wierszu polecenia. Zamień BUILD_TYPE na typ kompilacji, który chcesz zbudować.

Na przykład: fastlane installAll type:Debug

To polecenie zbuduje wszystkie smaki danego typu i zainstaluje je na twoim urządzeniu. Obecnie nie działa, jeśli masz podłączone więcej niż jedno urządzenie. Upewnij się, że masz tylko jeden. W przyszłości planuję dodać opcję wyboru urządzenia docelowego.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow