2025年1月版 macOS Sequoia にFVM+Flutterの開発環境を構築する

macOSにFVM+Flutterの開発環境を構築する手順の備忘録です。

- クリーンインストール直後の M4 Mac Mini / macOS Sequoia 15.1で確認した手順です
- この手順に沿うとmacOS,iPhone,Web用のFlutterアプリが開発できるようになります
- 記事末尾のオプションの手順まで実行すると、Android版アプリも開発できるようになります

## Xcode のインストール
Xcode 16.2 を AppStore からダウンロードしてインストールします。

インストールしたら一度 Xcode を起動して、Platform Support の iOS にチェックを入れて、Download & Install を押します。

![Screenshot 2024-12-26 at 13.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43781/3092b0a5-cfda-0a37-09ba-3c5d7ad9027f.png)

依存ライブラリやiOSシミュレータなどのインストールが始まるので、終わるまで待ちます。

インストールが終わるまえに先の手順をすすめることはできますが、インストールが終わっていない場合、後述の動作確認で `flutter doctor` の結果がエラーになりますので注意してください。

インストールが終わったら、以下をTerminalから実行してコマンドラインからXcodeが利用できるようにします。

```sh
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
```

## Homebrew のインストール
Terminalを開いて[Homebrew](brew.sh) のサイトのインストール手順どおりにインストールします。

初めて Homebrew を入れた場合は /opt/homebrew/bin にパスが通っていないので警告が出ます。
インストール完了後に表示される Next steps: のコマンドを実行して、パスを通します。

終わったら

```sh
brew help
```

を実行して brew にパスが通っていることを確認します。

## Cocoapods のインストール

普通にやると gem を install するだけですが、macOS Sequoia 標準のRubyはまだ2.6系で古いので、
`sudo gem install cocoapods` だけではインストールできません。
無理やりインストールすることもできなくはないのですが、brew 経由でインストールするのが簡単です。

```sh
brew install cocoapods
```

## FVM のインストール
Homebrew経由でインストールします。

```sh
brew tap leoafarias/fvm
brew install fvm
```

## Flutter SDK のインストール

```sh
fvm install 3.24.5
```

## 動作確認
一旦、インストールしたFlutter SDKをグローバルにして動作確認します。

```sh
fvm global 3.24.5
fvm flutter doctor
```

上記で表示される Flutter SDK のバージョンが期待どおりで、かつAndroid関係以外のエラーが出ていなければ、セットアップは問題なく完了です。

# オプション 
## Visual Sutdio Code 
[Visual Studio Code](https://code.visualstudio.com/docs/setup/mac) 1.77 以上をインストールした後、VS Code を起動して [Flutter extension for VS Code](https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter) をインストールします。

## Android 開発
以下の手順を行うと、Android版アプリも開発できるようになります。

- [Android Studio 2023.3.1 (Jellyfish)以上をインストール](https://developer.android.com/studio/install?hl=ja#windows)する
- Flutter 公式サイトの [Configure Android development](https://docs.flutter.dev/get-started/install/macos/mobile-android#configure-android-development) の手順を行う

## FAQ
### iOS版で、flutter runするとログが出ない
以下のようなログが出て、アプリのログを取得できないことがあります。

```shell
Oops; flutter has exited unexpectedly: "SocketException: Send failed (OS Error: No route to host, errno = 65), address = 0.0.0.0, port = 5353".
```

これは利用中のターミナルに権限がなく、ローカルネットワーク接続がブロックされている場合に起こります。

macOSの設定で、System Settings->Privacy & Security->Local Network->[使っているターミナルまたはIDE]を開いて、スイッチをONにすると解決します。

![Screenshot 2025-01-16 at 5.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43781/e929dcdb-9768-634f-e5f6-f60df77d77de.png)

### Android版でビルドエラーが起こる
Android Studio 2024.2.2 (Ladybug) + Flutter 3.24.5 で、Android版をビルドすると、compileGroovyタスクでエラーになる場合があります。

```shell
* What went wrong:
Execution failed for task ':gradle:compileGroovy'.
> Failed to run Gradle Worker Daemon
   > A problem occurred starting process 'Gradle Worker Daemon 6'
```

これはOSの地域設定（日付と時刻の書式）をUSにすると強引に直せますが、Gradleのバージョンを8.4に上げてやると解消します。

```android/gradle/wrapper/gradel-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip # ココ
```

またFlutterのplus系プラグイン（connectivity_plusなど）を使うと、以下のようなエラーが出ます。

```shell
* What went wrong:
Execution failed for task ':connectivity_plus:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'.
```

これは settings.gradle で Android Plugin を 8.3.1 に上げると解消します。

```groovy:android/setting.gradle
...

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "8.3.1" apply false // ← ココ
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

include ":app"
```

#### 補足
上記では、Gradle バージョン 8.4 と Android Gradle Plugin バージョン 8.3.1 を選択していますが、これはconnectivity_plusプラグイン6.1.2のビルド設定を参考にした値です。