🚶‍♂️

M1 macにVS CodeのRemote SSHで接続してFlutter runしたらCocoapodが無いと言われた時の解決策

2 min read

やりたい事

  • M1 Mac miniにVS CodeのRemote SSHで接続してflutter runしたい

Remote SSH

言わずもがなRemote - SSH - Visual Studio MarketplaceというSSH先のマシンリソースで開発ができるすごい便利なやつを利用する。

問題なくFlutterプロジェクトは開けるし、Dart Analysis Serverも動いてる。

Run and Debug

さてデバッグモードでrunしようかと思い、次のようなconfigurationsにする。

.vscode/launch.js
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "dev",
      "request": "launch",
      "type": "dart",
      "args": [
        "--verbose"
      ]
    }
  ]
}

そうすると次のようにCocoaPodsがインストールされていないと言われてしまう。

Launching lib/main.dart on iPhone 13 in debug mode...
lib/main.dart:1
Warning: CocoaPods not installed. Skipping pod install.
  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.

CocoaPods not installed or not in valid state.
Error launching application on iPhone 13.
Exited (sigterm)

argsに--verboseつけて詳細ログを見ていると分かるがwhich podを実行しており、パスが解決できてないようでエラーになっているようだった。

ターミナルからwhich podするとちゃんと解決できている状態なので、VS CodeのRun and Debugから実行した場合にのみパスが通ってないということである。

つまりは諸々のPATHの設定をしている.zshrcが読み込まれていない(非対話シェルだから?)という事のようなので、.zshenvにパスを追加するとwhich podが解決できるようになる。

.zshenvがベストなのかはよく分からないが、どんな場合でも必ず最初に読み込まれるそうなのでここしかない?
参考: zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita

うちの環境ではHomebrewでCocosPodsを入れているので、/opt/homebrew/binを追加するとうまくいった。

.zshenv
export PATH="/opt/homebrew/bin:$PATH"

.zshenv追記した後でM1 Mac mini上でvscode-serverのプロセスをキルして再起動させないと読んでくれないので注意。例えば次のようにキルする。

pkill -f vscode-server

参考

GitHubで編集を提案

Discussion

ログインするとコメントできます