FlutterアプリをBitriseを使ってApp Store Connectにアップする手順まとめ

# この記事は？

Flutterを触っていてApp Store Connectにアップするのに手間取ったので備忘も兼ねて。

# Apple Developerに加入

[公式サイト](https://developer.apple.com/jp/)からよしなに。

# Flutterアプリの作成

[公式サイト](https://flutter.dev/)やQiitaを参考に作成します。
Bitriseで利用するため、GitHubやBitbucketなどにpushしておきます。

# Bitriseにアカウントを作る

[公式サイト](https://www.bitrise.io/)からアカウントを作成します。最初にアカウントを作るとお試しでDeveloperアカウントが利用出来ます。お試し期間が過ぎるとFreeアカウント（1ジョブ10分までなど制限あり）になりますので、注意が必要です。

# XcodeからSigingの設定を行う

- Flutterプロジェクトの直下にある`ios`フォルダをIntelliJ IDEAやAndroid Studioで右クリックし`Flutter > Open iOS module in Xcode`を選び、Xcodeを開きます。Xcodeで`${WORK_DIR}/ios/Runner.xcodeproj`を開いてもOK。
- 開いたら左ペインのツリーのてっぺん「Runner」をダブルクリックし、中央ペインから`Signing & Capabilities`選択します。
- `Automaticaly manage signing`がチェックされていることを確認し、`Team`には自分や会社のApple Developerアカウントを選択します。追加済みでなければ`Add an Account...`でアカウントを追加してください。
- その後、メニューの`Xcode > Preferences...`から設定を開き、`Accounts`タブを開きます。
- 自分のアカウントを選択し（無ければ追加し）、`Manage Certificates...`をクリックします。
- 左下の`+`をクリックし、`Apple Distribution`を選択し、証明書が追加されたら`Done`をクリックします。
- この状態でGitHubやBitbucketなどに最新の状態をpushしておきましょう。

# Apple DeveloperサイトでIdentifierとProfileの設定

- [公式サイト](https://developer.apple.com/jp/)の`メニュー > account`からログインします。
- `Certificates, Identifiers & Profiles`を開きます。
- `Identifiers`を開きます。
- 「+」ボタンをクリックし、`App IDs`を選択、`Continu`をクリックします。
- `Platform`は`iOS, tvOS, watchOS`を選択、`Description`にはアプリの説明を、`Bundle ID`はXcodeの`Signing & Capabilities`の`Bundle Identifiler`に記載されているものを記入します。
- `Capabilities`でアプリに利用する機能を選択し、`Continue`をクリックします。
- 内容を確認し`Register`をクリックします。
- 次に`Profiles`を開きます。
- 「+」ボタンをクリックし、`App Store`を選択、`Continue`をクリックします。
- 先ほど追加した`App ID`を選択し、`Continue`をクリックします。
- Xcodeで作成した`Distribution`の証明書を選択し、`Continue`をクリックします。
- `Provisioning Profile Name`に説明を書いて、`Generate`をクリックします。
- Xcodeの`Preferences...`を開き、`Accounts`の自分のApple IDで`Download Manual Profiles`をクリックします。

# iTunes Connectサイトでアプリを登録する

- [公式サイト](https://itunesconnect.apple.com/)にログインします。
- `マイApp`を開きます。
- 「+」ボタンから`新規 App`を選択します。
- `新規 App`モーダル画面で、プラットフォームはiOS、名前、プライマリ言語、先ほど選択したバンドルIDを選択し、SKUはApp Store内で一意になるような物を記入します。記入したら`作成`をクリックします。

# Bitriseにリポジトリを追加する

- Dashboardや右上の「+」ボタンなどから、webUIを使って追加していきます。
- CHOOSE ACCOUNTでBitriseのアカウントを選択し、アプリの設定を公開(Public)するか非公開(Private)にするかを選択し、Nextをクリックします。
- GitHubやBitbucketからリポジトリを選択します。まだGitHubなどに接続していなければ、この画面で接続が可能です。
- `Setup repository access`では別にプライベートリポジトリーを使う（プライベートのモジュールなどを使っている場合）に、追加でリポジトリの設定をするかを聞かれます。今回私はプライベートリポジトリーを使っていないので「No, auto-add SSH Key」を選択しました。SSH公開鍵が表示されるのでリポジトリー側に設定します。
- `Choose branch`で対象となるブランチを選択します。ここでは`master`に設定しました。
- `VALIDATING REPOSITORY`が動き出します。しばらく時間がかかるのでコーヒーでも飲みましょう（と書いてあります）。
- `Project build configuration`では`Flutter`を選びます。
- `Select Run tests found in the project`ではテストを行うかどうかを選択します。
- `Select ipa export method`では、App Storeに提出するので`app-store`を選びます。
- `App icon`でアイコン画像をアップロードします。
- `Webhook setup`では`Register a Webhook for me!`を選択します。
- すべて終わったら右上の`FINISH`をクリックします。
- 最初のビルドが自動的に走ります。

# BitrizeでiOSアプリのビルド設定を追加する

## 証明書ファイルのアップロード

`codesigndoc`を使って証明書をBitriseにアップロードします。[公式サイト](https://devcenter.bitrise.io/jp/code-signing/ios-code-signing/collecting-files-with-codesigndoc/)の記述を参考に進めます。

- Terminalを開きます。
- Flutterプロジェクトに移動します。
- 以下のコードをTerminalで実行します。

```bash:Terminal
bash -l -c "$(curl -sfL https://raw.githubusercontent.com/bitrise-tools/codesigndoc/master/_scripts/install_wrap-xcode.sh)"
```

- iOSプロジェクトとmacOSプロジェクトの選択画面がでるのでiOSに対応する番号を入力し、エンターキーを押します。
- キーチェーンアクセスの許諾が出るので許可します。
- ipaファイルの署名に使うモード選択が出るので2(app-store)を入力し、エンターキーを押します。
- 追加で他のプロファイルを選択するか聞かれるので`NO`と答えます。
- `Do you want to upload （以下略）`と聞かれるので、`yes`と答えます。
- Bitbriseのアカウントページの`Security`で`Personal access token`を生成し、それをTerminalにペーストしてエンターキーを押します。
- どのプロジェクトにアップするかを聞かれるので、数字で選択しエンターキーを押します。
- プロジェクトのWorkflowエディタに移動し、`Code Sigining`タブに`Provisioning Profile`と`Code Sigining Certificates`がアップロードされている事を確認します。

## Workflow設定を追加

- Workflowメニューの`Workflows`を開きます。
- `Activate SSH Key`の上にワークフロー`Certificate and profile installer`を追加します。
- `Flutter Test`の次に`Flutter Build`を追加します。以下設定を変更します。
    - `Platform`を`both`から`ios`に変更します。
- `Flutter Build`の次に`Xcode Archive & Export for iOS`を追加します。以下設定を変更します。
    - `Select method export`を`app-store`に設定。
- ワークフローの最後に`Deploy to iTunes Connect`を追加します。以下設定を変更します。
    - Apple IDに自分のApple IDを登録します。
        - Key : $APPLE_ID
        - Value : （自分のApple ID）
    - Passwordに自分のApple IDのパスワードを登録します。
        - Key : $APPLE_ID_PASSWORD
        - Value : （自分のApple IDのパスワード）
    - Application Specific PasswordにApp用パスワード（[AppleIDのサイト](https://appleid.apple.com/)で設定）を登録します。
        - Key : $APPLE_ID_APP_PASSWORD
        - Value : （自分のAppパスワード）
    - App Apple IDにiTunes ConnectのマイAppのApp情報からApple IDを転記します。
    - App Bundle IDに先ほど指定したマイAppのBundle IDを転記します。
    - Submit for Reviewはレビューが必要かどうかを選択します。
- 設定が終わったら右上の「⌘+S」をクリックします。

## $FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDを設定

- 先ほど設定した$APPLE_ID_APP_PASSWORDと同じ物を$FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDという名前で追加で登録します。（なぜ設定が2つあるのか詳細は不明）。
    - Workflowエディターの`Secrets`タブを開きます。
    - `Add new`をクリックして以下を追加します。
        - Key : $FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
        - Value : （自分のAppパスワード）

## Bitbriseの設定からApple Developer Connectionへ接続

- Bitbriseの右上のアイコンをクリックし`Account settings`をクリックします。
- 左のメニューから「Apple Developer Account」をクリックします。
- 「Connect」ボタンをクリックしApple IDにログインします。

## Workflowのアップデート他

- Workflowエディターのワークフローのアイコンの右上に赤丸が付いているものはアップデートがあるので、現時点での最新版にアップデートします。
    - ワークフローをクリックします。
    - `Version`のプルダウンから最新のものを選びます。
- Flutter InstallでSDKのバージョンを指定します。
    - `Flutter SDK git repository version`を`v1.12.13+hotfix.7`（2020/02/03日時点）に設定します。
    - `Update to the lates version`を`true`に設定します。
- 設定が終わったら右上の「⌘+S」をクリックします。

# Apple IDとプロジェクトの紐付け

- プロジェクトの`Team`タブを開きます。
- `Connected Apple Developer Portal Account`で自分のApple Developerアカウントを選択し、`Save`をクリックします。
- `Test the apple developer portal connection`をクリックし正しく動作する事を確認します（エラーが出なければOK）。
 
# ビルドの実行とApp Store ConnectへのIPAファイルのアップロード

ダッシュボードやプロジェクトのページからビルドを実行します。正しく設定されていればApp Store ConnectにIPAファイルがアップロードされるはずです。

# TestFlightの登録など

ここから先は色々なサイトで書かれていたので省略。

# 最後に

久々にアプリを作っていて浦島太郎状態です。やっぱり最新動向はちゃんと追わないとだめですね。