Xcode16対応でinclude of non modular header inside framework module firebase_crashlyticsのエラー

※当サイトは、アフィリエイト広告を利用しています

アプリ開発奮闘記

遅ればせながら、Xcode16対応が終わっていなかったアプリがあったため、適用作業をしていたところ、以前は解消できたはずの

 

 

のエラーがなかなか解消できず、苦労したので、その備忘録です。

 

結論としては、Xcodeの「Build Settings」で、

 

「Allow Non-modular includes in Framework Modules」「YES」にする

 

対応を、「TARGETS」の「Runner」ではなく、「PROJECT」の「Runner」に対してやってしまっていたのが原因でした(常識だったのかもしれませんが…)。

 

以降では、同じ問題に直面した方のご参考になればと思い、その過程を共有します。

 

前提とする環境

  • PC:MacBook Pro(Intel Core i5)
  • OS:macOS Sonoma 14.5
  • Flutter:3.19.6
  • Android Studio:Koala 2024.1.1 Patch 1
  • Xcode:16.2

 

エラーが発生した状況

下記エラーは、Flutterで開発したアプリを、Xcode16でビルドした際に発生しました。

 

 

様々なOSバージョンのシミュレーターや実機で試しましたが、いずれの環境でもエラーが発生しました。

 

試したこと(いずれも解消できず)

WebサイトやChat-GPT・Geminiなど(以下、「Chat-GPT達」)からのアドバイスに基づき、試したことを列記します。

 

①:Xcodeの「Build Settings」の「Allow Non-modular includes in Framework Modules」を「Yes」にしてもダメ

すぐ見つかるのがこの対策なので、真っ先に試しましたが、エラーを解消できませんでした。

 

以前、別のアプリでは、これで解消できたので、採用しているFlutter SDKやパッケージ類のバージョンが古いからだろうか、、、と悩みました。

※ただ、前述のとおり、このやり方自体が正しくなかったのですが…。

 

②:Podfileに「['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'」を追記してもダメ

これもよく見かける対策で、Podfileの以下の部分に、設定を追記する方法です。

 

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)

    target.build_configurations.each do |config|
      # ↓ これを追記 
      config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
    end

  end
end

 

Xcodeの「Build Settings」を変えるのと同じに思えましたが、Chat-GPT達からも提案されたので、念のため試したところ、やはりエラーは解消できませんでした。

 

③:「pod deintegrate」など徹底的にクリーンアップしてもダメ

Chat-GPT達からは、下記の徹底的なクリーンアップ処理も勧められました。

 

cd ios

// XcodeプロジェクトからのCocoaPodsの統合を完全に解除
pod deintegrate

// CocoaPodsのキャッシュをクリア
pod cache clean --all 

// PodsディレクトリとPodfile.lockファイルを完全に削除
rm -rf Pods Podfile.lock

// Podを再インストールし、リポジトリを更新
pod install --repo-update

 

しかし、エラーは解消されませんでした。

 

④:パッケージの直接修正は実行せず

最後に、以下のパッケージのファイルを直接修正するよう、提案がありました。

 

/Users/[ユーザー名]/.pub-cache/hosted/pub.dev/firebase_crashlytics-4.1.0/ios/Classes/Crashlytics_Platform.h
/Users/[ユーザー名]/.pub-cache/hosted/pub.dev/firebase_crashlytics-4.1.0/ios/Classes/ExceptionModel_Platform.h

 

これらのファイルの #import <Firebase/Firebase.h> を @import Firebase; に置き換えるという方法ですが、パッケージのソースをいじる勇気がなかったので、採用しませんでした。

 

解消できた(=誤りに気づいた)理由

fvm経由で、古めのFlutter SDKのバージョンを使用していたため、Firebase関連のバージョンを上げられない状況でした。

Chat-GPT達からは、Firebase関連のバージョン不整合の影響指摘もあったので、Flutterのバージョンを上げるしかないか、、と諦め気味になりましたが、以下の記事の画像をよく見ると、

  

 

前述①の「Build Settings」の設定変更は、「TARGETS」の「Runner」の方に実施されていると気づきました。

 

これに対し、自分のXcodeを見ると、「PROJECT」→「Runner」→「Build Settings」の方になされており、「TARGETS」→「Runner」→「Build Settings」の「Allow Non-modular includes in Framework Modules」は、「No」のままでした。。(「PROJECT」と「TARGETS」で設定が連動しないとは、思いもよりませんでした…)。

 

早速、「TARGETS」→「Runner」→「Build Settings」の「Allow Non-modular includes in Framework Modules」を「Yes」に変更し、ビルドしたところ、エラーは解消されました!

 

こちらのイシューなどでも、「PROJECT」か「TARGETS」かは意外と書かれていないので、盲点でした(常識なのかもしれませんが…)。

 

なお、Podfileへの追記(前述②)は、対応不要でした。

 

どうやら、以前、別アプリのXcode16対応をしたときは、たまたま「TARGETS」の方に設定したため、エラーが出なかったようです。

※今回は、下記記事(とても分かりやすい記事で大変助かりましたが)の説明画像にて、「PROJECT」を選択しているように見えたため、「PROJECT」の方に設定していました。

 

 

補足:なぜ「PROJECT」だとダメか?Podfileの記載箇所は「TARGET」だったはずでは?

恥ずかしながら、未だ理解が乏しいため、疑問点を少しだけ確認してみました。

 

「PROJECT」に設定するとダメな理由

Chat-GPTに、なぜ「PROJECT」の「Runner」に対する設定だとダメなのか、聞いてみたところ、

 

  • 「PROJECT」側の設定は、初期値として使われるだけ
  • 実際のビルドでは、「TARGET」側の設定が優先される
  • よって「TARGET」の「Build Settings」が未変更(「No」のまま)だと、実際のビルドには反映されない

 

とのことでした。なるほど。。

 

今更ですが、「PROJECT」と「TARGET」の違いについても理解が必要だと思い、下記記事で学ばせていただきました(ありがとうございます!)。

 

 

 

Podfileでターゲットレベルに設定してもダメだった理由

ターゲットレベルでの設定が必要、という点は分かりましたが、前述②の試行で、Podfileに

 

['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'

 

の記述を、

 

target.build_configurations.each do |config|

 

から始まるターゲットレベルの所に書いてたので、これでもエラーを解消できたはずでは?と思いました。

 

この点もChat-GPTに尋ねたところ、

 

  • CocoaPods は、あくまで Podsプロジェクトとそのターゲット(依存ライブラリ) を管理するもの
  • Flutterアプリ本体である Runner は Flutter により生成された独立したターゲットであり、Podfile が明示的には管理していない
  • したがって、Podfile の post_install ブロックに記述しても、Runner ターゲットには設定が伝わらない

 

とのことでした。

 

最初から教えて…と思ったりもしましたが、自分自身、AIエージェントを使いこなす技量が足りていないところです(とは言え、ほとんどのエラーは「Chat-GPT達」で解消できているので、大変助かっていますが)。

 

以上、どなたかのご参考になれば幸いです。

 

 

リリースしたアプリ(全てFlutterで開発)

 

個人アプリ開発で役立ったもの

おすすめの学習教材

超初心者向けでオススメな元Udemyの講座/

 

 \キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/

 

\Gitの基礎について無料で学べる/

 

おすすめの学習書籍

実用的image_pickerに関してかなり助けられた/

 

Dartの基礎文法を素早くインプットできる/


Dart入門 - Dartの要点をつかむためのクイックツアー

コメント

タイトルとURLをコピーしました