Flutter による継続的配信
Flutter を使用した継続的デリバリーのベスト プラクティスに従って、 アプリケーションはベータ テスターに配信され、頻繁に検証されます 手動のワークフローに頼ることなく。
CI/CD オプション
継続的インテグレーション (CI) と継続的デリバリー (CD) は数多くあります。 アプリケーションの配信を自動化するために利用できるオプション。
Flutter機能が組み込まれたオールインワンのオプション
- コードマジック
- ビットライズ
- アップサークル
fastlane と既存のワークフローの統合
fastlane は次のツールで使用できます。
-
GitHub アクション
- 例: Flutter Gallery のGithub Actions ワークフロー
- 例:Flutter プロジェクトの Github アクション
- 巻雲
- トラヴィス
- GitLab
-
サークルCI
- Fastlane を使用した Flutter アプリの構築とデプロイ
このガイドでは、fastlane をセットアップし、それを fastlane と統合する方法を説明します。 既存のテストと継続的インテグレーション (CI) ワークフロー。 詳細については、「fastlane と既存のワークフローの統合」を参照してください。
追い越し車線
追い越し車線リリースと展開を自動化するオープンソース ツール スイートです あなたのアプリのために。
ローカルセットアップ
事前にビルドと展開のプロセスをローカルでテストすることをお勧めします。 クラウドベースのシステムへの移行。連続実行を選択することもできます ローカルマシンからの配信。
- ファストレーンをインストールする
gem install fastlane
またbrew install fastlane
。 訪問ファストレーンのドキュメント詳細については。 - という名前の環境変数を作成します。
FLUTTER_ROOT
、 それを Flutter SDK のルート ディレクトリに設定します。 (これは、iOS に展開するスクリプトに必要です。) - Flutter プロジェクトを作成し、準備ができたら、プロジェクトが次の方法でビルドされていることを確認します。
-
flutter build appbundle
;と -
flutter build ipa
。
-
- 各プラットフォームの fastlane プロジェクトを初期化します。
-
あなたの中で
[project]/android
ディレクトリ、実行fastlane init
。 -
あなたの中で
[project]/ios
ディレクトリ、 走るfastlane init
。
-
あなたの中で
- を編集します
Appfile
アプリに適切なメタデータがあることを確認します。-
それを確認します
package_name
の[project]/android/fastlane/Appfile
AndroidManifest.xml 内のパッケージ名と一致します。 -
それを確認します
app_identifier
の[project]/ios/fastlane/Appfile
Info.plist のバンドル識別子とも一致します。埋めるapple_id
、itc_team_id
、team_id
それぞれのアカウント情報を入力してください。
-
それを確認します
- ストアのローカル ログイン資格情報を設定します。
-
フォローしてください電源のセットアップ手順そしてそれを確実にする
fastlane supply init
データを正常に同期します Play ストア コンソール。.json ファイルをパスワードのように扱い、チェックしないでください。 それを任意のパブリック ソース管理リポジトリに保存します。 -
あなたの iTunes Connect ユーザー名はすでに
あなたの中で
Appfile
のapple_id
分野。をセットするFASTLANE_PASSWORD
シェル 環境変数を iTunes Connect パスワードに置き換えます。そうしないと、あなたは iTunes/TestFlight にアップロードするときにプロンプトが表示されます。
-
フォローしてください電源のセットアップ手順そしてそれを確実にする
- コード署名を設定します。
- フォローしてくださいAndroid アプリの署名手順。
-
iOS では、
次の場合は、開発証明書の代わりに配布証明書を使用します。
TestFlight または App Store を使用してテストおよび展開する準備ができています。
- 配布証明書を作成してダウンロードします。Apple 開発者アカウントコンソール。
-
open [project]/ios/Runner.xcworkspace/
ディストリビューションを選択します ターゲットの設定ペインで証明書を確認します。
- を作成します
Fastfile
各プラットフォーム用のスクリプト。-
Android の場合は、次に従ってください。fastlane Android ベータ展開ガイド。
編集は、
lane
それは電話しますupload_to_play_store
。 をセットするaab
に対する議論../build/app/outputs/bundle/release/app-release.aab
アプリバンドルを使用するにはflutter build
すでに構築されています。 -
iOS の場合は、次に従ってください。fastlane iOS ベータ展開ガイド。 アーカイブ パスを指定すると、プロジェクトの再構築を回避できます。例えば:
build_app( skip_build_archive: true, archive_path: "../build/ios/archive/Runner.xcarchive", ) upload_to_testflight
-
Android の場合は、次に従ってください。fastlane Android ベータ展開ガイド。
編集は、
これで、ローカルでデプロイメントを実行するか、デプロイメントを移行する準備が整いました。 継続的インテグレーション (CI) システムへのプロセス。
デプロイメントをローカルで実行する
- リリース モード アプリをビルドします。
-
flutter build appbundle
。 -
flutter build ipa
。
-
- 各プラットフォームで Fastfile スクリプトを実行します。
-
cd android
それからfastlane [name of the lane you created]
。 -
cd ios
それからfastlane [name of the lane you created]
。
-
クラウドの構築とデプロイのセットアップ
まず、「ローカル セットアップ」で説明されているローカル セットアップ セクションに従って、 このプロセスは、Travis のようなクラウド システムに移行する前に機能します。
考慮すべき主な点は、クラウド インスタンスは一時的なものであるため、 信頼されていないため、Play ストア サービスのように資格情報を残すことはありません アカウント JSON またはサーバー上の iTunes 配布証明書。
継続的インテグレーション (CI) システムは通常、暗号化された環境をサポートします。
プライベートデータを保存する変数。これらの環境変数を渡すことができます
を使用して--dart-define MY_VAR=MY_VALUE
アプリを構築しているとき。
これらの変数値をコンソールに再度エコーバックしないように注意してください。 あなたのテストスクリプト。これらの変数はプル リクエストでも使用できません 悪意のある攻撃者がプルを作成できないようにマージされるまで これらのシークレットを出力するリクエスト。これらとのやり取りには注意してください 受け入れてマージするプル リクエスト内のシークレット。
- ログイン認証情報を一時的なものにします。
-
Android の場合:
- を削除します。
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]
- を削除します。
-
iOS の場合:
- ローカル環境変数を移動する
FASTLANE_PASSWORD
使用する CI システム上の暗号化された環境変数。 - CI システムは配布証明書にアクセスする必要があります。 ファストレーンのマッチシステムは マシン間で証明書を同期することをお勧めします。
- ローカル環境変数を移動する
-
Android の場合:
- 不決定的なファイルを使用する代わりに Gemfile を使用することをお勧めします。
gem install fastlane
ファストレーンを確保するために毎回 CI システム上で 依存関係は安定しており、ローカル マシンとクラウド マシン間で再現可能です。 ただし、このステップはオプションです。- あなたの両方で
[project]/android
と[project]/ios
フォルダーを作成するGemfile
次の内容が含まれます。source "https://rubygems.org" gem "fastlane"
- 両方のディレクトリで次のコマンドを実行します。
bundle update
そして両方をチェックしてくださいGemfile
とGemfile.lock
ソース管理に。 - ローカルで実行する場合は、次を使用します
bundle exec fastlane
それ以外のfastlane
。
- あなたの両方で
- 次のような 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
)。
- 次を使用して Bundler が利用可能であることを確認します
- 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 で新しいワークフローを作成するには、次の手順を使用します。
-
選ぶ製品 > Xcode Cloud > ワークフローの作成を開くにはワークフローの作成シート。
-
ワークフローをアタッチする製品 (アプリ) を選択し、 をクリックします。 の次ボタン。
-
次のシートには、Xcode によって提供されるデフォルトのワークフローの概要が表示されます。 をクリックしてカスタマイズできます。ワークフローの編集ボタン。
ブランチの変更
デフォルトでは、Xcode は新しいビルドを開始するブランチ変更条件を提案します。 Git リポジトリのデフォルト ブランチに変更を加えるたびに。
アプリの iOS バリアントの場合、Xcode Cloud に次のことを望むのは当然です。
Flutter パッケージに変更を加えた後にワークフローをトリガーする、または
Dart または iOS ソース ファイル内のいずれかを変更したlib\
とios\
ディレクトリ。
これは、次のファイルとフォルダーの条件を使用することで実現できます。
次のビルド番号
Xcode Cloud は、新しいワークフローのビルド番号をデフォルトで次のように設定します。1
そして増分します
それは成功したビルドごとに行われます。より高いビルドの既存のアプリを使用している場合
番号が異なる場合は、正しいビルド番号を使用するように Xcode Cloud を設定する必要があります
を指定するだけでビルドできるため、Next Build Number
あなたの反復の中で。
チェックアウトXcode Cloud ビルドの次のビルド番号を設定する多くのための 情報。