From 4ae5a2a3948c87b3b94af99aa30ed433a0e8cfd3 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 11:02:17 -0500 Subject: [PATCH 01/12] chore(lint, ios): turn on recommended warnings in tests project --- tests/ios/testing.xcodeproj/project.pbxproj | 20 ++++++++++++++++++- .../xcschemes/testing Release.xcscheme | 2 +- .../xcshareddata/xcschemes/testing.xcscheme | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/ios/testing.xcodeproj/project.pbxproj b/tests/ios/testing.xcodeproj/project.pbxproj index 68ed331899..7e2a41f710 100644 --- a/tests/ios/testing.xcodeproj/project.pbxproj +++ b/tests/ios/testing.xcodeproj/project.pbxproj @@ -181,7 +181,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1140; + LastUpgradeCheck = 1320; ORGANIZATIONNAME = Invertase; TargetAttributes = { 13B07F861A680F5B00A75B9A = { @@ -433,14 +433,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -482,14 +491,23 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/tests/ios/testing.xcodeproj/xcshareddata/xcschemes/testing Release.xcscheme b/tests/ios/testing.xcodeproj/xcshareddata/xcschemes/testing Release.xcscheme index 1ffd9d62e2..0cf861f680 100644 --- a/tests/ios/testing.xcodeproj/xcshareddata/xcschemes/testing Release.xcscheme +++ b/tests/ios/testing.xcodeproj/xcshareddata/xcschemes/testing Release.xcscheme @@ -1,6 +1,6 @@ Date: Wed, 9 Feb 2022 15:25:15 -0500 Subject: [PATCH 02/12] fix(functions, emulator): add useEmulator, deprecate useFunctionsEmulator includes a lot of testing improvement in the area --- .../workflows/scripts/functions/src/index.ts | 2 +- .../functions/__tests__/functions.test.ts | 10 +++--- .../UniversalFirebaseFunctionsModule.java | 6 ++-- .../ReactNativeFirebaseFunctionsModule.java | 5 +-- packages/functions/e2e/functions.e2e.js | 30 ++++++++++++---- .../ios/RNFBFunctions/RNFBFunctionsModule.m | 9 ++--- packages/functions/lib/index.d.ts | 24 +++++++++++++ packages/functions/lib/index.js | 34 ++++++++++++++----- 8 files changed, 89 insertions(+), 31 deletions(-) diff --git a/.github/workflows/scripts/functions/src/index.ts b/.github/workflows/scripts/functions/src/index.ts index 61996246b6..3c957c9030 100644 --- a/.github/workflows/scripts/functions/src/index.ts +++ b/.github/workflows/scripts/functions/src/index.ts @@ -5,7 +5,7 @@ import * as functions from 'firebase-functions'; // export const helloWorld = functions.https.onRequest((request, response) => { functions.logger.info('Hello logs!', { structuredData: true }); - response.send('Hello from Firebase!'); + response.send('{ "data": "Hello from Firebase!" }'); }); export { testFunctionCustomRegion } from './testFunctionCustomRegion'; diff --git a/packages/functions/__tests__/functions.test.ts b/packages/functions/__tests__/functions.test.ts index 175f6b54d6..b43391adbe 100644 --- a/packages/functions/__tests__/functions.test.ts +++ b/packages/functions/__tests__/functions.test.ts @@ -11,15 +11,15 @@ describe('Cloud Functions', function () { describe('useFunctionsEmulator()', function () { it('useFunctionsEmulator -> uses 10.0.2.2', function () { - functions().useFunctionsEmulator('http://localhost'); + functions().useEmulator('localhost', 5001); // @ts-ignore - expect(functions()._useFunctionsEmulatorOrigin).toBe('http://10.0.2.2'); + expect(functions()._useFunctionsEmulatorHost).toBe('10.0.2.2'); - functions().useFunctionsEmulator('http://127.0.0.1'); + functions().useEmulator('127.0.0.1', 5001); // @ts-ignore - expect(functions()._useFunctionsEmulatorOrigin).toBe('http://10.0.2.2'); + expect(functions()._useFunctionsEmulatorHost).toBe('10.0.2.2'); }); it('prefers emulator to custom domain', function () { @@ -30,7 +30,7 @@ describe('Cloud Functions', function () { functions.useFunctionsEmulator('http://10.0.2.2'); // @ts-ignore - expect(functions._useFunctionsEmulatorOrigin).toBe('http://10.0.2.2'); + expect(functions._useFunctionsEmulatorHost).toBe('10.0.2.2'); }); }); diff --git a/packages/functions/android/src/main/java/io/invertase/firebase/functions/UniversalFirebaseFunctionsModule.java b/packages/functions/android/src/main/java/io/invertase/firebase/functions/UniversalFirebaseFunctionsModule.java index b38e7c3286..2a5ea43714 100644 --- a/packages/functions/android/src/main/java/io/invertase/firebase/functions/UniversalFirebaseFunctionsModule.java +++ b/packages/functions/android/src/main/java/io/invertase/firebase/functions/UniversalFirebaseFunctionsModule.java @@ -39,7 +39,7 @@ public class UniversalFirebaseFunctionsModule extends UniversalFirebaseModule { } Task httpsCallable( - String appName, String region, String origin, String name, Object data, ReadableMap options) { + String appName, String region, String host, Integer port, String name, Object data, ReadableMap options) { return Tasks.call( getExecutor(), () -> { @@ -52,8 +52,8 @@ Task httpsCallable( httpReference.setTimeout((long) options.getInt("timeout"), TimeUnit.SECONDS); } - if (origin != null) { - functionsInstance.useFunctionsEmulator(origin); + if (host != null) { + functionsInstance.useEmulator(host, port); } return Tasks.await(httpReference.call(data)).getData(); diff --git a/packages/functions/android/src/reactnative/java/io/invertase/firebase/functions/ReactNativeFirebaseFunctionsModule.java b/packages/functions/android/src/reactnative/java/io/invertase/firebase/functions/ReactNativeFirebaseFunctionsModule.java index 3dcc8a8bd2..a6a5a44082 100644 --- a/packages/functions/android/src/reactnative/java/io/invertase/firebase/functions/ReactNativeFirebaseFunctionsModule.java +++ b/packages/functions/android/src/reactnative/java/io/invertase/firebase/functions/ReactNativeFirebaseFunctionsModule.java @@ -47,14 +47,15 @@ public class ReactNativeFirebaseFunctionsModule extends ReactNativeFirebaseModul public void httpsCallable( String appName, String region, - String origin, + String host, + Integer port, String name, ReadableMap wrapper, ReadableMap options, Promise promise) { Task callMethodTask = module.httpsCallable( - appName, region, origin, name, wrapper.toHashMap().get(DATA_KEY), options); + appName, region, host, port, name, wrapper.toHashMap().get(DATA_KEY), options); // resolve callMethodTask.addOnSuccessListener( diff --git a/packages/functions/e2e/functions.e2e.js b/packages/functions/e2e/functions.e2e.js index f3adfea5e3..437307e96b 100644 --- a/packages/functions/e2e/functions.e2e.js +++ b/packages/functions/e2e/functions.e2e.js @@ -69,18 +69,34 @@ describe('functions()', function () { const response = await functionRunner(); response.data.should.equal('null'); }); + }); - it('useFunctionsEmulator', async function () { - const region = 'europe-west2'; - const fnName = 'invertaseReactNativeFirebaseFunctionsEmulator'; + describe('emulator', function () { + it('configures functions emulator via deprecated method with no port', async function () { + const region = 'us-central1'; + const fnName = 'helloWorld'; const functions = firebase.app().functions(region); + functions.useFunctionsEmulator('http://localhost'); + const response = await functions.httpsCallable(fnName)(); + response.data.should.equal('Hello from Firebase!'); + }); - functions.useFunctionsEmulator('http://api.rnfirebase.io'); - + it('configures functions emulator via deprecated method with port', async function () { + const region = 'us-central1'; + const fnName = 'helloWorld'; + const functions = firebase.app().functions(region); + functions.useFunctionsEmulator('http://localhost:5001'); const response = await functions.httpsCallable(fnName)(); + response.data.should.equal('Hello from Firebase!'); + }); - response.data.region.should.equal(region); - response.data.fnName.should.equal(fnName); + it('configures functions emulator', async function () { + const region = 'us-central1'; + const fnName = 'helloWorld'; + const functions = firebase.app().functions(region); + functions.useEmulator('localhost', 5001); + const response = await functions.httpsCallable(fnName)(); + response.data.should.equal('Hello from Firebase!'); }); }); diff --git a/packages/functions/ios/RNFBFunctions/RNFBFunctionsModule.m b/packages/functions/ios/RNFBFunctions/RNFBFunctionsModule.m index 261dfdf5ed..728d763047 100644 --- a/packages/functions/ios/RNFBFunctions/RNFBFunctionsModule.m +++ b/packages/functions/ios/RNFBFunctions/RNFBFunctionsModule.m @@ -32,8 +32,9 @@ @implementation RNFBFunctionsModule RCT_EXPORT_METHOD(httpsCallable : (FIRApp *)firebaseApp customUrlOrRegion - : (NSString *)customUrlOrRegion origin - : (NSString *)origin name + : (NSString *)customUrlOrRegion host + : (NSString *)host port + : (NSNumber *_Nonnull)port name : (NSString *)name wrapper : (NSDictionary *)wrapper options : (NSDictionary *)options resolver @@ -45,8 +46,8 @@ @implementation RNFBFunctionsModule ? [FIRFunctions functionsForApp:firebaseApp customDomain:customUrlOrRegion] : [FIRFunctions functionsForApp:firebaseApp region:customUrlOrRegion]; - if (origin != nil) { - [functions useFunctionsEmulatorOrigin:origin]; + if (host != nil) { + [functions useEmulatorWithHost:host port:[port intValue]]; } FIRHTTPSCallable *callable = [functions HTTPSCallableWithName:name]; diff --git a/packages/functions/lib/index.d.ts b/packages/functions/lib/index.d.ts index 1884bba375..4b4cac6817 100644 --- a/packages/functions/lib/index.d.ts +++ b/packages/functions/lib/index.d.ts @@ -356,9 +356,33 @@ export namespace FirebaseFunctionsTypes { * If you want to use the emulator on a real android device, you will need to specify the actual host * computer IP address. * + * @deprecated prefer useEmulator instead * @param origin url of the local emulator started via firebase tools "http://localhost:5001" */ useFunctionsEmulator(origin: string): void; + + /** + * Changes this instance to point to a Cloud Functions emulator running locally. + * + * See https://firebase.google.com/docs/functions/local-emulator + * + * #### Example + * + * ```js + * if (__DEV__) { + * firebase.functions().useEmulator('localhost', 5001); + * } + * ``` + * + * Note: on android, hosts 'localhost' and '127.0.0.1' are automatically remapped to '10.0.2.2' (the + * "host" computer IP address for android emulators) to make the standard development experience easy. + * If you want to use the emulator on a real android device, you will need to specify the actual host + * computer IP address. + * + * @param host hostname of the local emulator started via firebase tools, ex. "localhost" + * @param port port of the local emulator started via firebase tools, ex. 5001 + */ + useEmulator(host: string, port: number): void; } } diff --git a/packages/functions/lib/index.js b/packages/functions/lib/index.js index a27f1b1236..0b714a17ba 100644 --- a/packages/functions/lib/index.js +++ b/packages/functions/lib/index.js @@ -56,7 +56,8 @@ class FirebaseFunctionsModule extends FirebaseModule { constructor(...args) { super(...args); this._customUrlOrRegion = this._customUrlOrRegion || 'us-central1'; - this._useFunctionsEmulatorOrigin = null; + this._useFunctionsEmulatorHost = null; + this._useFunctionsEmulatorPort = -1; } httpsCallable(name, options = {}) { @@ -70,7 +71,8 @@ class FirebaseFunctionsModule extends FirebaseModule { return data => { const nativePromise = this.native.httpsCallable( - this._useFunctionsEmulatorOrigin, + this._useFunctionsEmulatorHost, + this._useFunctionsEmulatorPort, name, { data, @@ -92,27 +94,41 @@ class FirebaseFunctionsModule extends FirebaseModule { } useFunctionsEmulator(origin) { - let _origin = origin; + [_, host, port] = /https?\:.*\/\/([^:]+):?(\d+)?/.exec(origin); + if (!port) { + port = 5001; + } + this.useEmulator(host, parseInt(port)); + } + + useEmulator(host, port) { + if (!isNumber(port)) { + throw new Error('useEmulator port parameter must be a number'); + } + + let _host = host; + const androidBypassEmulatorUrlRemap = typeof this.firebaseJson.android_bypass_emulator_url_remap === 'boolean' && this.firebaseJson.android_bypass_emulator_url_remap; - if (!androidBypassEmulatorUrlRemap && isAndroid && _origin) { - if (_origin.startsWith('http://localhost')) { - _origin = _origin.replace('http://localhost', 'http://10.0.2.2'); + if (!androidBypassEmulatorUrlRemap && isAndroid && _host) { + if (_host.startsWith('localhost')) { + _host = _host.replace('localhost', '10.0.2.2'); // eslint-disable-next-line no-console console.log( 'Mapping functions host "localhost" to "10.0.2.2" for android emulators. Use real IP on real devices. You can bypass this behaviour with "android_bypass_emulator_url_remap" flag.', ); } - if (_origin.startsWith('http://127.0.0.1')) { - _origin = _origin.replace('http://127.0.0.1', 'http://10.0.2.2'); + if (_host.startsWith('127.0.0.1')) { + _host = _host.replace('127.0.0.1', '10.0.2.2'); // eslint-disable-next-line no-console console.log( 'Mapping functions host "127.0.0.1" to "10.0.2.2" for android emulators. Use real IP on real devices. You can bypass this behaviour with "android_bypass_emulator_url_remap" flag.', ); } } - this._useFunctionsEmulatorOrigin = _origin || null; + this._useFunctionsEmulatorHost = _host || null; + this._useFunctionsEmulatorPort = port || -1; } } From 287f0db971b3406ad29486a0254d52d4a1c83481 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 15:26:51 -0500 Subject: [PATCH 03/12] chore(messaging, lint): fix incompatible pointer types warning --- .../ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m index f6bde5c07a..188f38ea72 100644 --- a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m +++ b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m @@ -157,7 +157,7 @@ - (void)application_onDidEnterForeground { RCTRootView *rctRootView = (RCTRootView *)[UIApplication sharedApplication].delegate.window.rootViewController.view; - if (rctRootView.appProperties != nil && rctRootView.appProperties[@"isHeadless"] == @(YES)) { + if (rctRootView.appProperties != nil && [rctRootView.appProperties[@"isHeadless"] isEqual: @(YES)]) { NSMutableDictionary *appPropertiesDict = [rctRootView.appProperties mutableCopy]; isHeadless = NO; if ([appPropertiesDict objectForKey:@"isHeadless"] != nil && From 523dbcaa834f5d7bf3a7997ddcfedaecb70b2a90 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 15:27:24 -0500 Subject: [PATCH 04/12] chore(messaging, lint): fix nullability annotations --- .../ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.h | 2 +- packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.h b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.h index 8e27653057..f1608cf3ee 100644 --- a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.h +++ b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.h @@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN @interface RNFBMessagingUNUserNotificationCenter : NSObject -@property NSDictionary *initialNotification; +@property NSDictionary *_Nullable initialNotification; @property BOOL didOpenSettingsForNotification; @property(nonatomic, nullable, weak) id originalDelegate; diff --git a/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h b/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h index 9b88a1c526..411596f590 100644 --- a/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h +++ b/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h @@ -19,6 +19,6 @@ #import @interface RNFBMessagingModule : NSObject -+ (NSDictionary *)addCustomPropsToUserProps:(NSDictionary *_Nullable)userProps ++ (NSDictionary *_Nonnull)addCustomPropsToUserProps:(NSDictionary *_Nullable)userProps withLaunchOptions:(NSDictionary *_Nullable)launchOptions; @end From da0143e01d27b8645f3cb89c5bced6fadef080a0 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 15:27:45 -0500 Subject: [PATCH 05/12] chore(storage, lint): remove unimplemented APIs from header these APIs moved to a different object and are no longer implemented here --- packages/storage/ios/RNFBStorage/RNFBStorageCommon.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.h b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.h index 50b5369881..3761f9ef0c 100644 --- a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.h +++ b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.h @@ -19,16 +19,10 @@ @interface RNFBStorageCommon : NSObject -+ (BOOL)isRemoteAsset:(NSString *)localFilePath; - -+ (BOOL)unused_isHeic:(NSString *)localFilePath; - + (NSDictionary *)metadataToDict:(FIRStorageMetadata *)metadata; + (NSDictionary *)listResultToDict:(FIRStorageListResult *)listResult; -+ (PHAsset *)fetchAssetForPath:(NSString *)localFilePath; - + (NSString *)utiToMimeType:(NSString *)dataUTI; + (NSURL *)createTempFileUrl; From fdd45a40cb16af66ca32d7502ec971c6aa87afc2 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 15:28:37 -0500 Subject: [PATCH 06/12] chore(storage, lint): use strongly typed unknown explicitly fixes warning of incompatible types going into the switch --- packages/storage/ios/RNFBStorage/RNFBStorageCommon.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m index 8de56ce3d0..67807628ba 100644 --- a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m +++ b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m @@ -370,13 +370,12 @@ + (NSMutableDictionary *)getDownloadTaskAsDictionary:(FIRStorageTaskSnapshot *)t @"totalBytes" : @(task.progress.totalUnitCount) } mutableCopy]; } else { - return [@{@"bytesTransferred" : @(0), @"state" : [self getTaskStatus:nil], @"totalBytes" : @(0)} + return [@{@"bytesTransferred" : @(0), @"state" : [self getTaskStatus:FIRStorageTaskStatusUnknown], @"totalBytes" : @(0)} mutableCopy]; } } + (NSString *)getTaskStatus:(FIRStorageTaskStatus)status { - if (status == nil) return @"unknown"; if (status == FIRStorageTaskStatusResume || status == FIRStorageTaskStatusProgress) { return @"running"; } else if (status == FIRStorageTaskStatusPause) { From 5617bc742bfb678e924027cc69adfae64f993afc Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 16:45:14 -0500 Subject: [PATCH 07/12] fix(app, ios): use NSInteger not NSInteger* for prefs the native API for user prefs takes NSInteger, conform to that --- packages/app/ios/RNFBApp/RNFBPreferences.h | 4 ++-- packages/app/ios/RNFBApp/RNFBPreferences.m | 6 +++--- packages/database/ios/RNFBDatabase/RNFBDatabaseCommon.m | 4 ++-- packages/database/ios/RNFBDatabase/RNFBDatabaseModule.m | 5 +++-- packages/firestore/ios/RNFBFirestore/RNFBFirestoreCommon.m | 6 +++--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/packages/app/ios/RNFBApp/RNFBPreferences.h b/packages/app/ios/RNFBApp/RNFBPreferences.h index 0385e8d1b1..b81d4cd750 100644 --- a/packages/app/ios/RNFBApp/RNFBPreferences.h +++ b/packages/app/ios/RNFBApp/RNFBPreferences.h @@ -25,13 +25,13 @@ - (void)setBooleanValue:(NSString *)key boolValue:(BOOL)boolValue; -- (void)setIntegerValue:(NSString *)key integerValue:(NSInteger *)integerValue; +- (void)setIntegerValue:(NSString *)key integerValue:(NSInteger)integerValue; - (void)setStringValue:(NSString *)key stringValue:(NSString *)stringValue; - (NSString *)getStringValue:(NSString *)key defaultValue:(NSString *)defaultValue; -- (NSInteger *)getIntegerValue:(NSString *)key defaultValue:(NSInteger *)defaultValue; +- (NSInteger)getIntegerValue:(NSString *)key defaultValue:(NSInteger)defaultValue; - (NSDictionary *)getAll; diff --git a/packages/app/ios/RNFBApp/RNFBPreferences.m b/packages/app/ios/RNFBApp/RNFBPreferences.m index ac733fadbf..11268c217d 100644 --- a/packages/app/ios/RNFBApp/RNFBPreferences.m +++ b/packages/app/ios/RNFBApp/RNFBPreferences.m @@ -55,14 +55,14 @@ - (void)setBooleanValue:(NSString *)key boolValue:(BOOL)boolValue { [_userDefaults synchronize]; } -- (void)setIntegerValue:(NSString *)key integerValue:(NSInteger *)integerValue { +- (void)setIntegerValue:(NSString *)key integerValue:(NSInteger)integerValue { [_userDefaults setInteger:(NSInteger)integerValue forKey:key]; [_userDefaults synchronize]; } -- (NSInteger *)getIntegerValue:(NSString *)key defaultValue:(NSInteger *)defaultValue { +- (NSInteger)getIntegerValue:(NSString *)key defaultValue:(NSInteger)defaultValue { if ([_userDefaults objectForKey:key] == nil) return defaultValue; - return (NSInteger *)[_userDefaults integerForKey:key]; + return [_userDefaults integerForKey:key]; } - (NSString *)getStringValue:(NSString *)key defaultValue:(NSString *)defaultValue { diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseCommon.m b/packages/database/ios/RNFBDatabase/RNFBDatabaseCommon.m index ed42970659..32845acd36 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseCommon.m +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseCommon.m @@ -85,8 +85,8 @@ + (void)setDatabaseConfig:(FIRDatabase *)firDatabase dbURL:(NSString *)dbURL { // Persistence cache size if ([preferences contains:DATABASE_PERSISTENCE_CACHE_SIZE]) { - NSInteger *cacheSizeBytes = [preferences getIntegerValue:DATABASE_PERSISTENCE_CACHE_SIZE - defaultValue:(NSInteger *)10000000]; + NSInteger cacheSizeBytes = [preferences getIntegerValue:DATABASE_PERSISTENCE_CACHE_SIZE + defaultValue:10000000]; [firDatabase setPersistenceCacheSizeBytes:(NSUInteger)cacheSizeBytes]; } diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseModule.m b/packages/database/ios/RNFBDatabase/RNFBDatabaseModule.m index 1f12831bbc..ab82f878b4 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseModule.m +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseModule.m @@ -76,8 +76,9 @@ - (dispatch_queue_t)methodQueue { RCT_EXPORT_METHOD(setPersistenceCacheSizeBytes : (FIRApp *)firebaseApp : (NSString *)dbURL - : (NSInteger *)bytes) { - [[RNFBPreferences shared] setIntegerValue:DATABASE_PERSISTENCE_CACHE_SIZE integerValue:bytes]; + : (NSNumber *_Nonnull)bytes) { + [[RNFBPreferences shared] setIntegerValue:DATABASE_PERSISTENCE_CACHE_SIZE + integerValue:[bytes intValue]]; } @end diff --git a/packages/firestore/ios/RNFBFirestore/RNFBFirestoreCommon.m b/packages/firestore/ios/RNFBFirestore/RNFBFirestoreCommon.m index b61fa5d77d..9a5aa19edf 100644 --- a/packages/firestore/ios/RNFBFirestore/RNFBFirestoreCommon.m +++ b/packages/firestore/ios/RNFBFirestore/RNFBFirestoreCommon.m @@ -66,14 +66,14 @@ + (void)setFirestoreSettings:(FIRFirestore *)firestore appName:(NSString *)appNa firestoreSettings.dispatchQueue = [self getFirestoreQueue]; NSString *cacheKey = [NSString stringWithFormat:@"%@_%@", FIRESTORE_CACHE_SIZE, appName]; - NSInteger *size = [preferences getIntegerValue:cacheKey defaultValue:0]; + NSInteger size = [preferences getIntegerValue:cacheKey defaultValue:0]; - if (size == (NSInteger *)-1) { + if (size == -1) { firestoreSettings.cacheSizeBytes = kFIRFirestoreCacheSizeUnlimited; } else if (size == 0) { firestoreSettings.cacheSizeBytes = firestore.settings.cacheSizeBytes; } else { - firestoreSettings.cacheSizeBytes = (int64_t)size; + firestoreSettings.cacheSizeBytes = size; } NSString *hostKey = [NSString stringWithFormat:@"%@_%@", FIRESTORE_HOST, appName]; From 5f3981072c680d16335bbbb58e924b3b6f42f79f Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 16:46:04 -0500 Subject: [PATCH 08/12] chore(auth, lint): add missing cases in auth switch --- packages/auth/ios/RNFBAuth/RNFBAuthModule.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/auth/ios/RNFBAuth/RNFBAuthModule.m b/packages/auth/ios/RNFBAuth/RNFBAuthModule.m index 60f5bbbafa..41bb09f96e 100644 --- a/packages/auth/ios/RNFBAuth/RNFBAuthModule.m +++ b/packages/auth/ios/RNFBAuth/RNFBAuthModule.m @@ -626,6 +626,11 @@ - (void)invalidate { case FIRActionCodeOperationEmailLink: actionType = @"EMAIL_SIGNIN"; break; + case FIRActionCodeOperationVerifyAndChangeEmail: + case FIRActionCodeOperationRevertSecondFactorAddition: + default: + actionType = @"ERROR"; + break; } NSMutableDictionary *data = [NSMutableDictionary dictionary]; From 18b513ac0a1132113d29e61de08a80f5399011f0 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 16:46:48 -0500 Subject: [PATCH 09/12] chore(database, lint): parameter naming cleanup --- packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.h | 2 +- packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.m | 4 ++-- packages/database/ios/RNFBDatabase/RNFBDatabaseQueryModule.m | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.h b/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.h index 8c64166bf0..7fc70cbb29 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.h +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.h @@ -29,7 +29,7 @@ - (BOOL)hasListeners; -- (void)addEventListener:(NSString *)eventRegistrationKey:(FIRDatabaseHandle)listener; +- (void)addEventListener:(NSString *)eventRegistrationKey handle:(FIRDatabaseHandle)handle; - (void)removeEventListener:(NSString *)eventRegistrationKey; diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.m b/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.m index 25665413ad..7f8b631cf7 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.m +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseQuery.m @@ -112,8 +112,8 @@ - (id)getIdValue:(NSString *)value type:(NSString *)type { } } -- (void)addEventListener:(NSString *)eventRegistrationKey:(FIRDatabaseHandle)listener { - _listeners[eventRegistrationKey] = @(listener); +- (void)addEventListener:(NSString *)eventRegistrationKey handle:(FIRDatabaseHandle)handle { + _listeners[eventRegistrationKey] = @(handle); } - (void)removeEventListener:(NSString *)eventRegistrationKey { diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseQueryModule.m b/packages/database/ios/RNFBDatabase/RNFBDatabaseQueryModule.m index e414e75bc8..fbbfff24b8 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseQueryModule.m +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseQueryModule.m @@ -133,7 +133,7 @@ - (void)addEventListener:(RNFBDatabaseQuery *)databaseQuery FIRDatabaseHandle handle = [databaseQuery.query observeEventType:firDataEventType andPreviousSiblingKeyWithBlock:andPreviousSiblingKeyWithBlock withCancelBlock:errorBlock]; - [databaseQuery addEventListener:eventRegistrationKey:handle]; + [databaseQuery addEventListener:eventRegistrationKey handle:handle]; } } From 477e694455af2447213636b6bfdc56d30eef6dde Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 16:47:34 -0500 Subject: [PATCH 10/12] chore(ios): no implicit self usage --- .../ios/RNFBDatabase/RNFBDatabaseTransactionModule.m | 4 ++-- .../RNFBDynamicLinksAppDelegateInterceptor.m | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/database/ios/RNFBDatabase/RNFBDatabaseTransactionModule.m b/packages/database/ios/RNFBDatabase/RNFBDatabaseTransactionModule.m index d0ad7503ac..bd2f1ea614 100644 --- a/packages/database/ios/RNFBDatabase/RNFBDatabaseTransactionModule.m +++ b/packages/database/ios/RNFBDatabase/RNFBDatabaseTransactionModule.m @@ -69,7 +69,7 @@ - (id)init { [RNFBDatabaseCommon getReferenceForDatabase:firDatabase path:path]; id runTransactionBlock = ^FIRTransactionResult *(FIRMutableData *currentData) { - dispatch_barrier_async(_transactionQueue, ^{ + dispatch_barrier_async(self->_transactionQueue, ^{ [transactions setValue:transactionState forKey:[transactionId stringValue]]; [[RNFBRCTEventEmitter shared] @@ -94,7 +94,7 @@ - (id)init { BOOL abort = [transactionState valueForKey:@"abort"] || timedout; id value = [transactionState valueForKey:@"value"]; - dispatch_barrier_async(_transactionQueue, ^{ + dispatch_barrier_async(self->_transactionQueue, ^{ [transactions removeObjectForKey:[transactionId stringValue]]; }); diff --git a/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m b/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m index b2c8f4ae12..f3fde832d3 100644 --- a/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m +++ b/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m @@ -88,15 +88,17 @@ - (BOOL)application:(UIApplication *)application - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity - restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { + restorationHandler: + (void (^_Nonnull __strong)(NSArray> + *_Nullable __strong restorableObjects))restorationHandler { __block BOOL retried = NO; id completion = ^(FIRDynamicLink *_Nullable dynamicLink, NSError *_Nullable error) { if (!error && dynamicLink && dynamicLink.url) { - if (_initialLinkUrl == nil) { - _initialLinkUrl = dynamicLink.url.absoluteString; - _initialLinkMinimumAppVersion = dynamicLink.minimumAppVersion; - _initialLinkUtmParametersDictionary = dynamicLink.utmParametersDictionary; + if (self->_initialLinkUrl == nil) { + self->_initialLinkUrl = dynamicLink.url.absoluteString; + self->_initialLinkMinimumAppVersion = dynamicLink.minimumAppVersion; + self->_initialLinkUtmParametersDictionary = dynamicLink.utmParametersDictionary; } [[RNFBRCTEventEmitter shared] sendEventWithName:LINK_RECEIVED_EVENT From e5e8392fd0ad185b911602dd3c9a505b20033833 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 16:47:56 -0500 Subject: [PATCH 11/12] chore(ios): `yarn lint:ios:fix` --- .../RNFBDynamicLinksAppDelegateInterceptor.m | 2 +- .../ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m | 3 ++- packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h | 2 +- packages/storage/ios/RNFBStorage/RNFBStorageCommon.m | 7 +++++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m b/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m index f3fde832d3..95f9bf4250 100644 --- a/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m +++ b/packages/dynamic-links/ios/RNFBDynamicLinks/RNFBDynamicLinksAppDelegateInterceptor.m @@ -111,7 +111,7 @@ - (BOOL)application:(UIApplication *)application ? @{} : dynamicLink.utmParametersDictionary, }]; - } + }; // Per Apple Tech Support, a network failure could occur when returning from background on // iOS 12. https://github.com/AFNetworking/AFNetworking/issues/4279#issuecomment-447108981 So diff --git a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m index 188f38ea72..47fdc153ff 100644 --- a/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m +++ b/packages/messaging/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m @@ -157,7 +157,8 @@ - (void)application_onDidEnterForeground { RCTRootView *rctRootView = (RCTRootView *)[UIApplication sharedApplication].delegate.window.rootViewController.view; - if (rctRootView.appProperties != nil && [rctRootView.appProperties[@"isHeadless"] isEqual: @(YES)]) { + if (rctRootView.appProperties != nil && + [rctRootView.appProperties[@"isHeadless"] isEqual:@(YES)]) { NSMutableDictionary *appPropertiesDict = [rctRootView.appProperties mutableCopy]; isHeadless = NO; if ([appPropertiesDict objectForKey:@"isHeadless"] != nil && diff --git a/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h b/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h index 411596f590..369ec43632 100644 --- a/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h +++ b/packages/messaging/ios/RNFBMessaging/RNFBMessagingModule.h @@ -20,5 +20,5 @@ @interface RNFBMessagingModule : NSObject + (NSDictionary *_Nonnull)addCustomPropsToUserProps:(NSDictionary *_Nullable)userProps - withLaunchOptions:(NSDictionary *_Nullable)launchOptions; + withLaunchOptions:(NSDictionary *_Nullable)launchOptions; @end diff --git a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m index 67807628ba..7b0471957d 100644 --- a/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m +++ b/packages/storage/ios/RNFBStorage/RNFBStorageCommon.m @@ -370,8 +370,11 @@ + (NSMutableDictionary *)getDownloadTaskAsDictionary:(FIRStorageTaskSnapshot *)t @"totalBytes" : @(task.progress.totalUnitCount) } mutableCopy]; } else { - return [@{@"bytesTransferred" : @(0), @"state" : [self getTaskStatus:FIRStorageTaskStatusUnknown], @"totalBytes" : @(0)} - mutableCopy]; + return [@{ + @"bytesTransferred" : @(0), + @"state" : [self getTaskStatus:FIRStorageTaskStatusUnknown], + @"totalBytes" : @(0) + } mutableCopy]; } } From 57d59d70746e2fd089eeaba341740c32c71f0318 Mon Sep 17 00:00:00 2001 From: Mike Hardy Date: Wed, 9 Feb 2022 17:01:49 -0500 Subject: [PATCH 12/12] test(ios): commit current Podfile.lock --- tests/ios/Podfile.lock | 76 +++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/tests/ios/Podfile.lock b/tests/ios/Podfile.lock index 83fcb311e5..915fa9404f 100644 --- a/tests/ios/Podfile.lock +++ b/tests/ios/Podfile.lock @@ -403,7 +403,7 @@ PODS: - Firebase/Storage (8.11.0): - Firebase/CoreOnly - FirebaseStorage (~> 8.11.0) - - FirebaseABTesting (8.11.0): + - FirebaseABTesting (8.12.0): - FirebaseCore (~> 8.0) - FirebaseAnalytics (8.11.0): - FirebaseAnalytics/AdIdSupport (= 8.11.0) @@ -442,7 +442,7 @@ PODS: - FirebaseCoreDiagnostics (~> 8.0) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/Logger (~> 7.7) - - FirebaseCoreDiagnostics (8.11.0): + - FirebaseCoreDiagnostics (8.12.0): - GoogleDataTransport (~> 9.1) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/Logger (~> 7.7) @@ -856,70 +856,70 @@ PODS: - React-jsi (= 0.67.2) - React-logger (= 0.67.2) - React-perflogger (= 0.67.2) - - RNFBAnalytics (14.3.0): + - RNFBAnalytics (14.3.1): - Firebase/Analytics (= 8.11.0) - React-Core - RNFBApp - - RNFBApp (14.3.0): + - RNFBApp (14.3.1): - Firebase/CoreOnly (= 8.11.0) - React-Core - - RNFBAppCheck (14.3.0): + - RNFBAppCheck (14.3.1): - Firebase/AppCheck (= 8.11.0) - React-Core - RNFBApp - - RNFBAppDistribution (14.3.0): + - RNFBAppDistribution (14.3.1): - Firebase/AppDistribution (= 8.11.0) - React-Core - RNFBApp - - RNFBAuth (14.3.0): + - RNFBAuth (14.3.1): - Firebase/Auth (= 8.11.0) - React-Core - RNFBApp - - RNFBCrashlytics (14.3.0): + - RNFBCrashlytics (14.3.1): - Firebase/Crashlytics (= 8.11.0) - React-Core - RNFBApp - - RNFBDatabase (14.3.0): + - RNFBDatabase (14.3.1): - Firebase/Database (= 8.11.0) - React-Core - RNFBApp - - RNFBDynamicLinks (14.3.0): + - RNFBDynamicLinks (14.3.1): - Firebase/DynamicLinks (= 8.11.0) - GoogleUtilities/AppDelegateSwizzler - React-Core - RNFBApp - - RNFBFirestore (14.3.0): + - RNFBFirestore (14.3.1): - Firebase/Firestore (= 8.11.0) - React-Core - RNFBApp - - RNFBFunctions (14.3.0): + - RNFBFunctions (14.3.1): - Firebase/Functions (= 8.11.0) - React-Core - RNFBApp - - RNFBInAppMessaging (14.3.0): + - RNFBInAppMessaging (14.3.1): - Firebase/InAppMessaging (= 8.11.0) - React-Core - RNFBApp - - RNFBInstallations (14.3.0): + - RNFBInstallations (14.3.1): - Firebase/Installations (= 8.11.0) - React-Core - RNFBApp - - RNFBMessaging (14.3.0): + - RNFBMessaging (14.3.1): - Firebase/Messaging (= 8.11.0) - React-Core - RNFBApp - - RNFBML (14.3.0): + - RNFBML (14.3.1): - React-Core - RNFBApp - - RNFBPerf (14.3.0): + - RNFBPerf (14.3.1): - Firebase/Performance (= 8.11.0) - React-Core - RNFBApp - - RNFBRemoteConfig (14.3.0): + - RNFBRemoteConfig (14.3.1): - Firebase/RemoteConfig (= 8.11.0) - React-Core - RNFBApp - - RNFBStorage (14.3.0): + - RNFBStorage (14.3.1): - Firebase/Storage (= 8.11.0) - React-Core - RNFBApp @@ -1117,13 +1117,13 @@ SPEC CHECKSUMS: FBLazyVector: 244195e30d63d7f564c55da4410b9a24e8fbceaa FBReactNativeSpec: c94002c1d93da3658f4d5119c6994d19961e3d52 Firebase: 44dd9724c84df18b486639e874f31436eaa9a20c - FirebaseABTesting: aac00a5472250a45f1462675792030e44df025c7 + FirebaseABTesting: 1b05c92327b3f0a9545cea3bab4d93e82550e29b FirebaseAnalytics: 4e4b13031034e6561ed3bd1d47b6fdabbd6487c6 FirebaseAppCheck: 533dc5089466b73349aa63ffdf468a387a67fd26 FirebaseAppDistribution: 48e14ff829eb5bb6209649a806a7624fc3f143f8 FirebaseAuth: d96d73aba85d192d7a7aa0b86dd6d7f8ec170b4b FirebaseCore: 2f4f85b453cc8fea4bb2b37e370007d2bcafe3f0 - FirebaseCoreDiagnostics: 64d9709d804a6c25bd77841371c1fcfd909d5601 + FirebaseCoreDiagnostics: 3b40dfadef5b90433a60ae01f01e90fe87aa76aa FirebaseCrashlytics: 62268addefae79601057818156e8bc69d71fee41 FirebaseDatabase: ff9b4c7bee14d9f561f26c64a28ac083989f03d5 FirebaseDynamicLinks: f506c83eb7eba0f9861f84cd6b65c38b3bd5ff6f @@ -1171,23 +1171,23 @@ SPEC CHECKSUMS: React-RCTVibration: 99c7f67fba7a5ade46e98e870c6ff2444484f995 React-runtimeexecutor: 2450b43df7ffe8e805a0b3dcb2abd4282f1f1836 ReactCommon: d98c6c96b567f9b3a15f9fd4cc302c1eda8e3cf2 - RNFBAnalytics: 5e84004d8e64bd58bd185a324610fb433a103ca0 - RNFBApp: 16bdf8b75b84631513da3d5f5e2520a436ec9b29 - RNFBAppCheck: 5432a5aec00de2807aba195702a23d8c8eb12386 - RNFBAppDistribution: 83d1260fc4cf2da900ebd9b3928d164bec21974f - RNFBAuth: 7eb50d60c82b4a59018b0c7a1d4afdd1250eff74 - RNFBCrashlytics: eb4ea7e8ac4c9d9c6fb179370b3ac1bbc53ab69b - RNFBDatabase: 225f0ac57d2aedfec3221d8751b49670bc779b16 - RNFBDynamicLinks: fa716828611f31e5da251225b1f22bb5667c0796 - RNFBFirestore: 431b62b5751a8131d099cf2d094e16facaea455f - RNFBFunctions: 6edd867deda52f7e43cc5a3d69b2720aa6ce7e05 - RNFBInAppMessaging: bb8766d9e57cce1d2e1ae0d3928a46a62c42bfc0 - RNFBInstallations: 13accf200f3fc0fc5d2fb48ff12075e99858c84f - RNFBMessaging: ee73f1b9d0ea6781f32251401fc884549fd0bc44 - RNFBML: a5e96c7912a7a7ac5200a590de350446484bf9e0 - RNFBPerf: 50ae527679d837a6b0d4eed466935a99ec8b5bbb - RNFBRemoteConfig: e2a73b279da8b6f794977c7c3aeb6963a23f4e25 - RNFBStorage: 2725730a381b228385959286894d469b861b5be3 + RNFBAnalytics: 3f724e5663731ba646e606ded69d7fc305bc037e + RNFBApp: 227358730432d119d9b76ed33eba9e2306a9d85a + RNFBAppCheck: 66be3a9c5aa3f43d3e7bd438cdac2a8c166dfd1f + RNFBAppDistribution: b57bc8274a6fbe0c412f5ce681a2267b840f5b0e + RNFBAuth: 59bc007b0766b773f91456969d01b4cb65bab67b + RNFBCrashlytics: a0f2e2764013767f0fa0c18ab044ded2994ad015 + RNFBDatabase: 3153bc48dfa247c772226e94ed40ac48d580ea49 + RNFBDynamicLinks: 314693f236a706cf90250bc77d6a71e4bcd8a025 + RNFBFirestore: 1497909ed965c98a73501411d752b579768ff5f1 + RNFBFunctions: cb9fe870de690dc39491a94dcb4b1dcc879dc374 + RNFBInAppMessaging: 49f4ea04b6699ec1871b3e0fe8b648f227c26d8f + RNFBInstallations: c841b6b629f663eb63f63c325d54aa4c081d0a4a + RNFBMessaging: a5b301177f6d7b9af6fa2228a86ee133cc471009 + RNFBML: 2a65ae84a77450960dfc39acfc6671a842af9cee + RNFBPerf: 7ca58e6f84f7e081b4f90af16fd67f3cd1761cdf + RNFBRemoteConfig: 64d3a17b53c865cdb6a7af5fe28084d1b964a9fb + RNFBStorage: 48e118236e2ce3d9f1d6de65175e79a1b81177e2 Yoga: 9b6696970c3289e8dea34b3eda93f23e61fb8121 PODFILE CHECKSUM: a4854589561b42da6b3b0726136a46ac6aef3ebd