@react-native-firebase/app 26.3.1 → 26.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/lib/version.d.ts +1 -1
- package/firebase_spm.rb +240 -95
- package/ios/RNFBApp/RNFBAppModule.mm +2 -2
- package/ios/RNFBApp/RNFBUtilsModule.mm +2 -3
- package/ios/RNFBApp/RNFBVersion.m +1 -1
- package/lib/version.ts +1 -1
- package/package.json +2 -2
- package/plugin/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [26.3.3](https://github.com/invertase/react-native-firebase/compare/v26.3.2...v26.3.3) (2026-09-01)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **e2e:** ready-gate Firebase emulator startup ([9ca2aec](https://github.com/invertase/react-native-firebase/commit/9ca2aecc2aa9140c38749d68ab3c23ac23ca8f46))
|
|
11
|
+
- **e2e:** restart Metro with a status gate ([4846e4e](https://github.com/invertase/react-native-firebase/commit/4846e4e345791cd95d7f7952c84a7c229a1f59aa))
|
|
12
|
+
- **ios:** align TurboModule constants return type with generated spec ([c79e1d2](https://github.com/invertase/react-native-firebase/commit/c79e1d2bc43b00a6ef61d38a294feceaed447740)), closes [#9212](https://github.com/invertase/react-native-firebase/issues/9212)
|
|
13
|
+
- **ios:** harden Expo linkage restore diagnostics ([c6e960b](https://github.com/invertase/react-native-firebase/commit/c6e960ba47e881a848e93d60cf09ea2064b24d1b))
|
|
14
|
+
- **ios:** link FirebaseCore into Expo app target under SPM ([18f1d46](https://github.com/invertase/react-native-firebase/commit/18f1d4645ef2b59c03436cf7fa68e6ad39ba9805))
|
|
15
|
+
- **ios:** persist Pods explicit-modules off after post_integrate ([54b3a4a](https://github.com/invertase/react-native-firebase/commit/54b3a4a9913d4601cc5562f559e8b9c8e799e105))
|
|
16
|
+
- **ios:** point SPM Podfile fallbacks at post_integrate ([21191ac](https://github.com/invertase/react-native-firebase/commit/21191acd767b045150dd40af07192d6c735c918e))
|
|
17
|
+
- **ios:** restore RNFB dynamic linkage after Expo prebuilt downgrade ([1d6d80d](https://github.com/invertase/react-native-firebase/commit/1d6d80de01592bd2f38a4270ab268fa40d27a16a))
|
|
18
|
+
- **ios:** warn when Expo linkage restore cannot run ([fecb129](https://github.com/invertase/react-native-firebase/commit/fecb129418066ae035ae2a271cf11466e508db54))
|
|
19
|
+
|
|
20
|
+
### Reverts
|
|
21
|
+
|
|
22
|
+
- Revert "chore(release): release packages" ([0a85268](https://github.com/invertase/react-native-firebase/commit/0a85268ae21c706cf1392eaa5b088e85c3273cb7))
|
|
23
|
+
|
|
24
|
+
## [26.3.2](https://github.com/invertase/react-native-firebase/compare/v26.3.1...v26.3.2) (2026-08-21)
|
|
25
|
+
|
|
26
|
+
**Note:** Version bump only for package @react-native-firebase/app
|
|
27
|
+
|
|
6
28
|
## [26.3.1](https://github.com/invertase/react-native-firebase/compare/v26.3.0...v26.3.1) (2026-08-20)
|
|
7
29
|
|
|
8
30
|
### Bug Fixes
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "26.3.
|
|
1
|
+
export declare const version = "26.3.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/firebase_spm.rb
CHANGED
|
@@ -313,10 +313,11 @@ end
|
|
|
313
313
|
# release restructures `Pod::Installer`), it prints a `pod install`-time
|
|
314
314
|
# warning telling you to call this explicitly instead:
|
|
315
315
|
#
|
|
316
|
-
#
|
|
317
|
-
# react_native_post_install(installer, ...)
|
|
316
|
+
# post_integrate do |installer|
|
|
318
317
|
# rnfirebase_add_spm_embed_phase(installer)
|
|
319
318
|
# end
|
|
319
|
+
#
|
|
320
|
+
# Use `post_install` only if your CocoaPods version has no `post_integrate`.
|
|
320
321
|
def rnfirebase_add_spm_embed_phase(installer)
|
|
321
322
|
return unless RNFirebaseSPM.active?
|
|
322
323
|
|
|
@@ -386,7 +387,7 @@ def rnfirebase_verify_spm_embed_phase_applied!(installer)
|
|
|
386
387
|
|
|
387
388
|
Without it, this app will crash at launch with a missing-library dyld error, because Firebase's Swift Package frameworks never get copied into the app bundle.
|
|
388
389
|
|
|
389
|
-
Add `rnfirebase_add_spm_embed_phase(installer)` to your Podfile's
|
|
390
|
+
Add `rnfirebase_add_spm_embed_phase(installer)` to your Podfile's post_integrate block as a fallback, then run `pod install` again. # rubocop:disable Layout/LineLength
|
|
390
391
|
MESSAGE
|
|
391
392
|
end
|
|
392
393
|
|
|
@@ -444,6 +445,41 @@ def rnfirebase_fail_if_spm_static_linkage!(installer)
|
|
|
444
445
|
MESSAGE
|
|
445
446
|
end
|
|
446
447
|
|
|
448
|
+
# Expo's precompiled-module pre-install hook runs after Podfile pre-install
|
|
449
|
+
# hooks and changes React-Core-dependent pod targets to static libraries.
|
|
450
|
+
# That is required for Expo's own source-built pods, but RNFB's Firebase SPM
|
|
451
|
+
# products are automatic libraries: making more than one RNFB pod static
|
|
452
|
+
# absorbs the same Firebase objects into each archive and the app link fails
|
|
453
|
+
# with duplicate symbols.
|
|
454
|
+
#
|
|
455
|
+
# Restore only Expo's generated prebuilt-RNCore + dynamic-framework path, and
|
|
456
|
+
# only RNFB targets that Expo actually changed to `static_library`. Bare
|
|
457
|
+
# consumers never define `Expo::PrecompiledModules`; source-built Expo installs
|
|
458
|
+
# make `enabled?` false; static/no-framework Podfiles do not report `:dynamic`.
|
|
459
|
+
# Existing dynamic RNFB targets and explicit static frameworks are untouched.
|
|
460
|
+
def rnfirebase_restore_dynamic_linkage_after_expo_prebuilt!(installer)
|
|
461
|
+
return unless RNFirebaseSPM.active?
|
|
462
|
+
return unless defined?(Expo::PrecompiledModules)
|
|
463
|
+
return unless Expo::PrecompiledModules.respond_to?(:enabled?) &&
|
|
464
|
+
Expo::PrecompiledModules.respond_to?(:linkage)
|
|
465
|
+
return unless Expo::PrecompiledModules.enabled?
|
|
466
|
+
return unless Expo::PrecompiledModules.linkage(installer) == :dynamic
|
|
467
|
+
|
|
468
|
+
static_library = Pod::BuildType.static_library
|
|
469
|
+
dynamic_framework = Pod::BuildType.dynamic_framework
|
|
470
|
+
restored_targets = installer.pod_targets.select do |target|
|
|
471
|
+
target.name.start_with?('RNFB') && target.build_type == static_library
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
restored_targets.each do |target|
|
|
475
|
+
target.define_singleton_method(:build_type) { dynamic_framework }
|
|
476
|
+
end
|
|
477
|
+
return if restored_targets.empty? || !defined?(Pod::UI)
|
|
478
|
+
|
|
479
|
+
names = restored_targets.map(&:name).join(', ')
|
|
480
|
+
Pod::UI.puts "[react-native-firebase] Restored dynamic framework linkage after Expo prebuilt downgrade: #{names}"
|
|
481
|
+
end
|
|
482
|
+
|
|
447
483
|
# CocoaPods `TargetUUIDGenerator` replaces `@generated_uuids` with leftover
|
|
448
484
|
# `@available_uuids` before Podfile `post_install`. RN's SPM integration then
|
|
449
485
|
# calls `project.new` for Firebase package product deps; with an empty/short
|
|
@@ -527,19 +563,103 @@ end
|
|
|
527
563
|
# runs automatically on every `pod install`/`pod update`, without requiring
|
|
528
564
|
# any Podfile change from consumers.
|
|
529
565
|
#
|
|
530
|
-
#
|
|
531
|
-
#
|
|
532
|
-
#
|
|
533
|
-
#
|
|
534
|
-
# `
|
|
535
|
-
#
|
|
536
|
-
|
|
566
|
+
# User-project SPM mutations (embed phase, FirebaseCore on the app target,
|
|
567
|
+
# signature workaround, build settings). Must run *after* CocoaPods has
|
|
568
|
+
# integrated `[CP] Embed Pods Frameworks` into the app target -- see
|
|
569
|
+
# `rnfirebase_hook_cocoapods_post_install!`. Extracted so both the
|
|
570
|
+
# `post_integrate` hook (current CocoaPods) and the `post_install` fallback
|
|
571
|
+
# (older CocoaPods without `run_podfile_post_integrate_hooks`) share one body.
|
|
572
|
+
def rnfirebase_run_spm_user_project_hooks(installer)
|
|
573
|
+
begin
|
|
574
|
+
rnfirebase_add_spm_embed_phase(installer)
|
|
575
|
+
rescue StandardError => e
|
|
576
|
+
if defined?(Pod::UI)
|
|
577
|
+
Pod::UI.warn "[react-native-firebase] Couldn't embed Firebase SPM frameworks " \
|
|
578
|
+
"automatically (#{e.class}: #{e.message}). Add `rnfirebase_add_spm_embed_phase(installer)` " \
|
|
579
|
+
'to your Podfile\'s post_integrate block as a fallback.'
|
|
580
|
+
end
|
|
581
|
+
end
|
|
582
|
+
# Deliberately outside the `rescue` above: dynamic framework embedding is
|
|
583
|
+
# load-bearing (without it, the app crashes at launch with a missing-library
|
|
584
|
+
# dyld error), so if the phase still isn't on a target that needs it --
|
|
585
|
+
# whether the call raised, silently no-opped, or only partially applied --
|
|
586
|
+
# this must abort `pod install` rather than let a broken install continue.
|
|
587
|
+
rnfirebase_verify_spm_embed_phase_applied!(installer)
|
|
588
|
+
begin
|
|
589
|
+
rnfirebase_add_spm_core_to_app_target(installer)
|
|
590
|
+
rescue StandardError => e
|
|
591
|
+
if defined?(Pod::UI)
|
|
592
|
+
Pod::UI.warn "[react-native-firebase] Couldn't link FirebaseCore into the app target " \
|
|
593
|
+
"automatically (#{e.class}: #{e.message}). " \
|
|
594
|
+
'Add `rnfirebase_add_spm_core_to_app_target(installer)` ' \
|
|
595
|
+
'to your Podfile\'s post_integrate block as a fallback if your own native code calls ' \
|
|
596
|
+
'FIRApp/FIROptions APIs directly.'
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
begin
|
|
600
|
+
rnfirebase_remove_spm_core_from_app_target(installer)
|
|
601
|
+
rescue StandardError => e
|
|
602
|
+
if defined?(Pod::UI)
|
|
603
|
+
Pod::UI.warn "[react-native-firebase] Couldn't remove a stale FirebaseCore SPM link from the " \
|
|
604
|
+
"app target automatically (#{e.class}: #{e.message}). If you previously used SPM and have " \
|
|
605
|
+
'since set `$RNFirebaseDisableSPM = true`, remove the "firebase-ios-sdk" Swift Package ' \
|
|
606
|
+
'dependency from your app target manually in Xcode.'
|
|
607
|
+
end
|
|
608
|
+
end
|
|
609
|
+
begin
|
|
610
|
+
rnfirebase_fix_spm_archive_signature_collision(installer)
|
|
611
|
+
rescue StandardError => e
|
|
612
|
+
if defined?(Pod::UI)
|
|
613
|
+
Pod::UI.warn '[react-native-firebase] Couldn\'t add the Firebase/Google SPM binary ' \
|
|
614
|
+
"xcframework signature workaround automatically (#{e.class}: #{e.message}). If your " \
|
|
615
|
+
'Release archive fails with `"...xcframework-ios.signature" couldn\'t be copied to ' \
|
|
616
|
+
'"Signatures" because an item with the same name already exists`, add a Run Script ' \
|
|
617
|
+
'build phase to your app target that runs `rm -f ' \
|
|
618
|
+
'"\\${CONFIGURATION_BUILD_DIR}"/<TheNameFromTheErrorMessage>.xcframework-ios.signature`.'
|
|
619
|
+
end
|
|
620
|
+
end
|
|
621
|
+
begin
|
|
622
|
+
rnfirebase_apply_spm_build_settings(installer)
|
|
623
|
+
rescue StandardError => e
|
|
624
|
+
if defined?(Pod::UI)
|
|
625
|
+
Pod::UI.warn "[react-native-firebase] Couldn't apply Firebase SPM build settings " \
|
|
626
|
+
"automatically (#{e.class}: #{e.message}). " \
|
|
627
|
+
'Add `rnfirebase_apply_spm_build_settings(installer)` ' \
|
|
628
|
+
'to your Podfile\'s post_integrate block as a fallback if Release builds crash at launch with ' \
|
|
629
|
+
'missing FIRComponent registrations, or Xcode reports that a Firebase module such as ' \
|
|
630
|
+
'`FirebaseCoreInternal`/`FirebaseSharedSwift` cannot be resolved.'
|
|
631
|
+
end
|
|
632
|
+
end
|
|
633
|
+
end
|
|
634
|
+
|
|
635
|
+
# We wrap `Pod::Installer#generate_pods_project` (restore RNFB dynamic
|
|
636
|
+
# frameworks after Expo's prebuilt downgrade and CocoaPods' transitive-static
|
|
637
|
+
# validation, but before product/link-input generation),
|
|
638
|
+
# `Pod::Installer#run_podfile_post_install_hooks` (Pods project: UUID counter,
|
|
639
|
+
# RN SPM integrity, static-linkage guard) and, when present,
|
|
640
|
+
# `Pod::Installer#run_podfile_post_integrate_hooks` (user project: embed
|
|
641
|
+
# Firebase SPM frameworks + link FirebaseCore onto the app target).
|
|
642
|
+
#
|
|
643
|
+
# CocoaPods runs `post_install` *before* writing projects and *before*
|
|
644
|
+
# `integrate_user_project`. That integrator is what adds
|
|
645
|
+
# `[CP] Embed Pods Frameworks` on a clean app target and then *saves* the
|
|
646
|
+
# user `.pbxproj`. Helpers that key off that phase (or that `project.save`
|
|
647
|
+
# the app target) must therefore run in `post_integrate`, which CocoaPods
|
|
648
|
+
# calls at the end of `integrate_user_project` after that save.
|
|
649
|
+
#
|
|
650
|
+
# Expo CNG `expo prebuild --clean` always starts from a template with no CP
|
|
651
|
+
# embed phase. Running the user-project helpers from `post_install` silently
|
|
652
|
+
# skipped every native target, then integrate wrote `[CP] Embed Pods
|
|
653
|
+
# Frameworks` without `[RNFB] Embed Firebase SPM Frameworks` or a
|
|
654
|
+
# FirebaseCore `PBXBuildFile` -- undefined `_OBJC_CLASS_$_FIRApp` from
|
|
655
|
+
# AppDelegate (#9158 / CPRN-301). A committed bare-RN `ios/` folder that
|
|
656
|
+
# already had the CP phase from a prior `pod install` could look fine at
|
|
657
|
+
# `post_install` and hid this on #9164.
|
|
537
658
|
#
|
|
538
659
|
# This file is `require`d from each RNFB podspec, which CocoaPods evaluates
|
|
539
660
|
# early, during dependency resolution (itself one of the first steps inside
|
|
540
661
|
# `Installer#install!`). That's early enough for the patch installed here to
|
|
541
|
-
# affect the
|
|
542
|
-
# further down in that same `install!` run.
|
|
662
|
+
# affect the later hook calls in that same `install!` run.
|
|
543
663
|
#
|
|
544
664
|
# Why hook CocoaPods instead of React Native: `Pod::Installer` is a stable,
|
|
545
665
|
# semantically-versioned public class that the wider CocoaPods plugin
|
|
@@ -547,23 +667,27 @@ end
|
|
|
547
667
|
# changed in years. That makes it a meaningfully safer patch target than
|
|
548
668
|
# RN's private, unversioned `react-native/scripts/cocoapods/spm.rb` helper,
|
|
549
669
|
# which isn't part of any documented RN contract. If CocoaPods ever
|
|
550
|
-
# renames/removes
|
|
551
|
-
# and print a `pod install`-time warning
|
|
552
|
-
# rather than a silent runtime dyld crash) telling you to call
|
|
670
|
+
# renames/removes these methods, the guards below no-op instead of raising,
|
|
671
|
+
# and print a `pod install`-time warning telling you to call
|
|
553
672
|
# `rnfirebase_add_spm_embed_phase(installer)` from your own Podfile as a
|
|
554
|
-
# fallback.
|
|
673
|
+
# fallback. Older CocoaPods without `run_podfile_post_integrate_hooks` keeps
|
|
674
|
+
# the user-project helpers on `post_install`.
|
|
555
675
|
#
|
|
556
676
|
# `installer_class` is only ever overridden by tests -- there's no real
|
|
557
677
|
# `Pod::Installer` outside of a full CocoaPods environment.
|
|
558
678
|
def rnfirebase_hook_cocoapods_post_install!(installer_class = (Pod::Installer if defined?(Pod::Installer)))
|
|
679
|
+
generate_method = :generate_pods_project
|
|
680
|
+
generate_original_method = :rnfirebase_original_generate_pods_project
|
|
559
681
|
hook_method = :run_podfile_post_install_hooks
|
|
560
682
|
original_method = :rnfirebase_original_run_podfile_post_install_hooks
|
|
683
|
+
integrate_hook_method = :run_podfile_post_integrate_hooks
|
|
684
|
+
integrate_original_method = :rnfirebase_original_run_podfile_post_integrate_hooks
|
|
561
685
|
|
|
562
686
|
unless installer_class
|
|
563
687
|
if defined?(Pod::UI)
|
|
564
688
|
Pod::UI.warn '[react-native-firebase] `Pod::Installer` isn\'t defined -- automatic Firebase SPM setup ' \
|
|
565
689
|
'(dynamic framework embedding, etc.) was not hooked into `pod install`. Add ' \
|
|
566
|
-
'`rnfirebase_add_spm_embed_phase(installer)` to your Podfile\'s
|
|
690
|
+
'`rnfirebase_add_spm_embed_phase(installer)` to your Podfile\'s post_integrate block as a fallback.'
|
|
567
691
|
end
|
|
568
692
|
return
|
|
569
693
|
end
|
|
@@ -573,19 +697,84 @@ def rnfirebase_hook_cocoapods_post_install!(installer_class = (Pod::Installer if
|
|
|
573
697
|
if defined?(Pod::UI)
|
|
574
698
|
Pod::UI.warn "[react-native-firebase] `Pod::Installer##{hook_method}` doesn't exist (a CocoaPods " \
|
|
575
699
|
'release may have renamed or removed it) -- automatic Firebase SPM setup was not hooked into ' \
|
|
576
|
-
'`pod install`. Add `rnfirebase_add_spm_embed_phase(installer)` to your Podfile\'s
|
|
700
|
+
'`pod install`. Add `rnfirebase_add_spm_embed_phase(installer)` to your Podfile\'s post_integrate ' \
|
|
577
701
|
'block as a fallback.'
|
|
578
702
|
end
|
|
579
703
|
return
|
|
580
704
|
end
|
|
581
705
|
|
|
706
|
+
already_hooked_post_install = installer_class.method_defined?(original_method) ||
|
|
707
|
+
installer_class.private_method_defined?(original_method)
|
|
708
|
+
already_hooked_generate = installer_class.method_defined?(generate_original_method) ||
|
|
709
|
+
installer_class.private_method_defined?(generate_original_method)
|
|
710
|
+
already_hooked_post_integrate = installer_class.method_defined?(integrate_original_method) ||
|
|
711
|
+
installer_class.private_method_defined?(integrate_original_method)
|
|
712
|
+
|
|
713
|
+
generate_was_private = installer_class.private_method_defined?(generate_method)
|
|
714
|
+
generate_available = generate_was_private || installer_class.method_defined?(generate_method)
|
|
715
|
+
integrate_was_private = installer_class.private_method_defined?(integrate_hook_method)
|
|
716
|
+
post_integrate_available = integrate_was_private || installer_class.method_defined?(integrate_hook_method)
|
|
717
|
+
|
|
718
|
+
generate_unavailable_warning = :@rnfirebase_generate_pods_project_unavailable_warning
|
|
719
|
+
if !already_hooked_generate &&
|
|
720
|
+
!generate_available &&
|
|
721
|
+
defined?(Expo::PrecompiledModules) &&
|
|
722
|
+
Expo::PrecompiledModules.respond_to?(:enabled?) &&
|
|
723
|
+
Expo::PrecompiledModules.enabled? &&
|
|
724
|
+
defined?(Pod::UI) &&
|
|
725
|
+
!installer_class.instance_variable_defined?(generate_unavailable_warning)
|
|
726
|
+
Pod::UI.warn '[react-native-firebase] `Pod::Installer#generate_pods_project` does not exist ' \
|
|
727
|
+
'(a CocoaPods release may have renamed or removed it) -- Expo prebuilt RNFB ' \
|
|
728
|
+
'dynamic-linkage restoration was not hooked into `pod install`. Use the CocoaPods ' \
|
|
729
|
+
'version required by your Expo SDK and report this version combination if the app ' \
|
|
730
|
+
'links duplicate Firebase symbols.'
|
|
731
|
+
installer_class.instance_variable_set(generate_unavailable_warning, true)
|
|
732
|
+
end
|
|
733
|
+
|
|
582
734
|
# Already hooked -- e.g. a second RNFB podspec also `require`d this same
|
|
583
|
-
# file within one `pod install` process
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
735
|
+
# file within one `pod install` process. Expected and idempotent.
|
|
736
|
+
return if (already_hooked_generate || !generate_available) &&
|
|
737
|
+
already_hooked_post_install &&
|
|
738
|
+
(already_hooked_post_integrate || !post_integrate_available)
|
|
739
|
+
|
|
740
|
+
unless already_hooked_generate || !generate_available
|
|
741
|
+
installer_class.class_eval do
|
|
742
|
+
alias_method generate_original_method, generate_method
|
|
743
|
+
|
|
744
|
+
define_method(generate_method) do
|
|
745
|
+
# Expo's patched pre-install implementation has already downgraded
|
|
746
|
+
# React-Core-dependent targets, and CocoaPods has already validated
|
|
747
|
+
# that graph. Restore RNFB immediately before CocoaPods reads each
|
|
748
|
+
# pod target's build type to generate products and app link inputs.
|
|
749
|
+
begin
|
|
750
|
+
rnfirebase_restore_dynamic_linkage_after_expo_prebuilt!(self)
|
|
751
|
+
rescue StandardError => e
|
|
752
|
+
if defined?(Pod::UI)
|
|
753
|
+
Pod::UI.warn '[react-native-firebase] Expo prebuilt RNFB dynamic-linkage restoration failed ' \
|
|
754
|
+
"(#{e.class}: #{e.message}). Pod install aborted to avoid a partial restore."
|
|
755
|
+
end
|
|
756
|
+
raise
|
|
757
|
+
end
|
|
758
|
+
send(generate_original_method)
|
|
759
|
+
end
|
|
760
|
+
end
|
|
761
|
+
installer_class.send(:private, generate_method) if generate_was_private
|
|
762
|
+
end
|
|
763
|
+
|
|
764
|
+
unless already_hooked_post_integrate || !post_integrate_available
|
|
765
|
+
installer_class.class_eval do
|
|
766
|
+
alias_method integrate_original_method, integrate_hook_method
|
|
767
|
+
|
|
768
|
+
define_method(integrate_hook_method) do
|
|
769
|
+
result = send(integrate_original_method)
|
|
770
|
+
rnfirebase_run_spm_user_project_hooks(self)
|
|
771
|
+
result
|
|
772
|
+
end
|
|
773
|
+
end
|
|
774
|
+
installer_class.send(:private, integrate_hook_method) if integrate_was_private
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
return if already_hooked_post_install
|
|
589
778
|
|
|
590
779
|
installer_class.class_eval do
|
|
591
780
|
alias_method original_method, hook_method
|
|
@@ -599,7 +788,7 @@ def rnfirebase_hook_cocoapods_post_install!(installer_class = (Pod::Installer if
|
|
|
599
788
|
rnfirebase_fail_if_spm_static_linkage!(self)
|
|
600
789
|
# Soft ensure (warn on unexpected errors) -- paired with the hard
|
|
601
790
|
# `rnfirebase_verify_pods_project_uuid_integrity!` after original
|
|
602
|
-
# post_install
|
|
791
|
+
# post_install.
|
|
603
792
|
begin
|
|
604
793
|
rnfirebase_ensure_pods_uuid_counter_safe!(self)
|
|
605
794
|
rescue StandardError => e
|
|
@@ -614,71 +803,10 @@ def rnfirebase_hook_cocoapods_post_install!(installer_class = (Pod::Installer if
|
|
|
614
803
|
# Deliberately not rescued: if RN SPM overwrote `rootObject`, continuing
|
|
615
804
|
# would only delay the failure to Xcode with a worse diagnostic.
|
|
616
805
|
rnfirebase_verify_pods_project_uuid_integrity!(self)
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
Pod::UI.warn "[react-native-firebase] Couldn't embed Firebase SPM frameworks " \
|
|
622
|
-
"automatically (#{e.class}: #{e.message}). Add `rnfirebase_add_spm_embed_phase(installer)` " \
|
|
623
|
-
'to your Podfile\'s post_install block as a fallback.'
|
|
624
|
-
end
|
|
625
|
-
end
|
|
626
|
-
# Deliberately outside the `rescue` above, and not itself wrapped in a
|
|
627
|
-
# rescue-and-warn like the softer checks in this method: dynamic
|
|
628
|
-
# framework embedding is load-bearing (without it, the app crashes at
|
|
629
|
-
# launch with a missing-library dyld error), so if the phase still
|
|
630
|
-
# isn't actually on a target that needs it after the call above --
|
|
631
|
-
# whether that call raised, silently no-opped, or only partially
|
|
632
|
-
# applied -- this must abort `pod install` with a clear message
|
|
633
|
-
# rather than let a broken install continue, the same way
|
|
634
|
-
# `rnfirebase_fail_if_spm_static_linkage!` above is deliberately not
|
|
635
|
-
# rescued either.
|
|
636
|
-
rnfirebase_verify_spm_embed_phase_applied!(self)
|
|
637
|
-
begin
|
|
638
|
-
rnfirebase_add_spm_core_to_app_target(self)
|
|
639
|
-
rescue StandardError => e
|
|
640
|
-
if defined?(Pod::UI)
|
|
641
|
-
Pod::UI.warn "[react-native-firebase] Couldn't link FirebaseCore into the app target " \
|
|
642
|
-
"automatically (#{e.class}: #{e.message}). " \
|
|
643
|
-
'Add `rnfirebase_add_spm_core_to_app_target(installer)` ' \
|
|
644
|
-
'to your Podfile\'s post_install block as a fallback if your own native code calls ' \
|
|
645
|
-
'FIRApp/FIROptions APIs directly.'
|
|
646
|
-
end
|
|
647
|
-
end
|
|
648
|
-
begin
|
|
649
|
-
rnfirebase_remove_spm_core_from_app_target(self)
|
|
650
|
-
rescue StandardError => e
|
|
651
|
-
if defined?(Pod::UI)
|
|
652
|
-
Pod::UI.warn "[react-native-firebase] Couldn't remove a stale FirebaseCore SPM link from the " \
|
|
653
|
-
"app target automatically (#{e.class}: #{e.message}). If you previously used SPM and have " \
|
|
654
|
-
'since set `$RNFirebaseDisableSPM = true`, remove the "firebase-ios-sdk" Swift Package ' \
|
|
655
|
-
'dependency from your app target manually in Xcode.'
|
|
656
|
-
end
|
|
657
|
-
end
|
|
658
|
-
begin
|
|
659
|
-
rnfirebase_fix_spm_archive_signature_collision(self)
|
|
660
|
-
rescue StandardError => e
|
|
661
|
-
if defined?(Pod::UI)
|
|
662
|
-
Pod::UI.warn '[react-native-firebase] Couldn\'t add the Firebase/Google SPM binary ' \
|
|
663
|
-
"xcframework signature workaround automatically (#{e.class}: #{e.message}). If your " \
|
|
664
|
-
'Release archive fails with `"...xcframework-ios.signature" couldn\'t be copied to ' \
|
|
665
|
-
'"Signatures" because an item with the same name already exists`, add a Run Script ' \
|
|
666
|
-
'build phase to your app target that runs `rm -f ' \
|
|
667
|
-
'"\\${CONFIGURATION_BUILD_DIR}"/<TheNameFromTheErrorMessage>.xcframework-ios.signature`.'
|
|
668
|
-
end
|
|
669
|
-
end
|
|
670
|
-
begin
|
|
671
|
-
rnfirebase_apply_spm_build_settings(self)
|
|
672
|
-
rescue StandardError => e
|
|
673
|
-
if defined?(Pod::UI)
|
|
674
|
-
Pod::UI.warn "[react-native-firebase] Couldn't apply Firebase SPM build settings " \
|
|
675
|
-
"automatically (#{e.class}: #{e.message}). " \
|
|
676
|
-
'Add `rnfirebase_apply_spm_build_settings(installer)` ' \
|
|
677
|
-
'to your Podfile\'s post_install block as a fallback if Release builds crash at launch with ' \
|
|
678
|
-
'missing FIRComponent registrations, or Xcode reports that a Firebase module such as ' \
|
|
679
|
-
'`FirebaseCoreInternal`/`FirebaseSharedSwift` cannot be resolved.'
|
|
680
|
-
end
|
|
681
|
-
end
|
|
806
|
+
# Current CocoaPods: user-project mutations run from post_integrate
|
|
807
|
+
# (after `[CP] Embed Pods Frameworks` exists). Older CocoaPods without
|
|
808
|
+
# that hook keeps them here.
|
|
809
|
+
rnfirebase_run_spm_user_project_hooks(self) unless post_integrate_available
|
|
682
810
|
result
|
|
683
811
|
end
|
|
684
812
|
end
|
|
@@ -687,14 +815,15 @@ rescue StandardError => e
|
|
|
687
815
|
if defined?(Pod::UI)
|
|
688
816
|
Pod::UI.warn "[react-native-firebase] Couldn't hook CocoaPods to auto-embed Firebase SPM " \
|
|
689
817
|
"frameworks (#{e.class}: #{e.message}). Add `rnfirebase_add_spm_embed_phase(installer)` " \
|
|
690
|
-
'to your Podfile\'s
|
|
818
|
+
'to your Podfile\'s post_integrate block as a fallback.'
|
|
691
819
|
end
|
|
692
820
|
end
|
|
693
821
|
|
|
694
822
|
# Adds a direct SPM product dependency on `FirebaseCore` to the *app's own*
|
|
695
823
|
# native target(s) -- not just RNFB's pod targets. Runs automatically on every
|
|
696
|
-
# `pod install`/`pod update`
|
|
697
|
-
#
|
|
824
|
+
# `pod install`/`pod update` from `rnfirebase_run_spm_user_project_hooks`
|
|
825
|
+
# (post_integrate on current CocoaPods; post_install fallback otherwise) --
|
|
826
|
+
# see `rnfirebase_hook_cocoapods_post_install!` -- so you normally never
|
|
698
827
|
# need to call this yourself.
|
|
699
828
|
#
|
|
700
829
|
# Why this needs to exist: every react-native-firebase app is required to
|
|
@@ -1044,13 +1173,29 @@ def rnfirebase_apply_spm_build_settings(installer)
|
|
|
1044
1173
|
project.save if project_modified
|
|
1045
1174
|
end
|
|
1046
1175
|
|
|
1047
|
-
|
|
1176
|
+
# User-project settings are `project.save`d above. Pods settings used to
|
|
1177
|
+
# live only on the in-memory `installer.pods_project` during `post_install`,
|
|
1178
|
+
# when CocoaPods still writes that file. The user-project hooks now run
|
|
1179
|
+
# from `post_integrate` (after that write), so these mutations are lost
|
|
1180
|
+
# unless we save. Xcode 26 then keeps explicit modules on RNFB pod
|
|
1181
|
+
# targets and fails Swift compiles that import Firebase SPM internals
|
|
1182
|
+
# (`FirebaseCoreInternal`, `FirebaseSharedSwift`) with "compilation
|
|
1183
|
+
# search paths unable to resolve module dependency".
|
|
1184
|
+
pods_project = installer.pods_project
|
|
1185
|
+
return unless pods_project
|
|
1186
|
+
|
|
1187
|
+
pods_modified = false
|
|
1188
|
+
pods_project.targets.each do |target|
|
|
1048
1189
|
target.build_configurations.each do |config|
|
|
1049
1190
|
explicit_modules_settings.each do |setting|
|
|
1050
|
-
config.build_settings[setting]
|
|
1191
|
+
unless config.build_settings[setting] == 'NO'
|
|
1192
|
+
config.build_settings[setting] = 'NO'
|
|
1193
|
+
pods_modified = true
|
|
1194
|
+
end
|
|
1051
1195
|
end
|
|
1052
1196
|
end
|
|
1053
1197
|
end
|
|
1198
|
+
pods_project.save if pods_modified
|
|
1054
1199
|
end
|
|
1055
1200
|
|
|
1056
1201
|
rnfirebase_hook_cocoapods_post_install!
|
|
@@ -102,11 +102,11 @@ RCT_EXPORT_MODULE(NativeRNFBTurboApp)
|
|
|
102
102
|
return constants;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboApp::Constants
|
|
105
|
+
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboApp::Constants>)constantsToExport {
|
|
106
106
|
return [_RCTTypedModuleConstants newWithUnsafeDictionary:[self appConstantsDictionary]];
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboApp::Constants
|
|
109
|
+
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboApp::Constants>)getConstants {
|
|
110
110
|
return [self constantsToExport];
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -69,12 +69,11 @@ RCT_EXPORT_MODULE(NativeRNFBTurboUtils)
|
|
|
69
69
|
return [constants copy];
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboUtils::Constants
|
|
73
|
-
constantsToExport {
|
|
72
|
+
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboUtils::Constants>)constantsToExport {
|
|
74
73
|
return [_RCTTypedModuleConstants newWithUnsafeDictionary:[self utilsConstantsDictionary]];
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboUtils::Constants
|
|
76
|
+
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboUtils::Constants>)getConstants {
|
|
78
77
|
return [self constantsToExport];
|
|
79
78
|
}
|
|
80
79
|
|
package/lib/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '26.3.
|
|
2
|
+
export const version = '26.3.3';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-firebase/app",
|
|
3
|
-
"version": "26.3.
|
|
3
|
+
"version": "26.3.3",
|
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
|
5
5
|
"description": "A well tested, feature rich Firebase implementation for React Native, supporting iOS & Android. Individual module support for Admob, Analytics, Auth, Crash Reporting, Cloud Firestore, Database, Dynamic Links, Functions, Messaging (FCM), Remote Config, Storage and more.",
|
|
6
6
|
"main": "./dist/module/index.js",
|
|
@@ -184,5 +184,5 @@
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
},
|
|
187
|
-
"gitHead": "
|
|
187
|
+
"gitHead": "04b90008385bf69be74f3a333d0dfea43ba32e64"
|
|
188
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/app.plugin.ts","./src/index.ts","./src/
|
|
1
|
+
{"root":["./src/app.plugin.ts","./src/index.ts","./src/pluginconfig.ts","./src/android/applyplugin.ts","./src/android/buildscriptdependency.ts","./src/android/constants.ts","./src/android/copygoogleservices.ts","./src/android/index.ts","./src/ios/appdelegate.ts","./src/ios/googleservicesplist.ts","./src/ios/index.ts","./src/ios/podfile.ts"],"version":"6.0.3"}
|