Suche…


Bemerkungen

fastlane ist ein Tool für iOS-, Mac- und Android-Entwickler, mit dem Sie mühsame Aufgaben wie das Erstellen von Screenshots, das Bereitstellen von Profilen und das Freigeben Ihrer Anwendung automatisieren können.

Dokumente: https://docs.fastlane.tools/

Quellcode: https://github.com/fastlane/fastlane

Fastfile zum Erstellen und Hochladen mehrerer Versionen von Beta von Crashlytics

Dies ist ein Beispiel für ein Fastfile- Setup für eine App mit mehreren Geschmacksrichtungen. Sie haben die Möglichkeit, alle Geschmacksrichtungen oder eine einzelne Variante zu erstellen und bereitzustellen. Nach der Bereitstellung meldet es Slack den Status der Bereitstellung und sendet eine Benachrichtigung an die Tester in der Beta-Gruppe von Crashlytics-Testern.

Um alle Varianten zu erstellen und bereitzustellen, verwenden Sie:

fastlane android beta

Um ein einzelnes APK zu erstellen und bereitzustellen, verwenden Sie Folgendes:

fastlane android beta app:flavorName

Mit einer einzigen Fastlane-Datei können Sie iOS-, Android- und Mac-Apps verwalten. Wenn Sie diese Datei nur für eine App- platform ist dies nicht erforderlich.

Wie es funktioniert

  1. android Argument sagt fastlane, dass wir verwenden werden :android Plattform.
  2. Innerhalb :android Plattform können Sie mehrere Bahnen haben. Derzeit habe ich nur :beta Spur. Das zweite Argument des obigen Befehls gibt die Spur an, die wir verwenden möchten.
  3. options[:app]
  4. Es gibt zwei Gradle- Aufgaben. Erstens läuft es gradle clean . Wenn Sie einen app Schlüssel eingegeben haben, wird FastFile gradle assembleReleaseFlavor . Andernfalls wird gradle assembleRelease , um alle Build-Geschmacksrichtungen zu erstellen.
  5. Wenn Sie für alle Flavours erstellen, wird ein Array von generierten APK-Dateinamen in SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS gespeichert. Wir verwenden dies, um die erzeugten Dateien durchzugehen und sie von Crashlytics für Beta bereitzustellen . notifications und groups Felder sind optional. Sie werden verwendet, um von Crashlytics für Beta registrierte Tester zu benachrichtigen.
  6. Wenn Sie mit Crashlytics vertraut sind, wissen Sie möglicherweise, dass Sie zum Aktivieren einer App im Portal sie auf einem Gerät ausführen und zuerst verwenden müssen. Andernfalls geht Crashlytics davon aus, dass die App inaktiv ist, und gibt einen Fehler aus. In diesem Szenario fange ich es auf und melde mich als fehlgeschlagen an Slack , sodass Sie wissen, welche App inaktiv ist.
  7. Wenn die Bereitstellung erfolgreich ist, sendet fastlane eine Erfolgsmeldung an Slack .
  8. #{/([^\/]*)$/.match(apk)} Dieser Regex wird verwendet, um den Flavour-Namen aus dem APK-Pfad zu erhalten. Sie können es entfernen, wenn es für Sie nicht funktioniert.
  9. get_version_name und get_version_code sind zwei Fastlane- Plugins, um den Namen und Code der App-Version abzurufen. Sie müssen diese Edelsteine ​​installieren, wenn Sie sie verwenden möchten, oder Sie können sie entfernen. Lesen Sie hier mehr über Plugins.
  10. Die else Anweisung wird ausgeführt, wenn Sie einen einzelnen APK erstellen und bereitstellen. Wir müssen keinen apk_path für Crashlytics bereitstellen, da wir nur eine App haben.
  11. error do Block am Ende wird verwendet, um benachrichtigt zu werden, wenn während der Ausführung etwas anderes schief geht.

Hinweis

Vergessen Sie nicht, SLACK_URL , API_TOKEN , GROUP_NAME und BUILD_SECRET durch Ihre eigenen Anmeldeinformationen zu ersetzen.

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-Spur zum Erstellen und Installieren aller Flavors für einen bestimmten Build-Typ auf einem Gerät

Fügen Sie diese Spur Ihrem Fastfile hinzu und führen Sie fastlane installAll type:{BUILD_TYPE} in der Befehlszeile. Ersetzen Sie BUILD_TYPE durch den Build-Typ, den Sie erstellen möchten.

Zum Beispiel: fastlane installAll type:Debug

Dieser Befehl erstellt alle Varianten des angegebenen Typs und installiert sie auf Ihrem Gerät. Derzeit funktioniert es nicht, wenn Sie mehr als ein Gerät angeschlossen haben. Stellen Sie sicher, dass Sie nur einen haben. In Zukunft plane ich, eine Option zur Auswahl des Zielgeräts hinzuzufügen.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow