@react-native-firebase/app 26.3.3 → 26.4.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/RNFBApp.podspec +1 -1
  3. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.java +31 -0
  4. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.java +150 -0
  5. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +27 -3
  6. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +3 -1
  7. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
  8. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +3 -2
  9. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +5 -3
  10. package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +26 -1
  11. package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.java +275 -0
  12. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +1 -1
  13. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.java +108 -0
  14. package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.java +97 -0
  15. package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +0 -2
  16. package/dist/module/common/Base64.js +13 -21
  17. package/dist/module/common/Base64.js.map +1 -1
  18. package/dist/module/common/index.js +17 -9
  19. package/dist/module/common/index.js.map +1 -1
  20. package/dist/module/internal/asyncStorage.js +7 -11
  21. package/dist/module/internal/asyncStorage.js.map +1 -1
  22. package/dist/module/internal/logger.js +44 -40
  23. package/dist/module/internal/logger.js.map +1 -1
  24. package/dist/module/internal/nativeModuleAndroidIos.js +2 -29
  25. package/dist/module/internal/nativeModuleAndroidIos.js.map +1 -1
  26. package/dist/module/internal/nativeModuleDebug.js +74 -0
  27. package/dist/module/internal/nativeModuleDebug.js.map +1 -0
  28. package/dist/module/internal/nativeModuleWeb.js +9 -29
  29. package/dist/module/internal/nativeModuleWeb.js.map +1 -1
  30. package/dist/module/internal/registry/app.js +1 -1
  31. package/dist/module/internal/registry/app.js.map +1 -1
  32. package/dist/module/internal/registry/modular.js +2 -2
  33. package/dist/module/internal/registry/modular.js.map +1 -1
  34. package/dist/module/internal/registry/nativeModule.js +3 -3
  35. package/dist/module/internal/registry/nativeModule.js.map +1 -1
  36. package/dist/module/internal/web/RNFBAppModule.js +16 -15
  37. package/dist/module/internal/web/RNFBAppModule.js.map +1 -1
  38. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  39. package/dist/module/internal/web/memidb/lib/FakeEventTarget.js.map +1 -1
  40. package/dist/module/version.js +1 -1
  41. package/dist/typescript/lib/common/Base64.d.ts.map +1 -1
  42. package/dist/typescript/lib/common/index.d.ts.map +1 -1
  43. package/dist/typescript/lib/internal/asyncStorage.d.ts.map +1 -1
  44. package/dist/typescript/lib/internal/logger.d.ts.map +1 -1
  45. package/dist/typescript/lib/internal/nativeModuleAndroidIos.d.ts.map +1 -1
  46. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts +2 -0
  47. package/dist/typescript/lib/internal/nativeModuleDebug.d.ts.map +1 -0
  48. package/dist/typescript/lib/internal/nativeModuleWeb.d.ts.map +1 -1
  49. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts +7 -7
  50. package/dist/typescript/lib/internal/web/RNFBAppModule.d.ts.map +1 -1
  51. package/dist/typescript/lib/version.d.ts +1 -1
  52. package/firebase-schema.json +1 -1
  53. package/ios/RNFBApp/RNFBAppModule.mm +40 -14
  54. package/ios/RNFBApp/RNFBHandleMap.h +73 -0
  55. package/ios/RNFBApp/RNFBHandleMap.m +116 -0
  56. package/ios/RNFBApp/RNFBSharedUtils.m +3 -2
  57. package/ios/RNFBApp/RNFBVersion.m +1 -1
  58. package/ios/RNFBApp.xcodeproj/project.pbxproj +6 -0
  59. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +237 -0
  60. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAppUnitTests.xcscheme +69 -0
  61. package/ios/RNFBAppUnitTests/RNFBHandleMapTests.m +238 -0
  62. package/lib/common/Base64.ts +10 -16
  63. package/lib/common/index.ts +20 -9
  64. package/lib/internal/asyncStorage.ts +7 -11
  65. package/lib/internal/logger.ts +53 -43
  66. package/lib/internal/nativeModuleAndroidIos.ts +2 -40
  67. package/lib/internal/nativeModuleDebug.ts +97 -0
  68. package/lib/internal/nativeModuleWeb.ts +10 -40
  69. package/lib/internal/registry/app.ts +1 -1
  70. package/lib/internal/registry/modular.ts +2 -2
  71. package/lib/internal/registry/nativeModule.ts +3 -3
  72. package/lib/internal/web/RNFBAppModule.ts +16 -15
  73. package/lib/internal/web/memidb/lib/FakeEventTarget.js +3 -1
  74. package/lib/version.ts +1 -1
  75. package/package.json +3 -2
  76. package/plugin/build/ios/appDelegate.js +18 -8
  77. package/plugin/src/ios/appDelegate.ts +44 -14
@@ -1,2 +1,2 @@
1
- export declare const version = "26.3.3";
1
+ export declare const version = "26.4.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -120,7 +120,7 @@
120
120
  "type": "array"
121
121
  },
122
122
  "messaging_max_stored_notifications": {
123
- "description": "Controls how many notifications are retained on-device for background storage. Configuration priority order is SharedPreferences -> firebase.json -> AndroidManifest. Default 100. Very small values may cause unwanted excessive deletions, large values or large message contents run the risk of OutOfMemoryErrors.",
123
+ "description": "Controls how many notifications are retained on-device for background storage. Values less than or equal to zero disable storage and clear previously retained notifications. Configuration priority order is SharedPreferences -> firebase.json -> AndroidManifest. Default 100. Very small positive values may cause unwanted excessive deletions, large values or large message contents run the risk of OutOfMemoryErrors.",
124
124
  "type": "number"
125
125
  },
126
126
  "perf_auto_collection_enabled": {
@@ -41,8 +41,13 @@
41
41
  #endif
42
42
 
43
43
  @interface RNFBAppModule () <NativeRNFBTurboAppSpec, RCTInvalidating>
44
+
45
+ + (void)setCustomDomain:(nullable NSString *)authDomain forAppName:(NSString *)appName;
46
+
44
47
  @end
45
48
 
49
+ static NSMutableDictionary<NSString *, NSString *> *customAuthDomains;
50
+
46
51
  @implementation RNFBAppModule
47
52
 
48
53
  #pragma mark -
@@ -200,6 +205,9 @@ RCT_EXPORT_MODULE(NativeRNFBTurboApp)
200
205
  RCTUnsafeExecuteOnMainQueueSync(^{
201
206
  FIRApp *firApp;
202
207
  NSString *appName = [appConfig valueForKey:@"name"];
208
+ NSString *authDomain = [options valueForKey:@"authDomain"];
209
+ NSString *jsAppName = (appName.length > 0) ? appName : DEFAULT_APP_DISPLAY_NAME;
210
+ BOOL isDefaultApp = !appName || [appName isEqualToString:DEFAULT_APP_DISPLAY_NAME];
203
211
 
204
212
  NSString *appId = [options valueForKey:@"appId"];
205
213
  NSString *messagingSenderId = [options valueForKey:@"messagingSenderId"];
@@ -223,17 +231,16 @@ RCT_EXPORT_MODULE(NativeRNFBTurboApp)
223
231
  firOptions.appGroupID = [options valueForKey:@"appGroupId"];
224
232
  }
225
233
 
226
- if ([options valueForKey:@"authDomain"] != nil) {
227
- DLog(@"RNFBAuth app: %@ customAuthDomain: %@", appName, [options valueForKey:@"authDomain"]);
228
- if (customAuthDomains == nil) {
229
- customAuthDomains = [[NSMutableDictionary alloc] init];
230
- }
231
- customAuthDomains[appName] = [options valueForKey:@"authDomain"];
232
- }
233
234
  @try {
234
- if (!appName || [appName isEqualToString:DEFAULT_APP_DISPLAY_NAME]) {
235
- [FIRApp configureWithOptions:firOptions];
236
- firApp = [FIRApp defaultApp];
235
+ if (isDefaultApp) {
236
+ // Native bootstrap often already called [FIRApp configure]. Still accept a JS/bridge
237
+ // initializeApp for the default app so customAuthDomains can be keyed by [DEFAULT].
238
+ if ([FIRApp defaultApp] != nil) {
239
+ firApp = [FIRApp defaultApp];
240
+ } else {
241
+ [FIRApp configureWithOptions:firOptions];
242
+ firApp = [FIRApp defaultApp];
243
+ }
237
244
  } else {
238
245
  [FIRApp configureWithName:appName options:firOptions];
239
246
  firApp = [FIRApp appNamed:appName];
@@ -242,6 +249,9 @@ RCT_EXPORT_MODULE(NativeRNFBTurboApp)
242
249
  return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
243
250
  }
244
251
 
252
+ // Store under the JS bridge app name ([DEFAULT]), never native __FIRAPP_DEFAULT.
253
+ [RNFBAppModule setCustomDomain:authDomain forAppName:jsAppName];
254
+
245
255
  firApp.dataCollectionDefaultEnabled =
246
256
  (BOOL)[appConfig valueForKey:@"automaticDataCollectionEnabled"];
247
257
 
@@ -249,11 +259,25 @@ RCT_EXPORT_MODULE(NativeRNFBTurboApp)
249
259
  });
250
260
  }
251
261
 
252
- static NSMutableDictionary<NSString *, NSString *> *customAuthDomains;
253
-
254
262
  + (NSString *)getCustomDomain:(NSString *)appName {
255
- DLog(@"authDomains: %@", customAuthDomains);
256
- return customAuthDomains[appName];
263
+ @synchronized(self) {
264
+ DLog(@"authDomains: %@", customAuthDomains);
265
+ return customAuthDomains[appName];
266
+ }
267
+ }
268
+
269
+ + (void)setCustomDomain:(nullable NSString *)authDomain forAppName:(NSString *)appName {
270
+ @synchronized(self) {
271
+ if (authDomain != nil) {
272
+ DLog(@"RNFBAuth app: %@ customAuthDomain: %@", appName, authDomain);
273
+ if (customAuthDomains == nil) {
274
+ customAuthDomains = [[NSMutableDictionary alloc] init];
275
+ }
276
+ customAuthDomains[appName] = authDomain;
277
+ } else {
278
+ [customAuthDomains removeObjectForKey:appName];
279
+ }
280
+ }
257
281
  }
258
282
 
259
283
  - (void)setLogLevel:(NSString *)logLevel {
@@ -288,10 +312,12 @@ static NSMutableDictionary<NSString *, NSString *> *customAuthDomains;
288
312
 
289
313
  [firApp deleteApp:^(BOOL success) {
290
314
  if (success) {
315
+ [RNFBAppModule setCustomDomain:nil forAppName:appName];
291
316
  resolve([NSNull null]);
292
317
  } else {
293
318
  [firApp deleteApp:^(BOOL success2) {
294
319
  if (success2) {
320
+ [RNFBAppModule setCustomDomain:nil forAppName:appName];
295
321
  resolve([NSNull null]);
296
322
  } else {
297
323
  reject(@"app/delete-app-failed", @"Failed to delete the specified app.", nil);
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ #import <Foundation/Foundation.h>
19
+
20
+ NS_ASSUME_NONNULL_BEGIN
21
+
22
+ FOUNDATION_EXPORT NSErrorDomain const RNFBHandleMapErrorDomain;
23
+
24
+ typedef NS_ERROR_ENUM(RNFBHandleMapErrorDomain, RNFBHandleMapErrorCode){
25
+ RNFBHandleMapErrorCollision = 1,
26
+ };
27
+
28
+ /**
29
+ * Thread-safe id → handle registry. The lock only moves pointers; this class never invokes methods
30
+ * on stored values (no SDK cancel/remove). Callers `take` or `takeAll`, then act on the returned
31
+ * object(s) outside the lock. Keys are typically NSNumber or NSString.
32
+ *
33
+ * `put` is unique: an occupied id fails with `RNFBHandleMapErrorCollision`. There is no upsert.
34
+ * Use `putIfAbsent` (first wins), `putIfAbsentOrSame` (first wins or same instance), or
35
+ * `putReplacing` (last wins) for atomic upsert.
36
+ *
37
+ * Do not lock on a `RNFBHandleMap` instance. This type uses a private lock object; callers that
38
+ * synchronize on the map can deadlock. Never `@synchronized(handleMap)` around these methods.
39
+ */
40
+ @interface RNFBHandleMap : NSObject
41
+
42
+ /// Registers `value` under `key`. Returns NO and sets `error` if `key` is already occupied.
43
+ - (BOOL)put:(id)key value:(id)value error:(NSError *_Nullable *_Nullable)error;
44
+
45
+ /// Stores `value` under `key` only when the key is free (first wins). Returns NO if occupied.
46
+ - (BOOL)putIfAbsent:(id)key value:(id)value;
47
+
48
+ /// Under one lock: stores when free, or YES when existing is the same instance (`==`). NO if
49
+ /// occupied by a different value.
50
+ - (BOOL)putIfAbsentOrSame:(id)key value:(id)value;
51
+
52
+ /// Atomically replaces the mapping for `key` (last wins). Returns the previous value, or nil.
53
+ - (nullable id)putReplacing:(id)key value:(id)value;
54
+
55
+ /// Peeks at the handle for `key` without removing it (for emit while still registered).
56
+ - (nullable id)get:(id)key;
57
+
58
+ /// Removes and returns the handle for `key`, or nil if absent.
59
+ - (nullable id)take:(id)key;
60
+
61
+ /// When `key` is mapped and `condition` returns YES for the handle, removes and returns it;
62
+ /// otherwise returns nil and leaves the map unchanged. Lookup, condition, and removal run under one
63
+ /// lock — use for check-and-take that must not race with concurrent `put` / `take` on the same key.
64
+ /// Keep `condition` lightweight (no SDK cancel/remove).
65
+ - (nullable id)takeIf:(id)key when:(BOOL (^)(id value))condition;
66
+
67
+ /// Snapshot of current values, then clear. Cancel/remove each returned object after this method
68
+ /// returns, not under this map's lock.
69
+ - (NSArray *)takeAll;
70
+
71
+ @end
72
+
73
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ #import "RNFBHandleMap.h"
19
+
20
+ NSErrorDomain const RNFBHandleMapErrorDomain = @"io.invertase.firebase.RNFBHandleMap";
21
+
22
+ @interface RNFBHandleMap ()
23
+ @property(nonatomic, strong) NSMutableDictionary *map;
24
+ @property(nonatomic, strong) NSObject *lock;
25
+ @end
26
+
27
+ @implementation RNFBHandleMap
28
+
29
+ - (instancetype)init {
30
+ self = [super init];
31
+ if (self) {
32
+ _map = [NSMutableDictionary dictionary];
33
+ _lock = [[NSObject alloc] init];
34
+ }
35
+ return self;
36
+ }
37
+
38
+ - (BOOL)put:(id)key value:(id)value error:(NSError **)error {
39
+ @synchronized(self.lock) {
40
+ if (self.map[key] != nil) {
41
+ if (error != nil) {
42
+ NSString *message = [NSString stringWithFormat:@"Handle id already registered: %@", key];
43
+ *error = [NSError errorWithDomain:RNFBHandleMapErrorDomain
44
+ code:RNFBHandleMapErrorCollision
45
+ userInfo:@{NSLocalizedDescriptionKey : message}];
46
+ }
47
+ return NO;
48
+ }
49
+ self.map[key] = value;
50
+ return YES;
51
+ }
52
+ }
53
+
54
+ - (BOOL)putIfAbsent:(id)key value:(id)value {
55
+ @synchronized(self.lock) {
56
+ if (self.map[key] != nil) {
57
+ return NO;
58
+ }
59
+ self.map[key] = value;
60
+ return YES;
61
+ }
62
+ }
63
+
64
+ - (BOOL)putIfAbsentOrSame:(id)key value:(id)value {
65
+ @synchronized(self.lock) {
66
+ id existing = self.map[key];
67
+ if (existing == nil) {
68
+ self.map[key] = value;
69
+ return YES;
70
+ }
71
+ return existing == value;
72
+ }
73
+ }
74
+
75
+ - (id)putReplacing:(id)key value:(id)value {
76
+ @synchronized(self.lock) {
77
+ id previous = self.map[key];
78
+ self.map[key] = value;
79
+ return previous;
80
+ }
81
+ }
82
+
83
+ - (id)get:(id)key {
84
+ @synchronized(self.lock) {
85
+ return self.map[key];
86
+ }
87
+ }
88
+
89
+ - (id)take:(id)key {
90
+ @synchronized(self.lock) {
91
+ id value = self.map[key];
92
+ [self.map removeObjectForKey:key];
93
+ return value;
94
+ }
95
+ }
96
+
97
+ - (id)takeIf:(id)key when:(BOOL (^)(id))condition {
98
+ @synchronized(self.lock) {
99
+ id value = self.map[key];
100
+ if (value != nil && condition(value)) {
101
+ [self.map removeObjectForKey:key];
102
+ return value;
103
+ }
104
+ return nil;
105
+ }
106
+ }
107
+
108
+ - (NSArray *)takeAll {
109
+ @synchronized(self.lock) {
110
+ NSArray *values = [self.map allValues];
111
+ [self.map removeAllObjects];
112
+ return values;
113
+ }
114
+ }
115
+
116
+ @end
@@ -64,8 +64,9 @@ static NSString *const RNFBErrorDomain = @"RNFBErrorDomain";
64
64
  // missing from android sdk - ios only:
65
65
  firAppOptions[@"clientId"] = firOptions.clientID;
66
66
  // not in FIROptions API but in JS SDK and project config JSON
67
- if ([RNFBAppModule getCustomDomain:name] != nil) {
68
- firAppOptions[@"authDomain"] = [RNFBAppModule getCustomDomain:name];
67
+ NSString *customAuthDomain = [RNFBAppModule getCustomDomain:name];
68
+ if (customAuthDomain != nil) {
69
+ firAppOptions[@"authDomain"] = customAuthDomain;
69
70
  }
70
71
 
71
72
  firAppDictionary[@"options"] = firAppOptions;
@@ -18,4 +18,4 @@
18
18
  #import <React/RCTVersion.h>
19
19
 
20
20
  // generated file - do not modify or commit
21
- NSString* const RNFBVersionString = @"26.3.3";
21
+ NSString* const RNFBVersionString = @"26.4.0";
@@ -18,6 +18,7 @@
18
18
  4D97BAD423042F2700077358 /* RNFBUtilsModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4D97BAD323042F2700077358 /* RNFBUtilsModule.mm */; };
19
19
  DAA1F28522FCF6AD00F4DEC1 /* RNFBVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA1F28422FCF6AD00F4DEC1 /* RNFBVersion.m */; };
20
20
  RNFB00001A2025011100000001 /* RNFBNullSentinelInterceptor.m in Sources */ = {isa = PBXBuildFile; fileRef = RNFB00001A2025011100000002 /* RNFBNullSentinelInterceptor.m */; };
21
+ RNFB00001A2026082000000001 /* RNFBHandleMap.m in Sources */ = {isa = PBXBuildFile; fileRef = RNFB00001A2026082000000002 /* RNFBHandleMap.m */; };
21
22
  /* End PBXBuildFile section */
22
23
 
23
24
  /* Begin PBXCopyFilesBuildPhase section */
@@ -56,6 +57,8 @@
56
57
  DAA1F28622FCF6C200F4DEC1 /* RNFBVersion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNFBVersion.h; sourceTree = "<group>"; };
57
58
  RNFB00001A2025011100000002 /* RNFBNullSentinelInterceptor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNFBNullSentinelInterceptor.m; sourceTree = "<group>"; };
58
59
  RNFB00001A2025011100000003 /* RNFBNullSentinelInterceptor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNFBNullSentinelInterceptor.h; sourceTree = "<group>"; };
60
+ RNFB00001A2026082000000002 /* RNFBHandleMap.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNFBHandleMap.m; sourceTree = "<group>"; };
61
+ RNFB00001A2026082000000003 /* RNFBHandleMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNFBHandleMap.h; sourceTree = "<group>"; };
59
62
  /* End PBXFileReference section */
60
63
 
61
64
  /* Begin PBXFrameworksBuildPhase section */
@@ -102,6 +105,8 @@
102
105
  4D97BAD323042F2700077358 /* RNFBUtilsModule.mm */,
103
106
  RNFB00001A2025011100000003 /* RNFBNullSentinelInterceptor.h */,
104
107
  RNFB00001A2025011100000002 /* RNFBNullSentinelInterceptor.m */,
108
+ RNFB00001A2026082000000003 /* RNFBHandleMap.h */,
109
+ RNFB00001A2026082000000002 /* RNFBHandleMap.m */,
105
110
  );
106
111
  path = RNFBApp;
107
112
  sourceTree = "<group>";
@@ -184,6 +189,7 @@
184
189
  2744B9A421F48A4F004F8E3F /* RCTConvert+FIROptions.m in Sources */,
185
190
  2748D8152236426300FC8DC8 /* RNFBJSON.m in Sources */,
186
191
  RNFB00001A2025011100000001 /* RNFBNullSentinelInterceptor.m in Sources */,
192
+ RNFB00001A2026082000000001 /* RNFBHandleMap.m in Sources */,
187
193
  );
188
194
  runOnlyForDeploymentPostprocessing = 0;
189
195
  };
@@ -0,0 +1,237 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 56;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ A1000000000000000000000A /* RNFBHandleMap.m in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000008 /* RNFBHandleMap.m */; };
11
+ A1000000000000000000000B /* RNFBHandleMapTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A10000000000000000000009 /* RNFBHandleMapTests.m */; };
12
+ A10000000000000000000015 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A10000000000000000000014 /* XCTest.framework */; };
13
+ /* End PBXBuildFile section */
14
+
15
+ /* Begin PBXFileReference section */
16
+ A10000000000000000000003 /* RNFBAppUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNFBAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
17
+ A10000000000000000000007 /* RNFBHandleMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNFBHandleMap.h; path = ../RNFBApp/RNFBHandleMap.h; sourceTree = SOURCE_ROOT; };
18
+ A10000000000000000000008 /* RNFBHandleMap.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RNFBHandleMap.m; path = ../RNFBApp/RNFBHandleMap.m; sourceTree = SOURCE_ROOT; };
19
+ A10000000000000000000009 /* RNFBHandleMapTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNFBHandleMapTests.m; sourceTree = "<group>"; };
20
+ A10000000000000000000014 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
21
+ /* End PBXFileReference section */
22
+
23
+ /* Begin PBXFrameworksBuildPhase section */
24
+ A1000000000000000000000D /* Frameworks */ = {
25
+ isa = PBXFrameworksBuildPhase;
26
+ buildActionMask = 2147483647;
27
+ files = (
28
+ A10000000000000000000015 /* XCTest.framework in Frameworks */,
29
+ );
30
+ runOnlyForDeploymentPostprocessing = 0;
31
+ };
32
+ /* End PBXFrameworksBuildPhase section */
33
+
34
+ /* Begin PBXGroup section */
35
+ A10000000000000000000004 = {
36
+ isa = PBXGroup;
37
+ children = (
38
+ A10000000000000000000006 /* Sources */,
39
+ A10000000000000000000005 /* Products */,
40
+ );
41
+ sourceTree = "<group>";
42
+ };
43
+ A10000000000000000000005 /* Products */ = {
44
+ isa = PBXGroup;
45
+ children = (
46
+ A10000000000000000000003 /* RNFBAppUnitTests.xctest */,
47
+ );
48
+ name = Products;
49
+ sourceTree = "<group>";
50
+ };
51
+ A10000000000000000000006 /* Sources */ = {
52
+ isa = PBXGroup;
53
+ children = (
54
+ A10000000000000000000007 /* RNFBHandleMap.h */,
55
+ A10000000000000000000008 /* RNFBHandleMap.m */,
56
+ A10000000000000000000009 /* RNFBHandleMapTests.m */,
57
+ );
58
+ name = Sources;
59
+ sourceTree = "<group>";
60
+ };
61
+ /* End PBXGroup section */
62
+
63
+ /* Begin PBXNativeTarget section */
64
+ A10000000000000000000002 /* RNFBAppUnitTests */ = {
65
+ isa = PBXNativeTarget;
66
+ buildConfigurationList = A10000000000000000000013 /* Build configuration list for PBXNativeTarget "RNFBAppUnitTests" */;
67
+ buildPhases = (
68
+ A1000000000000000000000C /* Sources */,
69
+ A1000000000000000000000D /* Frameworks */,
70
+ );
71
+ buildRules = (
72
+ );
73
+ dependencies = (
74
+ );
75
+ name = RNFBAppUnitTests;
76
+ productName = RNFBAppUnitTests;
77
+ productReference = A10000000000000000000003 /* RNFBAppUnitTests.xctest */;
78
+ productType = "com.apple.product-type.bundle.unit-test";
79
+ };
80
+ /* End PBXNativeTarget section */
81
+
82
+ /* Begin PBXProject section */
83
+ A10000000000000000000001 /* Project object */ = {
84
+ isa = PBXProject;
85
+ attributes = {
86
+ BuildIndependentTargetsInParallel = 1;
87
+ LastUpgradeCheck = 2600;
88
+ ORGANIZATIONNAME = Invertase;
89
+ TargetAttributes = {
90
+ A10000000000000000000002 = {
91
+ CreatedOnToolsVersion = 26.0;
92
+ };
93
+ };
94
+ };
95
+ buildConfigurationList = A10000000000000000000012 /* Build configuration list for PBXProject "RNFBAppUnitTests" */;
96
+ compatibilityVersion = "Xcode 14.0";
97
+ developmentRegion = en;
98
+ hasScannedForEncodings = 0;
99
+ knownRegions = (
100
+ en,
101
+ Base,
102
+ );
103
+ mainGroup = A10000000000000000000004;
104
+ productRefGroup = A10000000000000000000005 /* Products */;
105
+ projectDirPath = "";
106
+ projectRoot = "";
107
+ targets = (
108
+ A10000000000000000000002 /* RNFBAppUnitTests */,
109
+ );
110
+ };
111
+ /* End PBXProject section */
112
+
113
+ /* Begin PBXSourcesBuildPhase section */
114
+ A1000000000000000000000C /* Sources */ = {
115
+ isa = PBXSourcesBuildPhase;
116
+ buildActionMask = 2147483647;
117
+ files = (
118
+ A1000000000000000000000A /* RNFBHandleMap.m in Sources */,
119
+ A1000000000000000000000B /* RNFBHandleMapTests.m in Sources */,
120
+ );
121
+ runOnlyForDeploymentPostprocessing = 0;
122
+ };
123
+ /* End PBXSourcesBuildPhase section */
124
+
125
+ /* Begin XCBuildConfiguration section */
126
+ A1000000000000000000000E /* Debug */ = {
127
+ isa = XCBuildConfiguration;
128
+ buildSettings = {
129
+ ALWAYS_SEARCH_USER_PATHS = NO;
130
+ CLANG_ENABLE_MODULES = YES;
131
+ CLANG_ENABLE_OBJC_ARC = YES;
132
+ COPY_PHASE_STRIP = NO;
133
+ DEBUG_INFORMATION_FORMAT = dwarf;
134
+ ENABLE_TESTABILITY = YES;
135
+ GCC_C_LANGUAGE_STANDARD = gnu17;
136
+ GCC_DYNAMIC_NO_PIC = NO;
137
+ GCC_OPTIMIZATION_LEVEL = 0;
138
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
139
+ ONLY_ACTIVE_ARCH = YES;
140
+ SDKROOT = macosx;
141
+ SUPPORTED_PLATFORMS = macosx;
142
+ };
143
+ name = Debug;
144
+ };
145
+ A1000000000000000000000F /* Release */ = {
146
+ isa = XCBuildConfiguration;
147
+ buildSettings = {
148
+ ALWAYS_SEARCH_USER_PATHS = NO;
149
+ CLANG_ENABLE_MODULES = YES;
150
+ CLANG_ENABLE_OBJC_ARC = YES;
151
+ COPY_PHASE_STRIP = YES;
152
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
153
+ GCC_C_LANGUAGE_STANDARD = gnu17;
154
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
155
+ SDKROOT = macosx;
156
+ SUPPORTED_PLATFORMS = macosx;
157
+ };
158
+ name = Release;
159
+ };
160
+ A10000000000000000000010 /* Debug */ = {
161
+ isa = XCBuildConfiguration;
162
+ buildSettings = {
163
+ CLANG_ENABLE_CODE_COVERAGE = YES;
164
+ CODE_SIGNING_ALLOWED = NO;
165
+ CODE_SIGNING_REQUIRED = NO;
166
+ CODE_SIGN_IDENTITY = "-";
167
+ COMBINE_HIDPI_IMAGES = YES;
168
+ GENERATE_INFOPLIST_FILE = YES;
169
+ HEADER_SEARCH_PATHS = "$(SRCROOT)/../RNFBApp";
170
+ LD_RUNPATH_SEARCH_PATHS = (
171
+ "$(inherited)",
172
+ "@executable_path/../Frameworks",
173
+ "@loader_path/../Frameworks",
174
+ );
175
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
176
+ OTHER_CFLAGS = (
177
+ "-fprofile-instr-generate",
178
+ "-fcoverage-mapping",
179
+ );
180
+ OTHER_LDFLAGS = (
181
+ "-fprofile-instr-generate",
182
+ );
183
+ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.firebase.RNFBAppUnitTests;
184
+ PRODUCT_NAME = "$(TARGET_NAME)";
185
+ SDKROOT = macosx;
186
+ SUPPORTED_PLATFORMS = macosx;
187
+ };
188
+ name = Debug;
189
+ };
190
+ A10000000000000000000011 /* Release */ = {
191
+ isa = XCBuildConfiguration;
192
+ buildSettings = {
193
+ CLANG_ENABLE_CODE_COVERAGE = YES;
194
+ CODE_SIGNING_ALLOWED = NO;
195
+ CODE_SIGNING_REQUIRED = NO;
196
+ CODE_SIGN_IDENTITY = "-";
197
+ COMBINE_HIDPI_IMAGES = YES;
198
+ GENERATE_INFOPLIST_FILE = YES;
199
+ HEADER_SEARCH_PATHS = "$(SRCROOT)/../RNFBApp";
200
+ LD_RUNPATH_SEARCH_PATHS = (
201
+ "$(inherited)",
202
+ "@executable_path/../Frameworks",
203
+ "@loader_path/../Frameworks",
204
+ );
205
+ MACOSX_DEPLOYMENT_TARGET = 14.0;
206
+ PRODUCT_BUNDLE_IDENTIFIER = io.invertase.firebase.RNFBAppUnitTests;
207
+ PRODUCT_NAME = "$(TARGET_NAME)";
208
+ SDKROOT = macosx;
209
+ SUPPORTED_PLATFORMS = macosx;
210
+ };
211
+ name = Release;
212
+ };
213
+ /* End XCBuildConfiguration section */
214
+
215
+ /* Begin XCConfigurationList section */
216
+ A10000000000000000000012 /* Build configuration list for PBXProject "RNFBAppUnitTests" */ = {
217
+ isa = XCConfigurationList;
218
+ buildConfigurations = (
219
+ A1000000000000000000000E /* Debug */,
220
+ A1000000000000000000000F /* Release */,
221
+ );
222
+ defaultConfigurationIsVisible = 0;
223
+ defaultConfigurationName = Debug;
224
+ };
225
+ A10000000000000000000013 /* Build configuration list for PBXNativeTarget "RNFBAppUnitTests" */ = {
226
+ isa = XCConfigurationList;
227
+ buildConfigurations = (
228
+ A10000000000000000000010 /* Debug */,
229
+ A10000000000000000000011 /* Release */,
230
+ );
231
+ defaultConfigurationIsVisible = 0;
232
+ defaultConfigurationName = Debug;
233
+ };
234
+ /* End XCConfigurationList section */
235
+ };
236
+ rootObject = A10000000000000000000001 /* Project object */;
237
+ }
@@ -0,0 +1,69 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Scheme
3
+ LastUpgradeVersion = "2600"
4
+ version = "1.7">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "NO"
13
+ buildForArchiving = "NO"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "A10000000000000000000002"
18
+ BuildableName = "RNFBAppUnitTests.xctest"
19
+ BlueprintName = "RNFBAppUnitTests"
20
+ ReferencedContainer = "container:RNFBAppUnitTests.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES"
30
+ codeCoverageEnabled = "YES">
31
+ <Testables>
32
+ <TestableReference
33
+ skipped = "NO">
34
+ <BuildableReference
35
+ BuildableIdentifier = "primary"
36
+ BlueprintIdentifier = "A10000000000000000000002"
37
+ BuildableName = "RNFBAppUnitTests.xctest"
38
+ BlueprintName = "RNFBAppUnitTests"
39
+ ReferencedContainer = "container:RNFBAppUnitTests.xcodeproj">
40
+ </BuildableReference>
41
+ </TestableReference>
42
+ </Testables>
43
+ </TestAction>
44
+ <LaunchAction
45
+ buildConfiguration = "Debug"
46
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48
+ launchStyle = "0"
49
+ useCustomWorkingDirectory = "NO"
50
+ ignoresPersistentStateOnLaunch = "NO"
51
+ debugDocumentVersioning = "YES"
52
+ debugServiceExtension = "internal"
53
+ allowLocationSimulation = "YES">
54
+ </LaunchAction>
55
+ <ProfileAction
56
+ buildConfiguration = "Release"
57
+ shouldUseLaunchSchemeArgsEnv = "YES"
58
+ savedToolIdentifier = ""
59
+ useCustomWorkingDirectory = "NO"
60
+ debugDocumentVersioning = "YES">
61
+ </ProfileAction>
62
+ <AnalyzeAction
63
+ buildConfiguration = "Debug">
64
+ </AnalyzeAction>
65
+ <ArchiveAction
66
+ buildConfiguration = "Release"
67
+ revealArchiveInOrganizer = "YES">
68
+ </ArchiveAction>
69
+ </Scheme>