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ネイティブバージョンです。アーキテクチャが合わないからエラーになっています。

Activity MonitorでCPUアーキテクチャを確認する
Activity MonitorでCPUアーキテクチャを確認する

では、次のように入力して、arm64版をインストールしてみたらどうなるでしょうか?

% sudo gem install ffi

これを行うと、別のエラーが発生するようになり、失敗します。もし試した場合は、次のように入力して元に戻してください。

% arch -x86_64 sudo gem install ffi

Rosetta2経由にすると成功する

この問題ですが、Apple Silicon Macでのみ発生します。Intel Macでは発生しません。例えば、Rosetta2上で起動したターミナル上でpod installを行っても成功します。

Android Studio上で手動インストールする

次のように操作して、手動でCocoaPodsのインストールを実行するとエラーを回避出来ます。

STEP
Android Studioの「Terminal」タブを開きます。
「Terminal」タブを開く
「Terminal」タブを開く
STEP
「ios」ディレクトリに移動します。
% cd ios
STEP
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.
STEP
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...

著書紹介

Authored Books

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次