FlutterでiOSアプリをCodemagic経由でTestFlightに自動デプロイする

モバイルアプリを開発する場合、チームメンバーに開発中の最新のアプリをできるだけ早くさわってもらいフィードバックを得ることが大事です。iOSではTestFlightを使いチームメンバーにアプリを配布することがおおいと思います。
今回はFlutterで作ったiOSアプリをTestFlightにCodemagicを使って自動デプロイする設定を紹介します。
CodemagicはFlutter専用のCI/CD環境です。Flutter liveでも紹介されていました。現在のところ無料で使えてTestFlightへ自動でアップロードすることができます。
ただ、ビルドの設定を他の開発者と共有するなどのチーム機能はまだ開発中のようでこの記事を書いている段階では使えません。
iOSとAndroidのビルドができますが今回はiOSだけを扱います。
App Store Connectの設定は、Build and release for iOSをみて実施しておきます。
Codemagicの設定
Codemagicの基本的な流れは、GitHubアカウントでログインしてFlutterのリポジトリを選択してビルド設定を行います。
ビルド設定は以下のようになっています。(flutter_flavorというのがアプリの名前です)

設定項目はBuild、Test、Publishとあり、各ステップで細かい設定があります。
右上にWorkflow settingsというのがありますが、同じリポジトリに対して複数のビルドプロセスを設定できます。例えば、masterブランチに対してproductionワークフロー、developワークフローを定義して、本番サーバにつなぎにいくアプリ、開発サーバにつなぎにいくアプリを別々の設定でビルドし、配布できます。
それでは実際の設定をはじめから見ていきます。あらかじめiTunes Connectにアプリが作成されているという前提ですすめます。
Buildの項目は以下のように設定します。
Build argumentsには--build-number $BUILD_NUMBERを設定します。BUILD_NUMBERは、iOSのCFBundleVersionにあたるのですが、Codemagicのワークフローをビルドするたびにインクリメントされるビルド番号が設定されています。TestFlightで1.0.1(10)のように表示される10の部分です。この番号が同じだとTestFlightにあげることができません。

Testの項目はデフォルトのままにしています。テストがない場合は設定を変更してください。

Publishの設定を行います。iOSを設定する場合は、iOS code signingとApp Store Connectの設定を行います。(ビルド後の通知を行いたい場合はSlackの設定などもできます)

iOS Code SigningにはDistributionのProvisioning Profileの証明書を設定します。ファイル名は適当です。ここにざくっとやり方が書いてあるので参考にしてください。

App Store ConnectにはiTunes Connectのログインに使用してApple ID、Passwordと、アプリのApp IDを入力してください。
iOSのArchiveの設定
Codemagic以外の設定をします。
リポジトリのios/Runner.xcworkspaceを開きます。リリース用にXcodeでそのままArchiveするとこけるので、ios/Flutter/Release.xcconfigファイルに以下を追記します。
TRACK_WIDGET_CREATION=
次にInfo.plistを開き、App Uses Non-Exempt EncryptionをYESに設定します。これはそのままだとTestFlightでMissing Complianceで暗号に関する設定を手動でしなくてはいけないのですが、それをさけるため設定しています。
CI/CD実行
これまでの設定で、masterブランチにpushすると自動でTestFlightに最新バージョンがアップロードされるようになります。
Codemagicを使えば開発中の最新のiOSアプリが手軽にメンバーに共有することができます。ぜひぜひ使ってみてください。