【Flutter】macOSのクライアントアプリを作る

Flutter 3.0がリリースされて久しく立ちますが、stableになったmacOSのアプリをビルドしたことがなかったので、今回試しにビルドしてみました。

https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.0.0

## 環境
```bash:
macOS Ventura 13.0.1 (Intel)

% flutter --version
Flutter 3.3.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 4f9d92fbbd (3 months ago) • 2022-09-06 17:54:53 -0700
Engine • revision 3efdf03e73
Tools • Dart 2.18.0 • DevTools 2.15.0
```

## とりあえずビルドしてみる
まずは適当にプロジェクトを作成します。
```bash:
flutter create <project name>
```

いきなりビルドしてみます。
```bash:
flutter run -d macos
```
色々エラーが出ましたが、とりあえずこの状態で動きはしました。iOS/Androidと比べてもビルド自体早い気がします:thinking:
![スクリーンショット 2022-12-18 22.35.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141823/44fcd212-d343-1e1b-7ae5-b7ef9efc7138.png)

いとも簡単にビルドできてしまいました、、、本当すごいですね。
## エラー対応
このままだとあまりにも内容がないので、プロジェクトを作って初期状態で発生するエラーに対応してみます。
まずは以下のエラーです。
```bash:
2022-12-18 22:49:30.788 xcodebuild[45891:792148]  DVTErrorPresenter: Unable to load simulator devices.
Domain: DVTCoreSimulatorAdditionsErrorDomain
Code: 3
Failure Reason: The version of the CoreSimulator framework installed on this Mac is out-of-date and not supported by this version of Xcode.
Recovery Suggestion: Please ensure that you have installed all available updates to your Mac's software, and that you are running the most recent version of Xcode supported by macOS.
--
CoreSimulator is out of date. Current version (857.13.0) is older than build version (857.14.0).
Domain: DVTCoreSimulatorAdditionsErrorDomain
Code: 3
--
2022-12-18 22:49:30.789 xcodebuild[45891:792148]  iOSSimulator: [SimServiceContext sharedServiceContextForDeveloperDir:error:] returned nil (Error Domain=DVTCoreSimulatorAdditionsErrorDomain Code=3 "CoreSimulator is out of date. Current version (857.13.0) is older than build version (857.14.0)." UserInfo={NSLocalizedDescription=CoreSimulator is out of date. Current version (857.13.0) is older than build version (857.14.0).}). Simulator device support disabled.
```
これは以下の記事を参考に、XCodeを一度開いてシミュレーターを更新すると治りました。
[Fixing CoreSimulator is out of date | Apple Developer Forums](https://developer.apple.com/forums/thread/666924)

次に以下のエラーに対応します。
```
/Users/<user name>/path/to/project/macos/Runner.xcodeproj: warning: The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET' is set to 10.11, but the range of supported deployment target versions is 10.13 to 13.1.99. (in target 'Flutter Assemble' from project 'Runner')
/Users/<user name>/path/to/project/macos/Runner.xcodeproj: warning: The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET' is set to 10.11, but the range of supported deployment target versions is 10.13 to 13.1.99. (in target 'Runner' from project 'Runner')
```
このエラーは以下の二箇所のバージョンを`13.0`に上げることで解消しました。
Finderでプロジェクトルートから`macos`フォルダの中の`Runner.xcworkspace`を開きます。
- `TARGETS->Runner->General->Minimum Deployments->macOS`
![スクリーンショット 2022-12-18 22.57.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141823/293b002e-4f8c-90b8-32f5-f09560670c33.png)

- `PROJECT->Runner->Info->Deployment Target->macOS Deployment Target`
![スクリーンショット 2022-12-18 22.59.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141823/c8fe6c48-1db7-33a3-a41d-0203ef164284.png)

最後にこちらに対応します。

```bash:
warning: Run script build phase 'Run Script' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'Runner' from project 'Runner')
```
これはwarningなので対応しなくてもいいかもですが、一応言われたとおりにチェックを外してみることにしました。
- `TARGET->Runner->BuildPhases->Run Script`の`Based on dependency analysis`のチェックを外します。
![スクリーンショット 2022-12-18 23.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141823/1c7df025-03c5-2e54-f671-006dda680474.png)

これで無事エラーやワーニングなくビルドが通るようになりました :tada: 
```bash:
% flutter run -d macos
Launching lib/main.dart on macOS in debug mode...
Building macOS application...                                           
Syncing files to device macOS...                                    83ms

Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

💪 Running with sound null safety 💪

An Observatory debugger and profiler on macOS is available at: http://127.0.0.1:63516/XXXXXXXX=/
The Flutter DevTools debugger and profiler on macOS is available at: http://127.0.0.1:9100?uri=http://127.0.0.1:63516/XXXXXXXX=/
```
## まとめ
今回初めてstableになったmacOSのビルドを行ってみましたが、iOS/Androidのアプリやwebに比べて、とても簡単に動かせた印象でした。(エラーやワーニングは無視してもとりあえず動いたので。)


### 参考
https://www.techgaku.com/build-mac-app-with-flutter/