FlutterからFirebaseの利用（Mac M1）

## はじめに
以前に同じ様な内容の記事で、Ubuntu上に開発環境を構築したFlutterからFireabase（Cloud Firestore）を利用するまでの手順を投稿したことはあるが、Mac版で同じことをやろうとした時に色々と手こずったので、Mac版の設定は別途整理することにした。

## 実行環境
【PC】
　MacBook Air (M1, 2020)

【各SWバージョン】
　macOS Big Sur 11.6
　Flutter 2.5.3　（dart 2.14.4）
　Xcode 13.0
　AndroidStudio 2020.3
　Cocoapods

## 前準備
　`Flutter`、`Xcode`、`AndroidStudio`のインストールや初期設定が完了しており、iosシュミレータが動いていることを前提する。
　Mac版のFlutter環境の構築はこれらのサイトを参考にした。
https://zenn.dev/hndr/articles/14689ec937af1f
https://flutternyumon.com/how-to-setup-flutter/
https://github.com/flutter/flutter/wiki/Developing-with-Flutter-on-Apple-Silicon
　

## Fireabase を利用するまでの手順

１．Flutterプロジェクトの作成
２．Firebase にプロジェクトを作成し、アプリを追加(ios)する
３．AndroidStudioを開き、Firebaseパッケージの追加


## １．Flutterプロジェクトの作成
AndroidStudioを開き、【New Flutter Project】を選択し、任意のディレクトリにプロジェクトを作成する。

## ２．Firebase にプロジェクトを作成し、アプリを追加(ios)する
Firebaseプロジェクト作成後、アプリの追加より『ios』を選択する。
手順は[Firebaseのコンソール](https://console.firebase.google.com/?hl=ja)上で表示されるので、その中で少し引っ掛かりそうなポイントのみ以下に整理。

### ①アプリの登録
・`iosアプリを選択し、バンドルIDを入れる`
　XcodeでFlutterプロジェクト配下の`ios > Runner.xcodeproj`を開く。Xcodeのプロジェクト画面で『Runner』を選択すると、`Bundle Idnetifier` というのがあるので、これを入力する。
![Qiita-no055_img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/00a8bb9c-6e0f-a293-9287-6f7cb9306612.png)

・`アプリのニックネーム`
　省略可で後から編集可能なので、一旦未入力でOK

・`App Store ID`
　省略可で後から編集可能なので、一旦未入力でOK

### ②設定ファイルのダウンロード
 `GoogleService-Info.plist` をダウンロードし、これをXcodeを使って『Runner』ディレクトリの直下に追加する。
![Qiita-no055_img02_s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/7d0e4a10-87a0-0d8b-37e2-34dfc14287d6.png)
※この際に "Copy items if needed" のチェックボックスにチェックを入れる。 

**これ以降の設定は不要のため、『次へ』で進んで行き『完了』までクリックしてしまってOK。**


## ３．AndroidStudioを開き、Firebaseパッケージの追加
　AndroidStudioを立ち上げ、プロジェクトを開く。
Terminalより以下の様なコマンドを実行することで、各FirebaseパッケージをFlutterに追加できる。
 ※このタイミングで`Podfile`がなければ、iosディクレクトリの直下に作成される。
　・`flutter pub add firebase_core`
　・`flutter pub add firebase_auth`
　・`flutter pub add cloud_firestore`
　・`flutter pub add google_sign_in`
　・`flutter pub add flutter_slidable`

![Qiita-no055_img03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654767/e8c2425d-91bc-8170-6326-cc5715cd0228.png)
※その他のパッケージの追加については、こちらの公式サイトを参考に。

https://firebase.flutter.dev

**Flutterへのパッケージ追加後、以下を実行する。**

```terminal:
cd ios
pod repo update
pod install or pod update
```
※`pod install` と `pod update` の違いはこちらのサイトを参考に理解した。

https://noiseless-blog.net/entry/2016/12/17/212826

上記コマンドの`pod repo update`実行時に以下の様なエラーが発生した場合の、対処法をその下に記載。

```terminal:エラー内容１
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html

Error running pod install
Error launching application on iPhone 13.
```

```terminal:上記エラーの対処法：下記コマンド実行後再度[pod　repo　update]以下のコマンドを実行
sudo gem install ffi -- --enable-libffi-alloc
```

その後、さらに`pod install`実行時に以下の様なエラーが発生した場合の、対処法をその下に記載。

```terminal:エラー内容２

    [!] Automatically assigning platform `iOS` with version `9.0` on target `Runner` because no
    platform was specified. Please specify a platform for this target in your Podfile. See
    `https://guides.cocoapods.org/syntax/podfile.html#platform`.

Error running pod install
Error launching application on iPhone 13.
```

以下の様にコメントアウトされている場合、任意なバージョンに指定してコメントアウトを外す。

```sh:Podfile
platform :ios, '13.0'
```