💊

【Flutter】flutter doctor 対応

2024/04/15に公開

概要

最近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)」にチェック入れてインストールを行います。

image1.png

インストール後 $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 で設定されているパスを確認できます
  • 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 が必要らしい。

参考URL

Discussion