[FlutterFlow]  GitHub経由でデプロイする際のエラー

## 初めに
### FlutterFlowについて

FlutterFlowは、爆速モバイルアプリ開発を実現する、画期的なノーコードツールです。簡単なアプリなら本当にその日のうちにテストフライトまでが完了していると優れたツールです。
他のノーコードツールと違って書ける、Flutterアプリとして吐き出せる、という点が強みです。
Flutterでできることならなんだってできちゃいます。

https://flutterflow.io/

### GitHubを使った開発が可能

FlutterFlowではコードをGitHubのレポジトリにボタンひとつでプッシュする機能が備わっています。また、それだけではなく、GitHub上のブランチを指定すると、そのブランチのコードを使ってデプロイまでしてくれます。

例えば、僕はFlutterFlowではどうしても修正できない箇所を修正・追加するためにこの機能を使っています。（具体的な手順は下の通り）

1. FlutterFlowからGitHubのレポジトリにプッシュ（flutterflowブランチが作成される）
1. プッシュされたコードをmainブランチにマージ
1. mainブランチからdevelopブランチを作成
1. developブランチをローカル環境にプル
1. とってきたコードをXcodeやその他エディター作成してプッシュ
1. developブランチをmainブランチにマージ
1. deployブランチを作成
1. deployブランチを使ってFlutterFlowからデプロイ


## 今回生じたエラーについて

今回は以下の方法でAndroid版をデプロイする際に生じたエラーについてです。

:::note info
今までにGitHubを経由せずにリリース済
今回新たにGitHub経由でリリースしようとしている
:::

今までGitHubを経由せずにデプロイしていた際は起きなかったエラーが発生しました。
エラーログの詳細は以下のとおりです。


```bash:エラー内容
== Gathering artifacts ==

== Publishing artifacts ==

Publishing artifact app-release.apk
Publishing artifact app-release.apk
Publishing artifact app-release.aab
Publishing artifact release_mapping_mapping.txt

Publishing app-release.aab to Google Play
Google Play failed to upload artefacts. The Android App Bundle was signed with the wrong key. Found: SHA1: XX:XX:XX:XX, expected: SHA1: YY:YY:YY:YY: {
    "error": {
        "code": 403,
        "message": "The Android App Bundle was signed with the wrong key. Found: SHA1: XX:XX:XX:XX, expected: SHA1: YY:YY:YY:YY.",
        "status": "PERMISSION_DENIED"
    }
}
```

要は間違ったKeystore fileを使っているということらしい。

## 原因特定
いくつかサイトを見て回りましたが、どれも解決には至らず。
FlutterFlowの公式チャットボットに聞くと次のような返事がありました。


> What does this error mean?
> One of the most common causes of a publishing error when deploying to the Google Play Store is attempting to deploy using the wrong Keystore file.

特に新しい情報もなくエラーと同じ内容です。情報は続きます。

> Verify That The Correct Keystore File Was Submitted For Signing
To create a new keystore, please run the following commands in your Integrated Development Environment
> ```​keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload```
> If the application was already deployed and the previous keystore was misplaced, contact Google Support for further assistance.

どうやらこのコマンドを入力すると、新しくkeystoreファイルが作成されてリリースできるようになるという話。結果これでは解決できませんでした。ミスリードになって新しくkeystore作ったりして大量の時間を溶かしました、、、。

---
その後色々調べた情報をまとめると、
1. 今までは自動でkeystoreを使ってリリースしてくれていたらしい
1. GitHubでリリースする場合は設定ファイル`build.gradle`が自動では更新されない

ということでエラーが吐かれているっぽいことが判明。
なので、今まで使っていたkeystoreの情報を取得して、それを手動で反映させる必要がありそうです。

## 対処法
### 1. 今まで使っていたkeystoreの情報を確認

keystoreの情報はService Account Credentialsの右側に鍵マークが出てきます。
※画像はすでに表示されていませんが、「Credentials Set」の右にオレンジのボタンが出てきます。

![スクリーンショット 2024-03-08 15.27.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628974/080008dd-3f2d-a598-9dca-67650bee217d.png)

zipファイルとしてダウンロードされるので、展開して内容を確認します。
二つファイルが入っていると思いますが
- `credentials.txt` ：keystoreの各種情報
- `sample-app-xxx.jks` ：keystoreファイル
です。

credentials.txtの中に書かれている値はFlutterFlowに設定する値です。

```bash:credentials.txt
    alias: sample-app-xxxx
    alias password: xxxxxxxxxxxxxxxxxx
    keystore password: xxxxxxxxxxxxxxxxxx
    
```


### 2. ファイルの修正

`android/app/build.gradle`を修正します。
修正できたらGitHubのリポジトリにプッシュしてください。

```diff_javascript:android/app/build.gradle
    ...
    
    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
-            // signingConfig signingConfigs.debug
+           signingConfig signingConfigs.release
        }
    }

    ...
```



### 3. FlutterFlow側の設定変更
`Setting > App Settings > Mobile deployment`からAdvanced Settingsの設定を行う。
1. Keystoreファイルに、`sample-app-xxx.jks`をアップロード
1. Keystore Alias に`credentials.txt`のaliasを入力
1. Deployを押すとパスワードを求められるので`credentials.txt`のpasswordを入力

![スクリーンショット 2024-03-08 16.31.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628974/072c9510-81bf-ff2a-fe93-ca8604f0fe8b.png)

これで無事デプロイができるようになるはずです。


## 最後に
対処するのに数時間溶かしました🥲
同じ問題でお悩みの方が少しでも早く解決できることをお祈りしています。
他にもいろんなバグが出ることもありますが、FlutterFlowとても便利なので、これからも使い続けたいですね。