Skip to content

CocoaPods を Apple Silicon (M1/M2) で動作させる方法

問題点

Apple Silicon (M1/M2) チップを搭載した Mac で CocoaPods を使用しようとすると、次のようなエラーが発生します:

ruby
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 をインストールすることです。

bash
# 既存の 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 をインストールします。

bash
# 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 を使用する必要がある場合の一時的な解決策です。

bash
# ffi を Rosetta 経由でインストール
sudo arch -x86_64 gem install ffi

# pod install も Rosetta 経由で実行
arch -x86_64 pod install

よく pod コマンドを使用する場合は、エイリアスを設定すると便利です:

bash
# .zshrc または .bash_profile に追加
alias pod='arch -x86_64 pod'

WARNING

この方法は一時的な解決策であり、パフォーマンスや互換性の問題が生じる可能性があります。

トラブルシューティング

Homebrew の再インストール

Homebrew に問題がある場合は、再インストールを検討してください:

bash
# 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 バージョンを管理する方法:

bash
# 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 を使用する必要がある場合、ユニバーサルバイナリを強制的にインストールする方法:

bash
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 と依存関係を更新し、最新の互換性情報を確認することをお勧めします。