MacBook Pro M1など、Apple Silicon Mac上でFlutterのアプリをビルドしようとしたときに、pod install
がエラーになってしまうときがあります。例えば、パッケージを追加するなどして、CocoaPodsのインストール処理が実行されるときです。
この記事ではエラー回避方法について詳解します。
エラーの内容
Android Studioやflutter run
で出力されたエラーログを確認します。次のようなエラーが出ていました。
Launching lib/main.dart on iPhone 13 in debug mode...
Running pod install...
CocoaPods' output:
↳
Preparing
Analyzing dependencies
Inspecting targets to integrate
Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)
Fetching external sources
-> Fetching podspec for `Flutter` from `Flutter`
-> Fetching podspec for `url_launcher_ios` from `.symlinks/plugins/url_launcher_ios/ios`
Resolving dependencies of `Podfile`
Error output from CocoaPods:
↳
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: '/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e))) - /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle (LoadError)
(長いので省略)
Error: To set up CocoaPods for ARM macOS, run:
arch -x86_64 sudo gem install ffi
Error running pod install
Error launching application on iPhone 13.
Apple Silicon Mac上でCocoaPodsをセットアップするには、以下を実行するように指示されています。
arch -x86_64 sudo gem install ffi
そこで早速実行します。少し時間がかかりますが、ffi
がインストールされます。再度実行してみますが、状況は変わりませんでした。
実はこれ当然です。CocoaPodsをセットアップしたときにインストール済みです。
エラー原因はCPUアーキテクチャの違い
もっとログをしっかり見ます。先頭の方に次のように出力されています。
incompatible architecture (have (x86_64), need (arm64e)))
確かに、上で指示された方法の通り、ffi
はx86_64
版がインストールされています。Android StudioはApple Siliconネイティブバージョンです。アーキテクチャが合わないからエラーになっています。
では、次のように入力して、arm64
版をインストールしてみたらどうなるでしょうか?
% sudo gem install ffi
これを行うと、別のエラーが発生するようになり、失敗します。もし試した場合は、次のように入力して元に戻してください。
% arch -x86_64 sudo gem install ffi
Rosetta2経由にすると成功する
この問題ですが、Apple Silicon Macでのみ発生します。Intel Macでは発生しません。例えば、Rosetta2上で起動したターミナル上でpod install
を行っても成功します。
Android Studio上で手動インストールする
次のように操作して、手動でCocoaPodsのインストールを実行するとエラーを回避出来ます。
% cd ios
% arch -x86_64 pod install
Analyzing dependencies
Downloading dependencies
Installing Flutter (1.0.0)
Installing url_launcher_ios (0.0.1)
Generating Pods project
Integrating client project
Pod installation complete! There are 2 dependencies from the Podfile and 2 total pods installed.
次のようにpod install...
のところでエラーが起きずに先に進みます。変更がないのでpod install
は特に何もしません。
Launching lib/main.dart on iPhone 13 in debug mode...
Running pod install...
Running Xcode build...
Xcode build done. 20.3s
Debug service listening on ws://127.0.0.1:55788/_Oe8MO8SUT0=/ws
Syncing files to device iPhone 13...