Flutterで実機を動かす時に遭遇したエラー攻略法

## はじめに
この記事を書くきっかけは

**自分がめちゃめちゃ悩まされたから**

それだけです。
個人でアプリを開発しようとしてもアプリの機能以前に実機のエラーに時間を無駄にしました。
エラーが1個だけではなく何パターンもあるのでいちいち調べないといけないため、
検索に時間を費やさないようにまとめます。自分はまだ初心者ですが、新しく始めた方に
僕みたいになってほしくないため参考になれば幸いです。
### 補足

この記事は具体的な手順は全ては記述できないのでエラーごとに確認することを
ざっとまとめています。解決コマンドや確認事項の備忘録的スタンスで進めます。
またこの記事は自分が遭遇したエラーや調べるにあたってよく目にした方法を
まとめているだけなので、**この記事で全てを網羅できるわけではありません。**
詳しくは他の方の記事も参考にしながら進めてください。

## 1. とりあえずこれ 
実機以前にFlutter全般で使えるものです。

### Flutter/Xcodeのバージョンをアップデート
特にXcodeのバージョンをアップデートをしていなかったらしましょう。

### Flutter doctor
まず先にこれをする事でXcode,CocoaPodsに問題がないかを調べます。
エラーが出ている箇所をそれぞれ解決します。

```
 flutter doctor
```
### flutter run --verbose
エラーはエラー分と全く関係のないところが原因だったりするので、詳細を出してくれる
魔法のコマンドです。出てきたエラーを検索したり考えたらOKです。
```
flutter run --verbose
```
### Xcodeでビルド
Xcodeを開き**Product/Build**または**コマンド＋B**でデバックしてエラーを検索します。

### Xcode/エディタの再起動
エラーを対策したのに一向にエラーが消えない、パッケージをインストールしたのに
適応されない時は一度Xocdeやエディタを再起動したら治る時があります。
また以下でも治ることがあるので調べながら慎重に行なってください。
```
$ flutter clean
$ pub get
または
$ pod installなど
```

## 2. 設定関連のエラーの場合
### Deviceが設定されてない
XcodeのRunnerのところのDeviceがシミュレーターの端末になっていないか
その場合は実機の名前に変更してください。

### Team・BundleIdentifierが設定されていない/適切ではない
**大抵この場合が多いです**
XcodeのRunnerのTARGETS/SigningのTeamに
今回の実機テストで利用するApple IDのTeamを選びます。
(リリース予定の人はAppleの有料プログラムに入会しているAppleIDを指定)

そしてBundleIdentifierに適当なものを入力します。
```
example.myapp.[アプリ名英数] など。
使えない場合は
example.testMyapp.[アプリ名英数]や
example.myapp.[アプリ名英数]20220413(日付)を入力してください
```

(日付を足すなどありますが、リリースを視野に入れている方は
BundleIdentifierはリリースしてからは簡単に変えれないため慎重に選びましょう)

![スクリーンショット 2022-04-14 0.54.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1631114/c83b248a-ec1e-3adf-303b-252cefd2cdd8.png)

### Could not run build/ios/iphoneos/Runner.app on [App]
Xcodeの設定が完了したのに以下のようにエラーが出ます。
繋いでいるiPhoneで**アプリを信頼する**手順を飛ばしていたことが原因です。
```
Could not run build/ios/iphoneos/Runner.app on xxxxxxxx-xxxxxxxxxxxxxxxx.
```

iOS実機の 「設定」→「一般」→「デバイス管理」 に進み、テストするアプリを信頼する。


## 3. アプリにFireBaseを導入している場合
アプリにFireBaseを導入して初めてビルドするとエラーになることがあります。
### 「Firebase.initializeApp」エラー
```
No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
```
Flutterプロジェクトのmain()に以下を追加してください。
```
Widget _buildBody(BuildContext context) {
    Firebase.initializeApp(); // new
```



### 「Automatically assigning platform ‘iOS with version」エラー
```
Automatically assigning platform ‘iOS with version "version" on target ‘Runner’ because no platform was specified. Please specify a platform for this target in your podfile.
```
ios/Runner/Podfileの**platform :ios, '[version]'** のコメントを外し
初期は古いバージョンになっているので、iosのバージョンをなるべく最新のものにしましょう。
![スクリーンショット 2022-04-14 2.43.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1631114/695ba28a-6caa-3eea-0888-15334daa1740.png)

### [google-services.json]エラー
```
[core/not-initialized] Firebase has not been correctly initialized. Have you added the "google-services.json" file to the project.
```
Firebaseのサイトでgoogle-services.jsonをインストールしてください。
[参考リンク (Firebaseのセットアップ方法)](https://kwmt27.net/2019/02/02/how-to-setup-cloud-firestore/)


### ios buil...が永遠に終わらない時
Firebase導入後に実機でビルドするとios build...が永遠と終わらない時があります。
その場合ios/Runner/Podfileのtarget 'Runner' doに以下を追加しましょう。
```
# ...
target 'Runner' do
~省略~
  pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '8.14.0'
~省略~
end
# ...
```

### 「CocoaPods could not find compatible versions」エラー
上記の処理を行なった後に発生することがあるエラーです。
```
[!] CocoaPods could not find compatible versions for pod "FirebaseFirestore":
      In snapshot (Podfile.lock):
        FirebaseFirestore (= 7.3.0, ~> 7.3.0)
      In Podfile:
        FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `6.26.0`)
    None of your spec sources contain a spec satisfying the dependencies: `FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `6.26.0`), FirebaseFirestore (= 7.3.0, ~> 7.3.0)`.
```
上記の場合は先ほどのtarget 'Runner' doの指定しているバージョンを変更しましょう。
今回の場合は`6.26.0`から`7.3.0`に変更します。
(バージョンが明らかに古い場合は
**pubspec.yaml**のFireStoreのバージョンを最新のものに変更してください。
## 4. リリース時の場合
AppleDeveloperProgramに登録をして、AppleIDやTeamを変える時に
XcodeのSigningで以下のエラーなどが発生します。
```
Failed to create provisioning profile.
No profiles for 'XXXXXXXX.APPName' were found
```
appleのdeveloperサイトのdevice項目に実機の情報が登録していないと該当のエラーが出ます。
設定箇所 -> https://developer.apple.com/account/ios/device/
[参考-XcodeのSigningのエラーの解消方法](https://teratail.com/questions/121771)

## さいごに
非常に醜い記事となってしまいましたが、エラー文を検索して
この記事に行きついてもらえたら幸いです。

上記以外にも複数のパターンが存在していますが、根気強くトライしましょう。
一度解決法を理解すると次には楽に進めるので諦めず頑張りましょう！

最後まで読んでいただき、ありがとうございました。