FlutterアプリをCodemagicでCDしてみた(App Store Connect)

Google Playストア版の続きになります。

FlutterアプリをCodemagicでCDしてみた(Google Playストア)
https://qiita.com/kasa_le/items/17720a02ea0a4de2b66e


Codemagicへは、すでにtagトリガーなどで動くワークフローがあるものとします。
([こちらの記事](https://qiita.com/kasa_le/items/d23075d817f42e869778#codemagic%E3%81%AB%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F)などを参照して下さい。)
また、App Store Connectにて、アプリを登録済で、かつTestFlightへ手動でアプリ公開をしたことがあることが前提です。
([こちらの記事](https://qiita.com/kasa_le/items/fed9f25b92091bd162ce)などを参照して下さい。)

# 手順

基本的には以下のページの通りです。
https://docs.codemagic.io/publishing/publishing-to-app-store/

ただ、Apple ID(アプリケーションID)とApple ID(開発者アカウント)、等のように用語で混乱するので、このページでは以下のように統一します。

- App ID
  - アプリケーション固有のID(10桁の数字) 
  - App Store Connectで確認可能
- 開発者アカウント
  - App Store Connectにログインする時のメールアドレス

## 1.App IDを取得

App Store Connectにアプリを登録済であれば、以下のような場所に見つかるはずです。

|![appid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/baac2990-5e53-75a2-c0f8-e715024eb440.png)|
|:--|

## 2.開発者アカウントのapp-specificパスワードを作成する
app-specificパスワードについては、詳しくはこちらのページにあります。
https://support.apple.com/en-us/HT204397

要するに、サードパーティー製アプリからApp Store Connectに接続できるようにするためのパスワードですね。

### (1)二段階認証を有効にする
開発者アカウントを登録する時に必須なので、設定済みなはずですので、割愛します。

### (2)app-specificパスワードを作成する
こちらのページよりログインします。ここで二段階認証が必要になるので、iOS/MacOSデバイスが必要です。
https://appleid.apple.com/

- 「セキュリティ」セクションの「App用パスワード」を探し、[パスワードを生成]をクリック

|![appspecificpassword.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/80eb4877-3439-6d40-7f77-1907ce13f34e.png)|
|:--|

- 任意のラベル名を付ける
  - 例えば、「Codemagic用」とか

|![app-pass-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/b133989a-a7f1-393b-dc4f-c76beb0bd704.png)|
|:--|


- 表示されたパスワードをコピー

|![app-pass-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/c2e5683e-55dc-29ca-2bb6-a103e3117472.png)|
|:--|


※過去に作成したAppパスワードは、「編集」ボタンから「履歴を表示」で確認できます。

## 3.ユーザー設定でApple Developerと接続する

- 左下のプロフィールアイコンから[User Settings]を選ぶ

![usersettings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/761af66e-cf9c-cf64-2582-f08ba32bc37c.png)

- 開発者アカウントのメールアドレスとパスワードを入力する

![connect_appledeveloper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/66887431-caef-1b06-a81c-d8644e713794.png)

- [Save]をクリック


## 4.ワークフローに設定する

### (1)リリースビルド設定
- [Build]セクションで、Releaseビルドの設定にする
  - iOSにチェックを入れるのを忘れずに

![build_release.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/d9dfedd7-8bbe-6362-badb-01449471848d.png)

[Save]を忘れずにクリック。

### (2)iOS Code signing設定


- [Publish]セクションを開く
- [iOS code signing]を開く
- **Select code signing method**: `Automatic`
  - 個人開発なら`Automatic`で良いかと思います。
  - 業務で開発チームのプロビジョニングファイルがある場合は`Manual`にするのかと思います。(こちらは経験無いので、詳しくは分かりません。すみません)

- **Developer portal team (using credentials from user settings)**: ドロップダウンから選ぶ
  - Apple Developerへの接続が上手くいっていれば、ここでチームを選べます。
  - 基本的には、Xcodeで選択したのと同じものを選べば良いです。
- **Provisioning profile type**: TestFlightに上げるならば`App store`
- **Bundle identifier (optional)**: debugビルドとreleaseビルドでBundle Idを変えている場合、ここに**リリースビルド用のBundle Id**を記入する
  - しておかないとビルド中に「複数のBundle Idが設定にあるよ」的なエラーで失敗します。

![ios_code_signing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/7aad210f-c1d4-af67-3436-2a25fd943aed.png)

- [Save]をクリック！

### (3)App Store Connect設定
- [App Store Connect]を開く
   - [Publish]セクションの下の方にあります

- **AppleID**: 開発者アカウントのメールアドレス
- **App-specific password**: 先ほどコピーしたApp用パスワードを貼り付ける
- **App ID**: App IDを貼り付ける

![enable_app_store_connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/bce6ed48-85df-212a-6af7-5bd15b99a524.png)

- **Enable App Store Connect publishing**にチェックを入れる
- [Save]をクリック！！

以上で設定は終わりです。
ビルドを流してみましょう！

# App Store Connectでの作業

GoogleのPlayストアへのpublishと違い、App Store Connectへのpublishは、`ipa`ファイルというアプリ実行ファイルをアップロードするだけで終わりのようです。
TestFlightでテストを有効にしたり、リリースをAppleに審査申請するのは、App Store Connectのページで手動で行う必要があります。

`ipa`ファイルのビルド・アップロードは、私のマシンだとかなりCPU使って重たくなり、他の作業が出来なくなるので、Codemagicがアップロードまでやってくれればかなり軽減になりますね。


# まとめ
Google Playストア版と合わせ、これで「tagがpushされたら自動でリリースビルドしてデプロイ」が両OSで出来るようになりました。

Codemagic、マジでオススメです。Flutterに特化というのが面白いですよね。一応YAML編集してネイティブなAndroidアプリも出来そうではあるんですが、CIまでしかまだ試してなくて(しかもエミュレーターテストはどうやら出来ない)、CDとなるとどうなるか未知数です。

サポートはSlackですがだいたい直ぐに返事が来るので、凄く助かります。もちろん英語のみですが、中学生レベルでなんとかなります。時差に気をつけるくらいかな？

ただ、ちょっと大きめのプロジェクトになると、*Mac Mini*でのビルドでは時間がかかって無料枠をあっという間に使い切りそうなので、その場合は課金して*Mac Pro*コースにするか、増量枠を都度課金して使うといったことが必要そうです。

*Mac Pro*は無料で3回までお試しで使えるので私も試しましたが、圧倒的にビルドが早いので快適でした^-^

FlutterのMeetup(Tokyo)が再開されたら、ちょっと参加してCodemagic推してみようかな？