<

Flutter による継続的配信

Flutter を使用した継続的デリバリーのベスト プラクティスに従って、 アプリケーションはベータ テスターに​​配信され、頻繁に検証されます 手動のワークフローに頼ることなく。

CI/CD オプション

継続的インテグレーション (CI) と継続的デリバリー (CD) は数多くあります。 アプリケーションの配信を自動化するために利用できるオプション。

Flutter機能が組み込まれたオールインワンのオプション

  • コードマジック
  • ビットライズ
  • アップサークル

fastlane と既存のワークフローの統合

fastlane は次のツールで使用できます。

  • GitHub アクション
    • 例: Flutter Gallery のGithub Actions ワークフロー
    • 例:Flutter プロジェクトの Github アクション
  • 巻雲
  • トラヴィス
  • GitLab
  • サークルCI
    • Fastlane を使用した Flutter アプリの構築とデプロイ

このガイドでは、fastlane をセットアップし、それを fastlane と統合する方法を説明します。 既存のテストと継続的インテグレーション (CI) ワークフロー。 詳細については、「fastlane と既存のワークフローの統合」を参照してください。

追い越し車線

追い越し車線リリースと展開を自動化するオープンソース ツール スイートです あなたのアプリのために。

ローカルセットアップ

事前にビルドと展開のプロセスをローカルでテストすることをお勧めします。 クラウドベースのシステムへの移行。連続実行を選択することもできます ローカルマシンからの配信。

  1. ファストレーンをインストールするgem install fastlaneまたbrew install fastlane。 訪問ファストレーンのドキュメント詳細については。
  2. という名前の環境変数を作成します。FLUTTER_ROOT、 それを Flutter SDK のルート ディレクトリに設定します。 (これは、iOS に展開するスクリプトに必要です。)
  3. Flutter プロジェクトを作成し、準備ができたら、プロジェクトが次の方法でビルドされていることを確認します。
    • Android flutter build appbundle;と
    • iOS flutter build ipa
  4. 各プラットフォームの fastlane プロジェクトを初期化します。
    • Androidあなたの中で[project]/androidディレクトリ、実行fastlane init
    • iOSあなたの中で[project]/iosディレクトリ、 走るfastlane init
  5. を編集しますAppfileアプリに適切なメタデータがあることを確認します。
    • Androidそれを確認しますpackage_name[project]/android/fastlane/AppfileAndroidManifest.xml 内のパッケージ名と一致します。
    • iOSそれを確認しますapp_identifier[project]/ios/fastlane/AppfileInfo.plist のバンドル識別子とも一致します。埋めるapple_iditc_team_idteam_idそれぞれのアカウント情報を入力してください。
  6. ストアのローカル ログイン資格情報を設定します。
    • Androidフォローしてください電源のセットアップ手順そしてそれを確実にするfastlane supply initデータを正常に同期します Play ストア コンソール。.json ファイルをパスワードのように扱い、チェックしないでください。 それを任意のパブリック ソース管理リポジトリに保存します。
    • iOSあなたの iTunes Connect ユーザー名はすでに あなたの中でAppfileapple_id分野。をセットするFASTLANE_PASSWORDシェル 環境変数を iTunes Connect パスワードに置き換えます。そうしないと、あなたは iTunes/TestFlight にアップロードするときにプロンプ​​トが表示されます。
  7. コード署名を設定します。
    • AndroidフォローしてくださいAndroid アプリの署名手順
    • iOSiOS では、 次の場合は、開発証明書の代わりに配布証明書を使用します。 TestFlight または App Store を使用してテストおよび展開する準備ができています。
      • 配布証明書を作成してダウンロードします。Apple 開発者アカウントコンソール。
      • open [project]/ios/Runner.xcworkspace/ディストリビューションを選択します ターゲットの設定ペインで証明書を確認します。
  8. を作成しますFastfile各プラットフォーム用のスクリプト。
    • AndroidAndroid の場合は、次に従ってください。fastlane Android ベータ展開ガイド。 編集は、laneそれは電話しますupload_to_play_store。 をセットするaabに対する議論../build/app/outputs/bundle/release/app-release.aabアプリバンドルを使用するにはflutter buildすでに構築されています。
    • iOSiOS の場合は、次に従ってください。fastlane iOS ベータ展開ガイド。 アーカイブ パスを指定すると、プロジェクトの再構築を回避できます。例えば:

      build_app(
        skip_build_archive: true,
        archive_path: "../build/ios/archive/Runner.xcarchive",
      )
      upload_to_testflight
      

これで、ローカルでデプロイメントを実行するか、デプロイメントを移行する準備が整いました。 継続的インテグレーション (CI) システムへのプロセス。

デプロイメントをローカルで実行する

  1. リリース モード アプリをビルドします。
    • Android flutter build appbundle
    • iOS flutter build ipa
  2. 各プラットフォームで Fastfile スクリプトを実行します。
    • Android cd androidそれからfastlane [name of the lane you created]
    • iOS cd iosそれからfastlane [name of the lane you created]

クラウドの構築とデプロイのセットアップ

まず、「ローカル セットアップ」で説明されているローカル セットアップ セクションに従って、 このプロセスは、Travis のようなクラウド システムに移行する前に機能します。

考慮すべき主な点は、クラウド インスタンスは一時的なものであるため、 信頼されていないため、Play ストア サービスのように資格情報を残すことはありません アカウント JSON またはサーバー上の iTunes 配布証明書。

継続的インテグレーション (CI) システムは通常、暗号化された環境をサポートします。 プライベートデータを保存する変数。これらの環境変数を渡すことができます を使用して--dart-define MY_VAR=MY_VALUEアプリを構築しているとき。

これらの変数値をコンソールに再度エコーバックしないように注意してください。 あなたのテストスクリプト。これらの変数はプル リクエストでも使用できません 悪意のある攻撃者がプルを作成できないようにマージされるまで これらのシークレットを出力するリクエスト。これらとのやり取りには注意してください 受け入れてマージするプル リクエスト内のシークレット。

  1. ログイン認証情報を一時的なものにします。
    • AndroidAndroid の場合:
      • を削除します。json_key_fileからのフィールドAppfileそして文字列を保存します CI システムの暗号化された変数内の JSON のコンテンツ。 環境変数を直接読み取ります。Fastfile
        upload_to_play_store(
          ...
          json_key_data: ENV['<variable name>']
        )
        
      • アップロード キーをシリアル化し (たとえば、base64 を使用して)、次のように保存します。 暗号化された環境変数。 CI 上でデシリアライズできます インストールフェーズ中のシステム
        echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > [path to your upload keystore]
        
    • iOSiOS の場合:
      • ローカル環境変数を移動するFASTLANE_PASSWORD使用する CI システム上の暗号化された環境変数。
      • CI システムは配布証明書にアクセスする必要があります。 ファストレーンのマッチシステムは マシン間で証明書を同期することをお勧めします。
  2. 不決定的なファイルを使用する代わりに Gemfile を使用することをお勧めします。gem install fastlaneファストレーンを確保するために毎回 CI システム上で 依存関係は安定しており、ローカル マシンとクラウド マシン間で再現可能です。 ただし、このステップはオプションです。
    • あなたの両方で[project]/android[project]/iosフォルダーを作成するGemfile次の内容が含まれます。
        source "https://rubygems.org"
      
        gem "fastlane"
      
    • 両方のディレクトリで次のコマンドを実行します。bundle updateそして両方をチェックしてくださいGemfileGemfile.lockソース管理に。
    • ローカルで実行する場合は、次を使用しますbundle exec fastlaneそれ以外のfastlane
  3. 次のような CI テスト スクリプトを作成します。.travis.ymlまた.cirrus.ymlあなたの中で リポジトリのルート。
    • 見るファストレーン CI ドキュメントCI 固有のセットアップ用。
    • Linux と macOS の両方のプラットフォームで実行できるようにスクリプトをシャードします。
    • CI タスクのセットアップ フェーズでは、次の操作を実行します。
      • 次を使用して Bundler が利用可能であることを確認しますgem install bundler
      • 走るbundle install[project]/androidまた[project]/ios
      • Flutter SDK が利用可能であり、設定されていることを確認してください。PATH
      • Android の場合は、Android SDK が利用可能であり、ANDROID_SDK_ROOTパスが設定されています。
      • iOS の場合、Xcode への依存関係を指定する必要がある場合があります。 (例えば、osx_image: xcode9.2)。
    • CI タスクのスクリプトフェーズでは、次のようになります。
      • 走るflutter build appbundleまたflutter build ios --release --no-codesign、 プラットフォームによって異なります。
      • cd androidまたcd ios
      • bundle exec fastlane [name of the lane]

Xcodeクラウド

Xcodeクラウド構築のための継続的統合および配信サービスです。 Apple プラットフォーム用のアプリとフレームワークのテストと配布。

要件

  • Xcode 13.4.1以降。
  • に登録するApple 開発者プログラム。

カスタムビルドスクリプト

Xcodeクラウドが認識するカスタムビルドスクリプトそれはあり得る 指定された時間に追加のタスクを実行するために使用されます。セットも入ってます の事前定義された環境変数、 そのような$CI_WORKSPACE、それは クローン作成されたリポジトリの場所。

クローン後のスクリプト

クローン作成後に実行されるカスタム ビルド スクリプトを利用します。 Xcode Cloud は、次の手順を使用して Git リポジトリのクローンを作成します。

にファイルを作成しますios/ci_scripts/ci_post_clone.shそして以下の内容を追加します。

#!/bin/sh

# The default execution directory of this script is the ci_scripts directory.
cd $CI_WORKSPACE # change working directory to the root of your cloned repo.

# Install Flutter using git.
git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter
export PATH="$PATH:$HOME/flutter/bin"

# Install Flutter artifacts for iOS (--ios), or macOS (--macos) platforms.
flutter precache --ios

# Install Flutter dependencies.
flutter pub get

# Install CocoaPods using Homebrew.
HOMEBREW_NO_AUTO_UPDATE=1 # disable homebrew's automatic updates.
brew install cocoapods

# Install CocoaPods dependencies.
cd ios && pod install # run `pod install` in the `ios` directory.

exit 0

このファイルを git リポジトリに追加し、実行可能としてマークする必要があります。

$ git add --chmod=+x ios/ci_scripts/ci_post_clone.sh

ワークフロー構成

アンXcode クラウドのワークフローCI/CD プロセスで実行されるステップを定義します ワークフローがトリガーされたとき。

Xcode で新しいワークフローを作成するには、次の手順を使用します。

  1. 選ぶ製品 > Xcode Cloud > ワークフローの作成を開くにはワークフローの作成シート。

  2. ワークフローをアタッチする製品 (アプリ) を選択し、 をクリックします。 のボタン。

  3. 次のシートには、Xcode によって提供されるデフォルトのワークフローの概要が表示されます。 をクリックしてカスタマイズできます。ワークフローの編集ボタン。

ブランチの変更

デフォルトでは、Xcode は新しいビルドを開始するブランチ変更条件を提案します。 Git リポジトリのデフォルト ブランチに変更を加えるたびに。

アプリの iOS バリアントの場合、Xcode Cloud に次のことを望むのは当然です。 Flutter パッケージに変更を加えた後にワークフローをトリガーする、または Dart または iOS ソース ファイル内のいずれかを変更したlib\ios\ディレクトリ。

これは、次のファイルとフォルダーの条件を使用することで実現できます。

Xcode Workflow Branch Changes

次のビルド番号

Xcode Cloud は、新しいワークフローのビルド番号をデフォルトで次のように設定します。1そして増分します それは成功したビルドごとに行われます。より高いビルドの既存のアプリを使用している場合 番号が異なる場合は、正しいビルド番号を使用するように Xcode Cloud を設定する必要があります を指定するだけでビルドできるため、Next Build Numberあなたの反復の中で。

チェックアウトXcode Cloud ビルドの次のビルド番号を設定する多くのための 情報。