From f1255de12addc7dfe198d8fcd73e6fff57748f63 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Thu, 29 May 2025 12:28:17 -0400 Subject: [PATCH 01/10] [Core] Experiment with startup initialization --- FirebaseCore/Sources/FIRApp.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/FirebaseCore/Sources/FIRApp.m b/FirebaseCore/Sources/FIRApp.m index 702799c8114..2672b8d3457 100644 --- a/FirebaseCore/Sources/FIRApp.m +++ b/FirebaseCore/Sources/FIRApp.m @@ -333,9 +333,9 @@ - (BOOL)configureCore { return NO; } - // Initialize the Analytics once there is a valid options under default app. Analytics should - // always initialize first by itself before the other SDKs. - if ([self.name isEqualToString:kFIRDefaultAppName]) { + static dispatch_once_t analyticsSetupOnceToken; + dispatch_once(&analyticsSetupOnceToken, ^{ + // Analytics is initialized only once and for the first app configured. Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics"); if (firAnalyticsClass) { #pragma clang diagnostic push @@ -352,7 +352,7 @@ - (BOOL)configureCore { #pragma clang diagnostic pop } } - } + }); [self subscribeForAppDidBecomeActiveNotifications]; From 7ec0e3228f2ca0a3467d923953c1291a454c15c9 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 30 May 2025 17:32:18 -0400 Subject: [PATCH 02/10] remove unused constants --- FirebaseCore/Sources/FIRAnalyticsConfiguration.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/FirebaseCore/Sources/FIRAnalyticsConfiguration.h b/FirebaseCore/Sources/FIRAnalyticsConfiguration.h index 6429ac70eac..28199388abf 100644 --- a/FirebaseCore/Sources/FIRAnalyticsConfiguration.h +++ b/FirebaseCore/Sources/FIRAnalyticsConfiguration.h @@ -33,10 +33,6 @@ static NSString *const kFIRAPersistedConfigMeasurementEnabledStateKey = static NSString *const kFIRAnalyticsConfigurationSetEnabledNotification = @"FIRAnalyticsConfigurationSetEnabledNotification"; -static NSString *const kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotification = - @"FIRAnalyticsConfigurationSetMinimumSessionIntervalNotification"; -static NSString *const kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification = - @"FIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification"; @interface FIRAnalyticsConfiguration : NSObject From dae82d36b99847d94ca900047ea407303d2640b2 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 10:57:47 -0400 Subject: [PATCH 03/10] non critical change --- FirebaseFirestoreInternal.podspec | 1 - Firestore/Source/API/FSTFirestoreComponent.mm | 2 +- Firestore/core/src/remote/firebase_metadata_provider_apple.mm | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/FirebaseFirestoreInternal.podspec b/FirebaseFirestoreInternal.podspec index 5362cf20699..3b4b39acb20 100644 --- a/FirebaseFirestoreInternal.podspec +++ b/FirebaseFirestoreInternal.podspec @@ -45,7 +45,6 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling, # that "quick open" by filename in Xcode will continue to work. s.source_files = [ 'FirebaseCore/Extension/*.h', - 'FirebaseCore/Sources/FIROptionsInternal.h', 'Firestore/Source/Public/FirebaseFirestore/*.h', 'Firestore/Source/**/*.{m,mm}', 'Firestore/Protos/nanopb/**/*.cc', diff --git a/Firestore/Source/API/FSTFirestoreComponent.mm b/Firestore/Source/API/FSTFirestoreComponent.mm index d07ac36f899..3bbc81ba1be 100644 --- a/Firestore/Source/API/FSTFirestoreComponent.mm +++ b/Firestore/Source/API/FSTFirestoreComponent.mm @@ -28,7 +28,7 @@ #import "FirebaseCore/Extension/FIRComponentContainer.h" #import "FirebaseCore/Extension/FIRComponentType.h" #import "FirebaseCore/Extension/FIRLibrary.h" -#import "FirebaseCore/Sources/FIROptionsInternal.h" +#import #import "Firestore/Source/API/FIRFirestore+Internal.h" #include "Firestore/core/include/firebase/firestore/firestore_version.h" diff --git a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm index a2c7e287bd6..43a4cd41670 100644 --- a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm +++ b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm @@ -18,7 +18,7 @@ #import "FirebaseCore/Extension/FIRAppInternal.h" #import "FirebaseCore/Extension/FIRHeartbeatLogger.h" -#import "FirebaseCore/Sources/FIROptionsInternal.h" +#import #include "Firestore/core/src/util/string_apple.h" From 830da531a51508eb0e6fe6335823761ad6e46f17 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 14:37:10 -0400 Subject: [PATCH 04/10] deleted unused code --- FirebaseCore/Sources/FIRApp.m | 20 -------------------- FirebaseCore/Sources/FIROptions.m | 2 +- FirebaseCore/Tests/Unit/FIRAppTest.m | 1 - 3 files changed, 1 insertion(+), 22 deletions(-) diff --git a/FirebaseCore/Sources/FIRApp.m b/FirebaseCore/Sources/FIRApp.m index 2672b8d3457..b22a7d8c3f7 100644 --- a/FirebaseCore/Sources/FIRApp.m +++ b/FirebaseCore/Sources/FIRApp.m @@ -448,26 +448,6 @@ + (void)sendNotificationsToSDKs:(FIRApp *)app { userInfo:appInfoDict]; } -+ (NSError *)errorForMissingOptions { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : - @"Unable to parse GoogleService-Info.plist in order to configure services.", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain code:-100 userInfo:errorDict]; -} - -+ (NSError *)errorForInvalidAppID { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : @"Unable to validate Google App ID", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist or GoogleAppID set in the " - @"customized options." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain code:-101 userInfo:errorDict]; -} - + (BOOL)isDefaultAppConfigured { return (sDefaultApp != nil); } diff --git a/FirebaseCore/Sources/FIROptions.m b/FirebaseCore/Sources/FIROptions.m index bfaeff1620e..d316f491595 100644 --- a/FirebaseCore/Sources/FIROptions.m +++ b/FirebaseCore/Sources/FIROptions.m @@ -414,7 +414,7 @@ - (NSDictionary *)analyticsOptionsDictionary { /** * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. This uses the old plist flag IS_MEASUREMENT_ENABLED, which should still + * GoogleService-Info.plist. This uses the old plist flag `IS_MEASUREMENT_ENABLED`, which should still * be supported. */ - (BOOL)isMeasurementEnabled { diff --git a/FirebaseCore/Tests/Unit/FIRAppTest.m b/FirebaseCore/Tests/Unit/FIRAppTest.m index 0bba5dceba1..de5532ff71b 100644 --- a/FirebaseCore/Tests/Unit/FIRAppTest.m +++ b/FirebaseCore/Tests/Unit/FIRAppTest.m @@ -43,7 +43,6 @@ @interface FIRApp (TestInternal) + (void)resetApps; - (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options; - (BOOL)configureCore; -+ (NSError *)errorForInvalidAppID; - (BOOL)isAppIDValid; + (NSString *)actualBundleID; + (NSNumber *)mapFromServiceStringToTypeEnum:(NSString *)serviceString; From a65979f32341ec33e1121a0d140bbada64723266 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 15:38:56 -0400 Subject: [PATCH 05/10] more unused code removal --- FirebaseCore/Sources/FIRAnalyticsConfiguration.h | 4 ---- FirebaseCore/Sources/FIRAnalyticsConfiguration.m | 4 ---- 2 files changed, 8 deletions(-) diff --git a/FirebaseCore/Sources/FIRAnalyticsConfiguration.h b/FirebaseCore/Sources/FIRAnalyticsConfiguration.h index 28199388abf..9d2285ce270 100644 --- a/FirebaseCore/Sources/FIRAnalyticsConfiguration.h +++ b/FirebaseCore/Sources/FIRAnalyticsConfiguration.h @@ -39,10 +39,6 @@ static NSString *const kFIRAnalyticsConfigurationSetEnabledNotification = /// Returns the shared instance of FIRAnalyticsConfiguration. + (FIRAnalyticsConfiguration *)sharedInstance; -// Sets whether analytics collection is enabled for this app on this device. This setting is -// persisted across app sessions. By default it is enabled. -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - /// Sets whether analytics collection is enabled for this app on this device, and a flag to persist /// the value or not. The setting should not be persisted if being set by the global data collection /// flag. diff --git a/FirebaseCore/Sources/FIRAnalyticsConfiguration.m b/FirebaseCore/Sources/FIRAnalyticsConfiguration.m index 07c786cb7dc..44132cbcf8a 100644 --- a/FirebaseCore/Sources/FIRAnalyticsConfiguration.m +++ b/FirebaseCore/Sources/FIRAnalyticsConfiguration.m @@ -39,10 +39,6 @@ - (void)postNotificationName:(NSString *)name value:(id)value { userInfo:@{name : value}]; } -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled { - [self setAnalyticsCollectionEnabled:analyticsCollectionEnabled persistSetting:YES]; -} - - (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled persistSetting:(BOOL)shouldPersist { // Persist the measurementEnabledState. Use FIRAnalyticsEnabledState values instead of YES/NO. From a11c7e7c2f723fe1ebbf6c823d476776933ceb8a Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 15:39:38 -0400 Subject: [PATCH 06/10] style --- FirebaseCore/Sources/FIROptions.m | 4 ++-- Firestore/Source/API/FSTFirestoreComponent.mm | 2 +- Firestore/core/src/remote/firebase_metadata_provider_apple.mm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/FirebaseCore/Sources/FIROptions.m b/FirebaseCore/Sources/FIROptions.m index d316f491595..a73f1c5bf55 100644 --- a/FirebaseCore/Sources/FIROptions.m +++ b/FirebaseCore/Sources/FIROptions.m @@ -414,8 +414,8 @@ - (NSDictionary *)analyticsOptionsDictionary { /** * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. This uses the old plist flag `IS_MEASUREMENT_ENABLED`, which should still - * be supported. + * GoogleService-Info.plist. This uses the old plist flag `IS_MEASUREMENT_ENABLED`, which should + * still be supported. */ - (BOOL)isMeasurementEnabled { if (self.isAnalyticsCollectionDeactivated) { diff --git a/Firestore/Source/API/FSTFirestoreComponent.mm b/Firestore/Source/API/FSTFirestoreComponent.mm index 3bbc81ba1be..29d3701a2fc 100644 --- a/Firestore/Source/API/FSTFirestoreComponent.mm +++ b/Firestore/Source/API/FSTFirestoreComponent.mm @@ -22,13 +22,13 @@ #include #include +#import #import "FirebaseAuth/Interop/Public/FirebaseAuthInterop/FIRAuthInterop.h" #import "FirebaseCore/Extension/FIRAppInternal.h" #import "FirebaseCore/Extension/FIRComponent.h" #import "FirebaseCore/Extension/FIRComponentContainer.h" #import "FirebaseCore/Extension/FIRComponentType.h" #import "FirebaseCore/Extension/FIRLibrary.h" -#import #import "Firestore/Source/API/FIRFirestore+Internal.h" #include "Firestore/core/include/firebase/firestore/firestore_version.h" diff --git a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm index 43a4cd41670..51b4d4350a8 100644 --- a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm +++ b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm @@ -16,9 +16,9 @@ #include "Firestore/core/src/remote/firebase_metadata_provider_apple.h" +#import #import "FirebaseCore/Extension/FIRAppInternal.h" #import "FirebaseCore/Extension/FIRHeartbeatLogger.h" -#import #include "Firestore/core/src/util/string_apple.h" From a94b748e95de8268a01b0309251be30ebcc7e3b6 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 15:47:00 -0400 Subject: [PATCH 07/10] import changes --- Firestore/Source/API/FSTFirestoreComponent.mm | 2 +- Firestore/core/src/remote/firebase_metadata_provider_apple.mm | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Firestore/Source/API/FSTFirestoreComponent.mm b/Firestore/Source/API/FSTFirestoreComponent.mm index 29d3701a2fc..09d27afb953 100644 --- a/Firestore/Source/API/FSTFirestoreComponent.mm +++ b/Firestore/Source/API/FSTFirestoreComponent.mm @@ -17,12 +17,12 @@ #import "Firestore/Source/API/FSTFirestoreComponent.h" #import +#import #include #include #include -#import #import "FirebaseAuth/Interop/Public/FirebaseAuthInterop/FIRAuthInterop.h" #import "FirebaseCore/Extension/FIRAppInternal.h" #import "FirebaseCore/Extension/FIRComponent.h" diff --git a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm index 51b4d4350a8..3270b4e32a4 100644 --- a/Firestore/core/src/remote/firebase_metadata_provider_apple.mm +++ b/Firestore/core/src/remote/firebase_metadata_provider_apple.mm @@ -14,9 +14,10 @@ * limitations under the License. */ +#import + #include "Firestore/core/src/remote/firebase_metadata_provider_apple.h" -#import #import "FirebaseCore/Extension/FIRAppInternal.h" #import "FirebaseCore/Extension/FIRHeartbeatLogger.h" From 335789499299dd626cf17f9a3979ba314274efa3 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 2 Jun 2025 17:07:59 -0400 Subject: [PATCH 08/10] move to test only header --- FirebaseCore/Sources/FIROptionsInternal.h | 12 ------------ FirebaseCore/Tests/Unit/FIROptionsTest.m | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/FirebaseCore/Sources/FIROptionsInternal.h b/FirebaseCore/Sources/FIROptionsInternal.h index 8765614e17d..22e68083d1d 100644 --- a/FirebaseCore/Sources/FIROptionsInternal.h +++ b/FirebaseCore/Sources/FIROptionsInternal.h @@ -64,18 +64,6 @@ */ @property(nonatomic, readonly, copy) NSString *libraryVersionID; -/** - * The flag indicating whether this object was constructed with the values in the default plist - * file. - */ -@property(nonatomic) BOOL usingOptionsFromDefaultPlist; - -/** - * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. - */ -@property(nonatomic, readonly) BOOL isMeasurementEnabled; - /** * Whether or not editing is locked. This should occur after `FirebaseOptions` has been set on a * `FirebaseApp`. diff --git a/FirebaseCore/Tests/Unit/FIROptionsTest.m b/FirebaseCore/Tests/Unit/FIROptionsTest.m index 3f228c83fad..49872042afb 100644 --- a/FirebaseCore/Tests/Unit/FIROptionsTest.m +++ b/FirebaseCore/Tests/Unit/FIROptionsTest.m @@ -27,6 +27,18 @@ @interface FIROptions (Test) +/** + * The flag indicating whether this object was constructed with the values in the default plist + * file. + */ +@property(nonatomic) BOOL usingOptionsFromDefaultPlist; + +/** + * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in + * GoogleService-Info.plist. + */ +@property(nonatomic, readonly) BOOL isMeasurementEnabled; + - (nullable NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary: (nullable NSDictionary *)infoDictionary; From 9240daf7fb03b3804cd8b91388cb745bfff1822d Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:03:28 -0400 Subject: [PATCH 09/10] partial revert --- FirebaseCore/Sources/FIRApp.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/FirebaseCore/Sources/FIRApp.m b/FirebaseCore/Sources/FIRApp.m index b22a7d8c3f7..0cbcea10430 100644 --- a/FirebaseCore/Sources/FIRApp.m +++ b/FirebaseCore/Sources/FIRApp.m @@ -333,9 +333,9 @@ - (BOOL)configureCore { return NO; } - static dispatch_once_t analyticsSetupOnceToken; - dispatch_once(&analyticsSetupOnceToken, ^{ - // Analytics is initialized only once and for the first app configured. + // Initialize the Analytics once there is a valid options under default app. Analytics should + // always initialize first by itself before the other SDKs. + if ([self.name isEqualToString:kFIRDefaultAppName]) { Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics"); if (firAnalyticsClass) { #pragma clang diagnostic push @@ -352,7 +352,7 @@ - (BOOL)configureCore { #pragma clang diagnostic pop } } - }); + } [self subscribeForAppDidBecomeActiveNotifications]; From 3fda3c966c79079cc8e3d73dd2ebd24129a93bfc Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:10:01 -0400 Subject: [PATCH 10/10] Update FIROptions.m --- FirebaseCore/Sources/FIROptions.m | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/FirebaseCore/Sources/FIROptions.m b/FirebaseCore/Sources/FIROptions.m index a73f1c5bf55..232e6d861d0 100644 --- a/FirebaseCore/Sources/FIROptions.m +++ b/FirebaseCore/Sources/FIROptions.m @@ -78,6 +78,18 @@ - (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)i */ - (void)checkEditingLocked; +/** + * The flag indicating whether this object was constructed with the values in the default plist + * file. + */ +@property(nonatomic) BOOL usingOptionsFromDefaultPlist; + +/** + * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in + * GoogleService-Info.plist. + */ +@property(nonatomic, readonly) BOOL isMeasurementEnabled; + @end @implementation FIROptions {