수색…


비고

fastlane 은 iOS, Mac 및 Android 개발자가 스크린 샷 생성, 프로비저닝 프로파일 처리 및 응용 프로그램 릴리스와 같은 지루한 작업을 자동화하는 도구입니다.

문서 도구 : https://docs.fastlane.tools/

소스 코드 : https://github.com/fastlane/fastlane

Fastfile은 Crashlytics에 의해 여러 가지 맛을 베타 버전으로 빌드하고 업로드합니다.

이것은 다중 풍미 응용 프로그램에 대한 샘플 Fastfile 설정입니다. 모든 향미료 또는 단일 향미료를 만들고 배포 할 수있는 옵션을 제공합니다. 배포 후에는 배포 상태를 슬랙 상태로보고하고 Crashlytics 테스터 그룹의 베타 테스트 담당자에게 알림을 보냅니다.

모든 맛을 구축하고 배포하려면 다음을 사용하십시오.

fastlane android beta

단일 APK를 구축하고 배포하려면 다음 단계를 따르세요.

fastlane android beta app:flavorName

하나의 Fastlane 파일을 사용하여 iOS, Android 및 Mac 응용 프로그램을 관리 할 수 ​​있습니다. 이 파일을 하나의 앱 platform 에만 사용하는 경우에는 필요하지 않습니다.

어떻게 작동 하는가?

  1. android 인수는 fastlane에게 우리가 사용할 것을 알립니다 :android platform.
  2. :android 플랫폼 :android 여러 레인을 가질 수 있습니다. 현재 :beta 레인 만 있습니다. 위의 명령에서 두 번째 인수는 우리가 사용하고자하는 차선을 지정합니다.
  3. options[:app]
  4. Gradle 작업은 두 가지가 있습니다. 첫째, 그것은 gradle clean 실행합니다. app 키로 맛을 제공하면 fastfile은 gradle assembleReleaseFlavor 실행합니다. 그렇지 않으면 gradle assembleRelease 를 실행하여 모든 빌드 맛을 만듭니다.
  5. 우리가 모든 맛을 SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS , 생성 된 APK 파일 이름 배열이 SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS 저장됩니다. 우리는 생성 된 파일을 반복 하여 Crashlytics에 의해 베타에 배포합니다. notificationsgroups 입력란은 선택 사항입니다. 이들은 Crashlytics의해 베타 버전으로 앱에 등록 된 테스터에게 알리기 위해 사용됩니다.
  6. 크래시 틱스에 익숙하다면 포털에서 앱을 활성화하려면 장치에서 앱을 실행하고 먼저 사용해야합니다. 그렇지 않으면 Crashlytics는 앱을 비활성 상태로 가정하고 오류를 발생시킵니다. 이 시나리오에서는 캡처하여 실패로보고 Slack에보고 하므로 어떤 앱이 비활성 상태인지 알 수 있습니다.
  7. 배치가 성공하면 fastlaneSlack 에게 성공 메시지를 보냅니다.
  8. #{/([^\/]*)$/.match(apk)} 이 정규식은 APK 경로에서 맛 이름을 얻는 데 사용됩니다. 작동하지 않는 경우 제거 할 수 있습니다.
  9. get_version_nameget_version_code 는 앱 버전 이름과 코드를 검색하는 두 개의 Fastlane 플러그인입니다. 당신이 사용하고 싶거나 당신이 그들을 제거 할 수 있다면 당신은이 보석을 설치해야합니다. 플러그인에 대한 자세한 내용은 여기를 참조하십시오.
  10. 단일 APK를 만들고 배포하는 경우 else 문이 실행됩니다. 우리는 하나의 응용 프로그램 만 가지고 있기 때문에 apk_path 에 apk_path를 제공 할 필요가 없습니다.
  11. 마지막에 error do 블록을 사용하여 실행 중에 다른 것이 잘못되면 알림을받는 데 사용됩니다.

노트

SLACK_URL , API_TOKEN , GROUP_NAMEBUILD_SECRET 을 자신의 자격 증명으로 바꾸는 것을 잊지 마십시오.

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 레인

이 차선을 Fastfile에 추가하고 명령 행에서 fastlane installAll type:{BUILD_TYPE} 을 실행하십시오. BUILD_TYPE 을 빌드하려는 빌드 유형으로 BUILD_TYPE .

예 : fastlane installAll type:Debug

이 명령은 주어진 유형의 모든 맛을 구축하고 장치에 설치합니다. 현재 하나 이상의 장치가 연결되어 있으면 현재 작동하지 않습니다. 하나만 가지고 있는지 확인하십시오. 앞으로는 대상 장치를 선택하는 옵션을 추가 할 계획입니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow