サーチ…


備考

fastlaneは、iOS、Mac、Androidの開発者がスクリーンショットの生成、プロビジョニングプロファイルの処理、アプリケーションの解放などの面倒な作業を自動化するためのツールです。

ドキュメント: https : //docs.fastlane.tools/

ソースコード: https : //github.com/fastlane/fastlane

CrashlyticsによってBetaに複数の味を構築してアップロードするFastfile

これは、マルチフレーバーアプリのサンプルFastfile設定です。これは、すべてのフレーバーまたは単一のフレーバーを構築し、展開するオプションを提供します。デプロイ後、 Slackにデプロイメントのステータスを報告し、Betaのテスターに​​Crashlyticsテスターグループによる通知を送信します。

すべての味を構築して配備するには、以下を使用します。

fastlane android beta

単一のAPKを構築して使用するには:

fastlane android beta app:flavorName

1つのFastlaneファイルを使用して、iOS、Android、およびMacアプリを管理できます。このファイルを1つのアプリケーションplatform用に使用している場合は、必須ではありません。

使い方

  1. android引数は、fastlaneに:androidプラットフォームを使用するよう指示します。
  2. 内部:androidプラットフォームでは、複数のレーンを持つことができます。現在、私は:betaレーンしか持っていません。上のコマンドの第2引数は、使用したいレーンを指定します。
  3. options[:app]
  4. Gradleタスクは2つあります。まず、 gradle clean実行します。あなたが味を提供した場合はappキー、fastfile走るgradle assembleReleaseFlavor 。それ以外の場合は、 gradle assembleReleaseを実行してすべてのビルドフレーバをビルドします。
  5. すべてのフレーバー用に構築する場合は、生成されたAPKファイル名の配列がSharedValues::GRADLE_ALL_APK_OUTPUT_PATHS格納されます。これを使用して、生成されたファイルをループし、CrashlyticsによってBetaに展開します。 notificationsおよびgroupsフィールドはオプションです。彼らはCrashlyticsによってベータ版のアプリに登録されているテスターに​​通知するために使用されます。
  6. クラッシュスティックスに精通している場合は、ポータルでアプリケーションをアクティブにするには、デバイス上でアプリを実行してから使用する必要があります。そうしないと、Crashlyticsはアプリを非アクティブにしてエラーをスローします。このシナリオでは、私はそれをキャプチャし、失敗としてSlackに報告するので、どのアプリが非アクティブであるかを知ることができます。
  7. 展開が成功すると、 fastlaneSlackに成功メッセージを送ります。
  8. #{/([^\/]*)$/.match(apk)}この正規表現は、APKパスからフレーバー名を取得するために使用されます。それがあなたのために働かない場合は、それを削除することができます。
  9. get_version_nameget_version_codeは、アプリケーションのバージョン名とコードを取得するための2つのFastlaneプラグインです。これらの宝石は、使いたい場合にインストールするか、削除することができます。プラグインの詳細はこちらをご覧ください。
  10. 単一のAPKを構築して配備する場合、 elseステートメントが実行されます。私たちは1つのアプリケーションしかないので、Crashlyticsにapk_pathを提供する必要はありません。
  11. 実行中に何か他のものがうまくいかない場合に通知を受け取るために、最後のerror doブロックが使用されます。

注意

SLACK_URLAPI_TOKENGROUP_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レーン

Fastlineにこのレーンを追加し、コマンドラインでfastlane installAll type:{BUILD_TYPE}を実行してください。 BUILD_TYPEを、ビルドするビルドタイプに置き換えます。

次に例を示しますfastlane installAll type:Debug

このコマンドは、指定されたタイプのすべてのフレーバーを構築し、あなたのデバイスにインストールします。現在、複数のデバイスが接続されている場合は動作しません。あなたは1つだけを持っていることを確認してください。将来私はターゲットデバイスを選択するオプションを追加するつもりです。

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