😺

【初心者向け】iOS用のFlutterアプリをビルドする際にエラーが発生しているときにやってみると解決するかもしれないこと

に公開

こんにちは、ワニかず@40歳 出戻りエンジニアです。

ちょっと前までデバッグできていたFlutterアプリが
突然iOSビルドプロセスのみ失敗することってありますよね(多分稀)

ということで、そんなことに遭遇したときに
今回、私が解決した内容をメモしておこうと思います。

起きていたエラー

VS CodeでFlutterアプリをビルドすると、
iOSビルドプロセスのみ以下のようなエラーが出るようになりました。

Launching lib/main.dart on iPhone 16 Pro in debug mode...
Xcode build done.                                           37.7s
Failed to build iOS app
Error output from Xcode build:

    --- xcodebuild: WARNING: Using the first of multiple matching destinations:
    { platform:iOS Simulator, id:xxxx, OS:18.2, name:iPhone 16 Pro }
    { platform:iOS Simulator, id:xxxx, OS:18.2, name:iPhone 16 Pro }
     BUILD FAILED 
Xcode's output:

    Writing result bundle at path:
        /var/folders/_f/xxxx/temporary_xcresult_bundle
    ld: warning: ignoring duplicate libraries: '-lc++'

解決方法

flutter clean
flutter pub cache repair
flutter pub get

で解決しました。

flutter clean
flutter pub get

だけだと解決しませんでした。

flutter pub cache repair

が重要だったようです。

flutter pub cache repair で何故解決した?

一般的に、flutter pub cache repair コマンドが効果的だった理由として、

  1. パッケージキャッシュの破損: Flutterのpubキャッシュが何らかの理由で破損していた可能性があります。このコマンドはキャッシュを修復し、問題のあるファイルや不整合を解消します。

  2. 依存関係の解決の問題: プロジェクト内の依存関係が適切に解決されていなかった可能性があります。キャッシュを修復することで、依存関係グラフが正しく再構築されました。

  3. 古いバージョンのライブラリ: キャッシュに古いバージョンのライブラリが残っていて、それが新しいバージョンと競合していた可能性があります。キャッシュの修復により、これらの古いバージョンが適切に更新されました。

  4. 重複したライブラリの解決: エラーメッセージに表示されていた「ignoring duplicate libraries: '-lc++'」という警告は、同じライブラリが複数回リンクされようとしていたことを示しています。キャッシュを修復することで、この重複が解消されました。

  5. 誤ったメタデータ: pubキャッシュのメタデータファイルが破損していたり、誤った情報を含んでいたりした可能性があります。

通常、このようなキャッシュの問題は、以下のような状況で発生することがあります:

  • 複数のFlutterバージョン間の切り替え
  • パッケージの更新が中断された場合
  • システムの電源が突然切れた場合
  • ディスク容量の問題

ということで、私の場合は、
ビルド中に作業を中断してしまったような記憶があり、このような事象に陥ったのかもしれません。

Discussion