📚

FlutterでiOSアプリのリリース手順

2021/05/05に公開

自己紹介

はじめましての方もそうでない方も、レシピサイトやSNSなどメニューを横断的に取り込める

おうちメニュー

というプロダクトをやっているkentarohです。

iOS Android
App Store Play Store

本題

Flutterで開発したアプリをさてApp Storeで配布しようとしたときに手順で困ることありませんか?私は毎回はまっている気がしますのでドキュメントとして残そうと思いました。

前提

Flutterの開発環境ですが、development staging production’と環境を用意しています。今回ビルドのコマンドでもFlavorとして指定しています。

手順

ストアでのリリースに必要なファイルや情報を作成していきます。

  1. リリースノートを作成
  2. アプリバージョン番号の更新
  3. Flutterでビルド
  4. XCodeでArchive
  5. App Store ConnectでTestflightにてテスト
  6. ストアリリース

1リリースノートを作成

まずは前回のリリースから今回のリリースまでに含まれるコミットを確認

git log

前回のリリースとの差分のコメントを確認しメモします。
そしてリリース文のテンプレートに今回のリリースをストーリーとして追記しリリース文を作成します。

2アプリのバージョン番号の更新

ストアのバージョンを確認して、
今回のバージョンを差分を意識した階層でインクリメントしてコミットを作成します。
編集するのはここ。

pubspec.yaml
version: 1.0.26+27

+を挟んで前後を更新します。

3Flutterでビルド

コンソールからflutterコマンドでビルドしていきます。
とその前に

flutter clean

をしておくのがおすすめです。
それからようやくビルドです。

flutter build ios --dart-define=FLAVOR=production

Flavorを使って環境をわけているので、--dart-define=FLAVORは環境依存でオプションです。
Use Release for command-line buildsに設定しているために、flavorのオプションなしでReleaseでビルドされます。

これでアプリファイルができました

※pod install周りでいつもハマってます。M1 Mac使ってます。Android Studioじゃなくてターミナルから

pod install --repo-update

したり、そもそもpubspec.yamlのバージョン指定消したり、pubspec.lock消したり、
iosのビルド高速化に挿入しているコード。ios/podfileの

pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '8.1.0'

の8.1.0とかを修正したり色々記事見て対応しています。この辺りももうちょっと対応纏めたいな。

4XcodeでArchive

こんどはXcodeを開いて上部のproduct(英語のまま使ってるので日本語でそれっぽいの探してください)のArchiveを選択
※Simurator がAny iOS Deviceにしていないと Archiveが選択できません。

Archiveが終わるとあとは画面ぽちぽちで、App Store Connectへデプロイしてくれます。

ビルドはまりポイント

ITMS-90338: Non-public API usage
こちら、先日Apple側のトラブルでこのメッセージでApp Store Connectへのアップロード時にはじかれるというトラブルがあったようですが、私の場合そうではなく、ビルドがReleaseモードじゃない状態でビルドしてアップロードしていることが原因でした。

5TestFlightでもテスト

さてそのままでもストアにリリースできますが、ここでちょっと落ち着いてテストしています。ユーザーがよく使うであろうゴールデンパスのシナリオをさらっとというのもありますし、ベータテストユーザーに自由にさわってもらったりしています。そのためにも設定がいるのでちょっとメモ。

App Store Connectの画面でアプリを選択し、TestFlightのタブを選択。
まずはTestFlightからビルドを選択し審査に出します。
審査が終わったら、
今回デプロイしたビルドを選んでテスターを追加します。
そして内部グループや外部グループのパブリックリンクを選択し、ビルドを追加します。
そうすることで、ユーザーのTestFlightに最新のアプリがインストールできる状態になります。

特に問題がなかったら、ストアリリースです。
あ、ベータテスターからのありがたい改善のアイデアなどはバックログ※に入れておきましょうね。

※バックログとはスクラム開発(アジャイル開発手法の一つ)における、やることリスト・アイデアリストのようなもの

6ストアリリース

さていよいよストアのリリースです。
1で作成したリリースノートや、事前に作成した新しいストア画像などを登録して審査へ。
アップデートなら半日ほどでストアにリリースされることも。
あとはメールで審査完了を待つのみです。

おまけ 本番環境設定からの戻し

Firebaseのリリースも行ったとき、現在のプロジェクトが本番環境向けになっています。
※検証環境と本番環境でFirebaseのプロジェクトをわけている前提
firebase projects:list
で現在の設定を確認しましょう。 
current がついているものが現在設定中のプロジェクトです。
firebase use プロジェクト名
で変更しておきましょう。

GoogleSearvices.Infoも検証と本番でわけているので
flutter cleanして
podfile.lockを消して
pod install
もしておく必要があります。

感想

Confluenceなどでリリース手順をまとめていなかったので記事にさせてもらいました。意外とチームで共有できてなかったことでもあるので、そういう知財は積極的にここに残そうと思います。


次回予告

現在、テスト駆動開発に移行するために活動しています。こちらをを共有しようと思います。

Discussion