Sök…


Anmärkningar

fastlane är ett verktyg för iOS-, Mac- och Android-utvecklare för att automatisera tråkiga uppgifter som att generera skärmdumpar, hantera leveransprofiler och släppa din applikation.

Dokument: https://docs.fastlane.tools/

Källkod: https://github.com/fastlane/fastlane

Fastfile för att bygga och ladda upp flera smaker till Beta av Crashlytics

Detta är ett exempel på Fastfile- inställningar för en app med flera smaker. Det ger dig ett alternativ att bygga och distribuera alla smaker eller en enda smak. Efter utplaceringen rapporterar den till Slack statusen för utplaceringen och skickar ett meddelande till testare i Beta av Crashlytics testargrupp.

För att bygga och distribuera alla smaker använder du:

fastlane android beta

För att bygga en enda APK och använda användning:

fastlane android beta app:flavorName

Med en enda Fastlane-fil kan du hantera iOS-, Android- och Mac-appar. Om du använder den här filen bara för en app platform är inte nödvändig.

Hur det fungerar

  1. android argument berättar fastlane att vi kommer att använda :android plattform.
  2. Inuti :android plattformen kan du ha flera körfält. För närvarande har jag bara :beta . Det andra argumentet från kommandot ovan specificerar den fil som vi vill använda.
  3. options[:app]
  4. Det finns två Gradle- uppgifter. Först körs gradle clean . Om du gav en smak med app nyckel, Fastfile körningar gradle assembleReleaseFlavor . Annars kör det gradle assembleRelease att bygga alla build-smaker.
  5. Om vi bygger för alla smaker lagras en rad genererade APK-filnamn i SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS . Vi använder detta för att gå igenom genererade filer och distribuera dem till Beta av Crashlytics . notifications och groups fält är valfria. De används för att meddela testare som är registrerade för appen på Beta av Crashlytics .
  6. Om du känner till Crashlytics kanske du vet att för att aktivera en app i portalen måste du köra den på en enhet och använda den först. Annars kommer Crashlytics att anta appen inaktiv och kasta ett fel. I det här scenariot fångar jag det och rapporterar till Slack som ett misslyckande, så att du vet vilken app som är inaktiv.
  7. Om installationen lyckas skickar fastlane ett framgångsmeddelande till Slack .
  8. #{/([^\/]*)$/.match(apk)} detta regex används för att få smaknamn från APK-sökvägen. Du kan ta bort den om den inte fungerar för dig.
  9. get_version_name och get_version_code är två Fastlane- plugins för att hämta appversionsnamn och kod. Du måste installera dessa ädelstenar om du vill använda eller så kan du ta bort dem. Läs mer om plugins här.
  10. Det else uttalandet kommer att köras om du bygger och distribuerar en enda APK. Vi behöver inte tillhandahålla apk_path till Crashlytics eftersom vi bara har en app.
  11. error do block i slutet används för att bli meddelad om något annat går fel under körningen.

Notera

Glöm inte att ersätta SLACK_URL , API_TOKEN , GROUP_NAME och BUILD_SECRET med dina egna referenser.

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-körfält för att bygga och installera alla smaker för en viss byggtyp på en enhet

Lägg till denna körfält till din Fastfile och kör fastlane installAll type:{BUILD_TYPE} i kommandoraden. Byt ut BUILD_TYPE med den BUILD_TYPE du vill bygga.

Till exempel: fastlane installAll type:Debug

Detta kommando bygger alla smaker av en viss typ och installerar det på din enhet. För närvarande fungerar det inte om du har fler än en enhet ansluten. Se till att du bara har en. I framtiden planerar jag att lägga till alternativ för att välja målenhet.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow