M1 macでpod installができない。sudo gem install ffiをしても治らない(rbenvが原因)


環境

  • 2021/01/26時点
  • M1チップのMacBook airを使用
  • ターミナルは基本的にrosettaを利用しないでarm64を利用
  • この記事に乗っ取ってhomebrewをarmとintelを使い分けられるようにして、homebrewを利用してrbenvをインストール
  • rbenvで2.7.2をインストールしてglobalに設定
  • rbenvで入れたrubyにcocoapodsをインストール

起きている問題

原因

  • cocoapodsのインストール先をrbenvでインストールしたrubyにしていたことが原因。issueの中でも以下のようにコメントがある

For anyone using a non-system ruby with rbenv and facing issues with ffi - switching to the system ruby (atleast locally in the project directory) and following the above steps helped me

解決策

  • xcodeを利用するディレクトリだけsystemのrubyを使用するように設定
  • ターミナルはrosettaを利用してintelにする
  • systemのrubyに対してcocoapodsをインストール
    • arch -x86_64 sudo gem install cocoapods
  • 同様にffiをインストール
    • arch -x86_64 sudo gem install ffi
  • あとは普通にpod installすれば動くはず。ちなみに一度intelで上の工程を行えばpod installするときはarmでも動く
    • ※追記(2021/02/05):やはりarmでは動かなかった。pod installするときには、この記事と同様に設定している場合はswitch-archでintelに切り替えてから行う必要がある。
    • ちなみに、今のterminalがarmかintelかを判断をするにはuname -mと実行するとわかる

感想

  • なぜrbenvで入れたcocoapodsが動かないのか?

→ffiというライブラリがarmに対応していないのが原因らしい。rbenvはarmに対応しているため、arm版のrbenvでいれたrubyはopt/homebrew/配下にインストールされる。そのため、そこにcocoapodsを入れると動かないのか? よくわからない
- systemのrubyにcocoapods入れるのがちょっと気持ち悪い。環境汚したくないとか考えると、できれば全部rbenvの中だけ完結するようにしたい。

→ほとんどの記事でpodの操作の時にはsudoをつけているから、そもそもcocoapodsはsysytemのrubyに入れるのが常識だったりする?? (rbenvで入れたrubyにインストールするときはsudoが必要ない) 

  • iOS開発する時にrubyをsysytemの切り替えるの忘れそう