Codemagicを使ったFlutterアプリのApp Store自動デプロイ
Codemagicを使ったFlutterアプリのApp Store自動デプロイ
導入
FlutterをCI/CDするためのツールとしてはGithub actionsを使う方法もありますが、Codemagicは、Flutterアプリのビルドとデプロイを自動化するために特化してるツールです。
さまざまなツールが用意されており、Github actionsより比較的簡単、高機能にCI/CDを実現することができます。
今回は、Codemagicを使ってFlutterアプリをAppleのapp storeに自動デプロイする方法を紹介します。今回は、yamlファイルを使った方法を紹介します。
以前、androidアプリをGoogle Playに自動デプロイする方法も書いており、そちらはこちらの方になります。
準備
必要なツール
- Codemagicアカウント
- App Store Connectアカウント
- Apple Developerアカウント
- Githubのリポジトリ
実装
Codemagicプロジェクトのセットアップ
以前書いたのでそちらの方を参考してください。
App Store ConnectでApp Store Connect API keyを作成してCodemagicへ登録する
CodemagicからApp Storeへ接続するためには、App Store Connectで新しくApp Store Connect API Keyを作成する必要があります。
App Store Connect API keyの作成
まずApp Store Connectにアクセスしてログインします。
[ユーザとアクセス] > [統合]を開きます。
[チームキー]を開きます。
初回の場合にはAppleへ申請を行うのかという表示がありますが、それを順当に進めていきます。
keyを生成します。アクセスについては「App Manager」を設定します。
ダウンロードできる.p8ファイルとIssuer IDとチームIDは保管してどこかに置いておいてください。
CodemagicにApp Store Connect API keyを登録
Codemagicを開きます。そして、左端のメニューから[Teams]そして、開いた画面で使ってるチーム名を開きます。
開いた画面の[Integrations]そして、Developer PotalのManaged keyをクリックします。
そして開かれた次の画面で先ほどApp store connectで作成した、.p8ファイルとIssuer IDとチームIDを登録します。
これでApp Store ConnectをCodemagicに接続することができました。
アプリへの署名を行うために、certificatesファイルとプロビジョニングファイルを発行して、Codemagicに登録する
certificatesの作成
こちらの方は本来、Apple developerの[Certificates, Identifiers & Profiles]から、発行しないとならないのですが、Codemagicから新しくCertificatesを作成できます。既存のCertificatesを使いたい場合には、上記のURLの該当箇所を参考ください。
Codemagicから新規のcertificatesを作成する方法を説明します。
- Codemagicを開きます
- [Teams] > [Code signing identities] > [iOS certificates]
- [Generate certificate]をクリック
- 次のような画面になるので、certificateをダウンロードして登録を行ってください(ファイルは一度しかダウンロードできません)
プロビジョニングファイルの発行とCodemagicへの登録
次はプロビジョニングファイルの発行を行います。こちらのプロビジョニングファイルは、先ほど作成したcertificatesと紐付けを行わねばならず、これができてないと「Not Uploaded」というバツ印が表示されます。この状態だとプロビジョニングファイルの登録はできてもデプロイできません。これで随分と詰まりました。
また、画像付きプッシュ通知を送る「ImageNotication」などで複数のTargetが存在してる場合、複数のプロビジョニングファイルを作成する必要があります。
下記よりプロビジョニングファイルの発行方法を説明します。
- apple developerを開きます
- [Certificates, Identifiers & Profiles] > [Profiles]
- プラスボタンを押して新しくプロビジョニングファイルを作成
- [Distribution] > [App Store Connect]を選択。その後、[Continue]
- APP idを選択するので、今回デプロイを行いたいアプリのTarget名を選択する
- 紐付けるcertificatesを選択するので、先ほど作成したcertificatesを選択
- プロビジョニングファイルが生成されるのでダウンロード
- Codemagicへ移動
- [Teams] > [Code signing identities] > [iOS provisioning profiles]
- 「.mobileprovision」をアップロードして、適当な変数名を指定する(後からyamlファイルで使う)
Codemagicでの作業
Codemagicのyamlを記述
- ビルドトリガーの設定(GitHubのプッシュやプルリクエストなど)。
- ビルドスクリプトの作成。
# iOSをビルドしてApp Storeにアップロード
ios-push-store:
name: iOS Workflow
instance_type: mac_mini_m1
max_build_duration: 120
# トリガーの設定: GitHubのpushイベント時に自動でビルドを開始 特定のタグのみ
triggering:
events:
- tag
tag_patterns:
- pattern: ios-push*
include: true
cancel_previous_builds: true # 既存のビルドをキャンセル
environment:
flutter: fvm # fvmを使用する
xcode: latest # xcodeの最新バージョンを使用
cocoapods: default # cocoapodsのデフォルトバージョンを使用
ios_signing:
#プロビジョニングファイルの設定(Codemagicに登録したプロビジョニングファイル名を指定、複数可能)
provisioning_profiles:
- provisioning_profile
- image_notification_provisioning_profile
#証明書の設定(Codemagicに登録したcertificatesを指定)
certificates:
- Codemagic_deploy
# 公開設定
integrations:
app_store_connect: apple_store_conect_API_key
# キャッシュ設定: ビルドの高速化
cache:
cache_paths:
- ~/.pub-cache
- .dart_tool
- .packages
- .flutter-plugins
- .flutter-plugin-dependencies
scripts:
# プロビジョンングファイルでの署名
- name: Set up code signing settings on Xcode project
script: |
xcode-project use-profiles
# flutterをクリーン
- name: Flutter clean
script: flutter clean
# freezedのコード生成
- name: Generate freezed code
script: flutter pub run build_runner build --delete-conflicting-outputs
# flutterのパッケージを取得
- name: Get Flutter packages
script: |
flutter packages pub get
# cocoaPodsのインストール
- name: Install pods
script: |
find . -name "Podfile" -execdir pod install \;
# flutterの公開版ファイルのビルド
- name: Flutter build ipa and automatic versioning
script: |
flutter build ipa --release --export-options-plist=/Users/builder/export_options.plist
# クラッシュアナリティクス用にdSYMファイルをアップロード
- name: Upload dSYM files
script: |
ios/Pods/FirebaseCrashlytics/upload-symbols -gsp ios/Runner/production/GoogleService-Info.plist -p ios build/ios/archive/Runner.xcarchive/dSYMs
# app storeに送信するファイル
artifacts:
- build/ios/ipa/*.ipa
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
# デプロイ処理
publishing:
# 完了時送信email
email:
recipients:
- test@sample.com
notify:
success: true #成功した時に送る
failure: false #失敗した時は送らない
app_store_connect:
auth: integration
# テストフライトに自動デプロイする
submit_to_testflight: true
テストとデプロイ
テストの実行
Codemagicのビルドログを確認し、エラーがないかチェックします。
まとめ
Codemagicを使うことで、Flutterアプリのビルドとデプロイを自動化することができました。これにより、手動でのデプロイ作業を省略し、開発の効率を大幅に向上させることができます。
参考URL
Discussion