【Flutter】flutter doctor 対応
概要
最近M3チップのMacBook Airを購入しFlutter環境を構築している際に flutter doctor
で色々対応が必要そうだったので、その時のメモになります。
現在の状況
[!] Android toolchain - develop for Android devices (Android SDK version XXXXX)
✗ cmdline-tools component is missing
Run `path/to/sdkmanager --install "cmdline-tools;latest"`
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for
more details.
[✗] Xcode - develop for iOS and macOS
✗ Xcode installation is incomplete; a full installation is necessary for iOS
development.
Download at: https://developer.apple.com/xcode/download/
Or install Xcode via the App Store.
Once installed, run:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
✗ CocoaPods not installed.
CocoaPods is used to retrieve the iOS and macOS platform side's plugin
code that responds to your plugin usage on the Dart side.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/platform-plugins
To install see
https://guides.cocoapods.org/using/getting-started.html#installation for
instructions.
上から順に対応していきたいと思います。
Android
まず sdkmanager
ですが、設定されているPathが $ANDROID_HOME/tools/bin
のものだとうまく動作しない場合があるようです。
React Native 環境構築時に sdkmanager に NoClassDefFoundError って言われたという話 - Qiita
↑こちらにある通り、 $ANDROID_HOME/cmdline-tools/latest/bin
のものが正しいとの事。
確かに cat $ANDROID_HOME/tools/bin/sdkmanager
を見ると sdkmanager start up script for UN*X
となっていました。
cmdline-toolsの設定
$ANDROID_HOME/cmdline-tools/latest/bin
に既に設定されている場合はスキップして頂いて、まだ cmdline-tools
自体存在しない場合は
AndroidStudioからインストールが可能です。
「Settings…」>「Languages & Frameworks」>「Android SDK」>「SDK Tools」から「Android SDK Command-line Tools (latest)」にチェック入れてインストールを行います。
インストール後 $ANDROID_HOME/cmdline-tools/latest/bin
にPATHを設定します。
これで cmdline-tools component is missing
が解消されるかと思います。
Android license
こちらはエラーメッセージにある通り flutter doctor --android-licenses
を実行するとライセンスの確認ができるので、そちらで対応可能です。
iOS
次にiOS側の設定を対応していきたいと思います。
Xcode installation is incomplete
まず Xcode installation is incomplete; a full installation is necessary for iOS development.
の部分ですが、Xcodeをまだインストールしていない場合は、App Storeからインストールを実施し、メッセージにもある以下のスクリプトを実行します。
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
- xcode-select
- こちらはXcodeや関連する開発ツールのパスを管理するツールになっており、上記のコマンドで
—switch
で指定している/Applications/Xcode.app/Contents/Developer
をデフォルトのパスに設定してます -
xcode-select --print-path
で設定されているパスを確認できます
- こちらはXcodeや関連する開発ツールのパスを管理するツールになっており、上記のコマンドで
- xcodebuild
- Xcodeプロジェクトおよび workspace のビルド、解析、テスト等の操作をコマンドライン上から実行できるコマンドラインツールになります
-
-runFirstLaunch
を実行する事でライセンスに許諾し、必要なパッケージをインストールします。
CocoaPods not installed
次にFlutterで使用するライブラリ管理ツールのCocoaPodsに関してです。
Homebrew使う方法もあるみたいですが、今回は rbenv
で管理しているrubyのgemとしてinstallしたいと思います。
rbenv
をまだインストールしていない場合は以下でインストールします。
brew install rbenv ruby-build
次に以下を実施し、スクリプトの設定を行います。
rbenv init
インストールと設定が完了したら、早速Rubyをインストールします。
rbenv install -l # インストール可能なRubyバージョンを確認
rbenv install 3.2.2 # バージョン指定してインストール (例 3.2.2
rbenv global 3.2.2 # グローバルで使用するRubyのバージョンを設定
ちゃんとRubyがインストールできたか rbenv versions
で確認します。
$ rbenv versions
system
* 3.2.2 (set by /Users/xxxxx/.rbenv/version)
この状態で本題のCocoaPodsをインストールします。
gem install cocoapods
これでCocoaPodsがインストールされ flutter doctor
のエラーも解消されているかと思います。
【その他】iPhone Simulatorが起動できない
アプリ起動時に以下のエラーが出る
An error was encountered processing the command (domain=FBSOpenApplicationServiceErrorDomain, code=1):
https://github.com/expo/expo-cli/issues/3197
↑のissueにある通り softwareupdate --install-rosetta --agree-to-license
を実施してやる。FlutterのSDKの一部には Rosetta
が必要らしい。
Discussion