Flutter を初めて触ったらiOSの設定に苦労した&使ってきたコマンド

Flutter は「ひとつのコードで Android と iOS の両方が動く！」という魅力的なフレームワーク。  
でも、実際に iOS でサンプルコードを動かすまでに一日費やすほど苦労した…。  
今回は、環境構築でハマったポイントを記録しておく。 


## 0. 私の動作環境
- PC: Macbook Air M3
- Android Studio: Ladybug Feature Drop | 2024.2.2
- iOS Version: 18.3.1 
- iPhone Model:iPhone 12 



## 1. Flutter SDK がないと Android Studio に怒られる  

Android Studio を開いて Flutter プロジェクトを作ろうとしたら、**「Flutter SDK が見つかりません」** というエラーが。  
どうやら Android Studio が勝手に入れてくれるわけではなく、**Flutter の公式ページから直接自分でダウンロード** しないといけないらしい。  

🔗 [Flutter – Install](https://flutter.dev/docs/get-started/install)  

その後、 Android Studio に戻り、SDK がある場所を PATH として指定した。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747809/7157b9cf-b288-4bfe-99d4-d75b49ff25a2.png width=450>

しかし、ここで新たな問題発生🔥

## 2.Flutter SDK PATH を通そうとしたら macOS のセキュリティポップアップ に邪魔される

Dart を開こうとしたら、`"dart" can't be opened because Apple cannot check it for malicious software.` というポップアップが出てブロックされる。  

✅ **対処法**  
1. Mac の「システム設定」
2.  「セキュリティとプライバシー」
3. 下のほうまでスクロールし、 `"dart" was blocked from use because it is not from an identified developer.`という文章の横に `Allow Anyway` というボタンがあるのでクリックする

参考サイト: https://memorytin.com/2020/11/17/macos-big-sur-flutter-error-dart-cant-be-opened-because-apple-cannot-check-it-for-malicious-software/

こうしてポップアップブロックを突破した。


## 3. Developer Mode を ON にしても iOS で動作確認できない  

Flutter SDK の PATH  を指定すると、サンプルコードが Android 端末上で動いたため、いよいよ iOS で動かそうと Macbook にケーブルをさした。

しかし、

**「To use your iPhone for development, turn on developer mode.」**  

とターミナルから文言が出てくるだけでうんともすんとも言わない。

念のため、iPhone の Developer Mode を ON にし直し再起動した。  

なのに、永遠にこの状態から抜け出せない…。  

✅ **ほかに試したこと**  
- iPhone の再起動 → **🙅**  
- Lightning ケーブルを差し直す → **🙅**  
- Xcode の設定を見直す → **🙅**  
- Android Studio の再起動 → **🙅**
- `flutter doctor` を確認 → **CocoaPods がないせいだった！！**  

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747809/d1053a7e-be37-4d75-8947-6e9eb1bbb458.png width=450>

というわけで cocoaPods を入れる作業に取り掛かる！

---

## 4. Ruby をインストールしないといけなかった  

cocoaPods を入れるためには ruby の環境回りも整える必要があった  

```sh
brew install rbenv
echo 'eval "$(rbenv init - bash)"' >> ~/.zshrc
source ~/.zshrc
rbenv install 3.2.2
rbenv global 3.2.2
ruby -v  # バージョン確認
```

ruby のバージョンが表示されたら、いよいよ cocoaPods のインストールに入る。

## 5. RubyGems のアップデートが必要だった  

CocoaPodsのインストールには ruby だけでなく、RubyGems も必要のようである。
なので、以下のコマンドでアップデート。  

```sh
gem update --system
```


## 6. `brew` コマンドが効かない問題  

Homebrew がそもそも入ってない、または認識されないときの対処法。  

```sh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
source ~/.zshrc
```


## 7. CocoaPods をインストール  

CocoaPods をインストールして、Flutter プロジェクトに適用する。  

```sh
gem install cocoapods
pod setup
```

さらに、プロジェクトの `ios` フォルダに移動して `pod install` を実行。  

```sh
cd (flutter_projectがあるディレクトリ)/ios
pod install
```

## 8. 結局 Xcode が必要だった  

Flutter を使えば XCode なしで iOS アプリを作れると思っていたけど、  結局ないと iOS ビルドができなかった。  

ビルドできないと思ったら XCode がPCに入っているかどうか今一度確かめてみよう。


---

## 9. `No Podfile found in the project directory.` エラー  

CocoaPods の設定をしようとしたら、**「No Podfile found in the project directory.」** と怒られる。  
これは、flutter のプロジェクトがあるディレクトリ内部にある ios ディレクトリの中で `pod init` を実行すれば解決。  

```sh
cd (flutter_projectがあるディレクトリ)/ios
pod init
```


## 10. `PodFile` の iOS バージョンを変更  

PodFile で設定されている iOS バージョンが古すぎるとビルドエラーが出るので修正を加える。 

```sh
open Podfile
```

エディタで `platform :ios, '13.0'` に変更して、保存（Ctrl + X → Y → Enter）。  

これで PodFile はOK！

## 11. `source ~/.zshrc` が効かなくなる問題  

zsh の設定を反映しようとして `source ~/.zshrc` を実行したらエラー発生。

```sh
nano ~/.zshrc
```

このコマンドで `zshrc`を開き、 `eval "$(rbenv init - zsh)"` が正しく書かれているか確認したら直った。  



## 12. `flutter doctor` で環境チェック  

環境に問題がないか確認するために `flutter doctor` を実行。  

```sh
flutter doctor
```

先ほどまであった `CocoaPods not installed` エラーがなくなっている🙌
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747809/e8872c43-7293-4509-b468-9da61fb63204.png width=450>

## 13. `flutter run` で実機デバッグ  

すべての設定が完了したら、iPhone を接続した状態で `flutter run` を実行！  

```sh
flutter run
```

これでようやくサンプルコードが iPhone でも動いた✅

## おまけ. iOS 上では Debug モードアプリは IDE から起動しないと使えない  

Android は通常のアプリと同様に、アイコンをタップして直接開いてアプリを実行できるけど、 iOS はターミナルから `flutter run` するか Android Studio で実行しないとアプリが起動しない。 

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2747809/8f70ee63-9c85-4141-9b2a-6b119cc0e20f.png width=300>

こうしたところに、 iOS のセキュリティ面での厳しさを実感した。



## 環境構築だけで 1 日終わった  

Flutter SDK インストールから始まり、 Ruby, cocoaPods のインストールなどに追われた。

さらには、 Flutter のプロジェクトに cocoaPods を適用するために PodFile を作る必要があったりとターミナルで永遠とコマンドを叩いていた。

大学の卒業研究で Linux を使っていた関係でターミナルをたくさん使っていた時のことを思い出した。

とにかく、これらの作業だけで **丸 1 日消えてしまった…**。  
でも、ひとつのコードで **Android と iOS の両方が動いたときは感動** した！  

これから頑張るぞ！💪