From 4560889cc16734067b5a14e87797deac681f87b2 Mon Sep 17 00:00:00 2001 From: Michael Bernhardt Date: Mon, 17 Nov 2025 10:44:42 +0200 Subject: [PATCH 1/3] Add modular headers support to Objective-C Firebase pods for static framework compatibility This commit adds DEFINES_MODULE = YES to the pod_target_xcconfig section of FirebaseCore, FirebaseInstallations, and FirebaseCoreExtension podspecs. ## Problem Swift-based Firebase pods (FirebaseCoreInternal, FirebaseCrashlytics, FirebaseSessions) depend on Objective-C Firebase pods. When using static frameworks via 'use_frameworks! :linkage => :static', Swift cannot import Objective-C dependencies unless those dependencies define module maps. This prevents React Native (New Architecture), Expo, and other frameworks from using Firebase with static linking, resulting in errors like: - "The Swift pod X depends upon Y, which does not define modules" - "include of non-modular header inside framework module" ## Solution Enable module map generation by adding 'DEFINES_MODULE' => 'YES' to the pod_target_xcconfig in: - FirebaseCore.podspec - FirebaseInstallations.podspec - FirebaseCoreExtension.podspec (new section added) When DEFINES_MODULE is enabled, CocoaPods automatically generates module.modulemap files, allowing Swift code to properly import these Objective-C dependencies in static framework builds. ## Impact - Enables static framework usage for React Native, Expo, and other frameworks - Maintains full backward compatibility with existing projects - No breaking changes - dynamic frameworks continue to work as before - Aligns with modern iOS build practices and CocoaPods best practices ## Testing All modified podspecs pass validation: - pod spec lint FirebaseCore.podspec --quick --allow-warnings - pod spec lint FirebaseInstallations.podspec --quick --allow-warnings - pod spec lint FirebaseCoreExtension.podspec --quick --allow-warnings ## Related Issues Resolves firebase/firebase-ios-sdk#15249 Related to: - invertase/react-native-firebase#6933 - invertase/react-native-firebase#6332 - expo/expo#39607 ## Note External dependencies (GoogleUtilities, GoogleDataTransport, nanopb) are maintained in separate repositories and would benefit from similar changes for complete resolution. --- FirebaseCore.podspec | 1 + FirebaseCoreExtension.podspec | 4 ++++ FirebaseInstallations.podspec | 1 + 3 files changed, 6 insertions(+) diff --git a/FirebaseCore.podspec b/FirebaseCore.podspec index 15d38f98ca4..38e58e76c7c 100644 --- a/FirebaseCore.podspec +++ b/FirebaseCore.podspec @@ -56,6 +56,7 @@ Firebase Core includes FIRApp and FIROptions which provide central configuration s.dependency 'FirebaseCoreInternal', '~> 12.7.0' s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', 'GCC_PREPROCESSOR_DEFINITIONS' => 'Firebase_VERSION=' + s.version.to_s, 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', 'OTHER_CFLAGS' => '-fno-autolink' diff --git a/FirebaseCoreExtension.podspec b/FirebaseCoreExtension.podspec index c4009cd3ce1..71426ac03d0 100644 --- a/FirebaseCoreExtension.podspec +++ b/FirebaseCoreExtension.podspec @@ -34,5 +34,9 @@ Pod::Spec.new do |s| "#{s.module_name}_Privacy" => 'FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy' } + s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES' + } + s.dependency 'FirebaseCore', '~> 12.7.0' end diff --git a/FirebaseInstallations.podspec b/FirebaseInstallations.podspec index 6fb501ae3c8..98aa4971f36 100644 --- a/FirebaseInstallations.podspec +++ b/FirebaseInstallations.podspec @@ -52,6 +52,7 @@ Pod::Spec.new do |s| preprocessor_definitions = '' s.pod_target_xcconfig = { + 'DEFINES_MODULE' => 'YES', 'GCC_PREPROCESSOR_DEFINITIONS' => preprocessor_definitions, 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"' } From 433070cd8fb0d78ffb718d14a900baf8903f6e08 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:44:10 -0500 Subject: [PATCH 2/3] Update FirebaseCoreExtension.podspec --- FirebaseCoreExtension.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FirebaseCoreExtension.podspec b/FirebaseCoreExtension.podspec index 71426ac03d0..45d51dc761d 100644 --- a/FirebaseCoreExtension.podspec +++ b/FirebaseCoreExtension.podspec @@ -35,7 +35,7 @@ Pod::Spec.new do |s| } s.pod_target_xcconfig = { - 'DEFINES_MODULE' => 'YES' + 'DEFINES_MODULE' => 'YES', } s.dependency 'FirebaseCore', '~> 12.7.0' From bc23cc3345c8600c7fa246be96b31babdcf9b6de Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:44:36 -0500 Subject: [PATCH 3/3] Apply suggestion from @ncooke3 --- FirebaseCoreExtension.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FirebaseCoreExtension.podspec b/FirebaseCoreExtension.podspec index 45d51dc761d..71426ac03d0 100644 --- a/FirebaseCoreExtension.podspec +++ b/FirebaseCoreExtension.podspec @@ -35,7 +35,7 @@ Pod::Spec.new do |s| } s.pod_target_xcconfig = { - 'DEFINES_MODULE' => 'YES', + 'DEFINES_MODULE' => 'YES' } s.dependency 'FirebaseCore', '~> 12.7.0'