Flutterアプリビルドでのpod installのエラー回避方法

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)))

確かに、上で指示された方法の通り、ffix86_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のインストールを実行するとエラーを回避出来ます。

(1) Android Studioの「Terminal」タブを開きます。

(2) iosディレクトリに移動します。

% cd ios

(3) Rosetta2経由でpodを起動します。

% 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.

(4) Android Studioでアプリをビルドする。次のように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...
スポンサーリンク
最新情報をチェックしよう!