🚨

Flutterビルド時のInclude of non-modular headerエラーへの対応方法

2024/09/17に公開
2

ビルドエラーの発生

今朝、iOS 18Xcode 16がリリースされました。
開発しているFlutterアプリが問題なく動作するか確認するため、Xcodeをアップデートした後、flutter build iosを実行したところ、以下のエラーが発生しビルドに失敗しました 😱

Lexical or Preprocessor Issue (Xcode): Include of non-modular header inside framework module 'firebase_messaging.FLTFirebaseMessagingPlugin'

調査

調べてみると、Issueがいくつか上がっていました。
https://github.com/firebase/flutterfire/issues/12962
https://github.com/firebase/flutterfire/issues/12993

Issueには、Xcode上で以下の設定をYESにすることで解消されるとありましたが、自分の環境ではそもそも、その項目が見つかりませんでした。

Runner > Build Settings > Apple Clang - Language - Modules > Allow Non-modular includes in Framework Modules

結論

2024/09/20 追記:

torutoさんからコメントをいただきました!
Xcode上では、Build Settingsのフィルターを"Basic"から"All"に変更しないと表示されないようです!
手元でも試してみたところ表示されるようになりました!ありがとうございます!🙏

↓ これまでのやり方も一応残しておきます!


以下のコメントが参考になりました!
https://github.com/firebase/flutterfire/issues/12993#issuecomment-2244586519

ios/Runner.xcodeproj/project.pbxprojをエディタで開き以下のように編集したところ、無事にビルドできるようになりました!🎉

…
/* Begin XCBuildConfiguration section */
		7AF8C0E6B9D2531R4L9M6K2P /* Profile */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
…
			};
		};
…
		X3Y9Z1Q8W7T5V6U2N4J6H8G /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
…
			};
		};
…
		PQRS5678LMNO1234ABCD9012 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
…
			};
        };
ispec inc.

Discussion