CocoaPods を Apple Silicon (M1/M2) で動作させる方法
問題点
Apple Silicon (M1/M2) チップを搭載した Mac で CocoaPods を使用しようとすると、次のようなエラーが発生します:
LoadError - dlsym(0x7f8926035eb0, Init_ffi_c): symbol not found - /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi_c.bundle
この問題は、Apple が macOS に同梱している Ruby がユニバーサルバイナリとしてビルドされており、RbConfig の CPU アーキテクチャ情報が正しく設定されていないことが原因です。
解決策
方法 1: Homebrew を使用した最新の解決策(推奨)
現在最も簡単で推奨される方法は、Homebrew を使用して CocoaPods をインストールすることです。
# 既存の CocoaPods をアンインストール
sudo gem uninstall cocoapods
# Homebrew で CocoaPods をインストール
brew install cocoapods
これにより、Apple Silicon ネイティブのバイナリがインストールされ、Rosetta を使用する必要がなくなります。
TIP
Homebrew が正しくインストールされていることを確認してください。Apple Silicon Mac では、Homebrew は通常 /opt/homebrew
にインストールされます。
方法 2: 適切な Ruby 環境のセットアップ
根本的な解決策として、システムの Ruby ではなく、Homebrew または rbenv を使って Ruby をインストールします。
# Homebrew で Ruby をインストール
brew install ruby
# パスを通す (.zshrc または .bash_profile に追加)
echo 'export PATH="/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH"' >> ~/.zshrc
# 設定を反映
source ~/.zshrc
# 正しい Ruby が使用されていることを確認
which ruby
# /opt/homebrew/opt/ruby/bin/ruby と表示されるはず
# CocoaPods をインストール
sudo gem install cocoapods
方法 3: Rosetta を使用した一時的な解決策
どうしてもシステムの Ruby を使用する必要がある場合の一時的な解決策です。
# ffi を Rosetta 経由でインストール
sudo arch -x86_64 gem install ffi
# pod install も Rosetta 経由で実行
arch -x86_64 pod install
よく pod
コマンドを使用する場合は、エイリアスを設定すると便利です:
# .zshrc または .bash_profile に追加
alias pod='arch -x86_64 pod'
WARNING
この方法は一時的な解決策であり、パフォーマンスや互換性の問題が生じる可能性があります。
トラブルシューティング
Homebrew の再インストール
Homebrew に問題がある場合は、再インストールを検討してください:
# Homebrew をアンインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
# Apple Silicon ネイティブで再インストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
特定の Ruby バージョンの使用
rbenv を使用して特定の Ruby バージョンを管理する方法:
# rbenv をインストール
brew install rbenv
# rbenv を初期化
rbenv init
# 利用可能な Ruby バージョンを表示
rbenv install -l
# Ruby をインストール(例: 3.1.4)
rbenv install 3.1.4
# グローバルバージョンを設定
rbenv global 3.1.4
# CocoaPods をインストール
gem install cocoapods
ユニバーサルバイナリの強制インストール
システム Ruby を使用する必要がある場合、ユニバーサルバイナリを強制的にインストールする方法:
sudo env ARCHFLAGS='-arch arm64 -arch arm64e -arch x86_64' gem install cocoapods
結論
Apple Silicon Mac で CocoaPods を使用する最も良い方法は、Homebrew を使用して CocoaPods をインストールすることです。これにより、ネイティブのパフォーマンスを享受でき、互換性の問題を回避できます。
一時的な解決策として Rosetta を使用する方法もありますが、これは長期的な解決策としては推奨されません。
INFO
Apple は将来の macOS で Ruby を同梱しなくなる可能性があるため、独自の Ruby 環境を構築することは良い習慣です。
どの方法を選択する場合も、定期的に CocoaPods と依存関係を更新し、最新の互換性情報を確認することをお勧めします。