@react-native-firebase/analytics 26.4.0 → 27.0.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 (31) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/RNFBAnalytics.podspec +49 -2
  3. package/dist/module/index.js +2 -2
  4. package/dist/module/index.js.map +1 -1
  5. package/dist/module/version.js +1 -1
  6. package/dist/typescript/lib/index.d.ts.map +1 -1
  7. package/dist/typescript/lib/version.d.ts +1 -1
  8. package/ios/RNFBAnalytics/RNFBAnalyticsConsentSettingsMapper.swift +98 -0
  9. package/ios/RNFBAnalytics/RNFBAnalyticsHelper.h +111 -0
  10. package/ios/RNFBAnalytics/RNFBAnalyticsHelper.m +338 -0
  11. package/ios/RNFBAnalytics/RNFBAnalyticsJavascriptParamsCleaner.swift +167 -0
  12. package/ios/RNFBAnalytics/RNFBAnalyticsModule.mm +32 -282
  13. package/ios/RNFBAnalytics.xcodeproj/project.pbxproj +16 -2
  14. package/ios/RNFBAnalyticsUnitTests/HostStubs/Firebase/FIRAnalyticsHostStub.m +304 -0
  15. package/ios/RNFBAnalyticsUnitTests/HostStubs/Firebase/Firebase.h +71 -0
  16. package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBAnalytics/RNFBAnalyticsLogTransactionHostStub.h +20 -0
  17. package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBAnalytics/RNFBAnalyticsLogTransactionHostStub.m +43 -0
  18. package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBApp/RNFBSharedUtils.h +21 -0
  19. package/ios/RNFBAnalyticsUnitTests/HostStubs/RNFBApp/RNFBSharedUtilsHostStub.m +26 -0
  20. package/ios/RNFBAnalyticsUnitTests/HostStubs/React/RCTBridgeModule.h +10 -0
  21. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsConsentSettingsMapperHostStubTests.m +62 -0
  22. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsConsentSettingsMapperTests.swift +91 -0
  23. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsHelperHostStubTests.m +542 -0
  24. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsJavascriptParamsCleanerHostStubTests.m +59 -0
  25. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsJavascriptParamsCleanerTests.swift +205 -0
  26. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsNullSentinelDecodeTests.m +111 -0
  27. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsUnitTests.xcodeproj/project.pbxproj +302 -0
  28. package/ios/RNFBAnalyticsUnitTests/RNFBAnalyticsUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBAnalyticsUnitTests.xcscheme +69 -0
  29. package/lib/index.ts +1 -1
  30. package/lib/version.ts +1 -1
  31. package/package.json +4 -4
@@ -15,88 +15,14 @@
15
15
  *
16
16
  */
17
17
 
18
- #if __has_include(<Firebase/Firebase.h>)
19
- #import <Firebase/Firebase.h>
20
- #elif __has_include(<FirebaseAnalytics/FirebaseAnalytics.h>)
21
- #import <FirebaseAnalytics/FirebaseAnalytics.h>
22
- #import <FirebaseCore/FirebaseCore.h>
23
- #else
24
- @import FirebaseCore;
25
- @import FirebaseAnalytics;
26
- #endif
27
- #import <React/RCTUtils.h>
28
-
29
- #if __has_include(<RNFBAnalytics/RNFBAnalytics-Swift.h>)
30
- // This import will work in situations where `use_frameworks!` is in use
31
- #import <RNFBAnalytics/RNFBAnalytics-Swift.h>
32
- #elif __has_include("RNFBAnalytics-Swift.h")
33
- // If `use_frameworks!` is not in use (for example, while using pre-built
34
- // react-native core) then header imports based on frameworks assumptions fail.
35
- // So, if frameworks are not available, fall back to importing the header directly, it
36
- // should be findable from a header search path pointing to the build
37
- // directory. See firebase-ios-sdk#12611 for more context.
38
- #import "RNFBAnalytics-Swift.h"
39
- #endif
40
- #import <RNFBApp/RNFBSharedUtils.h>
18
+ // This module intentionally has no Firebase imports and no `*-Swift.h` —
19
+ // see RNFBAnalyticsHelper.h. Every Firebase Analytics SDK call (and the
20
+ // Swift param cleaner / consent mapper / log-transaction types) is routed
21
+ // through the plain Objective-C RNFBAnalyticsHelper class instead, which
22
+ // can safely `@import` FirebaseAnalytics / import the generated Swift
23
+ // interface because it compiles as ObjC, not ObjC++.
41
24
  #import "RNFBAnalyticsModule.h"
42
-
43
- /** GA4 parameters that must be sent as integer NSNumber values (not doubles from JS). */
44
- static NSArray<NSString *> *RNFBAnalyticsLongNumericParameterKeys(void) {
45
- static NSArray<NSString *> *keys;
46
- static dispatch_once_t onceToken;
47
- dispatch_once(&onceToken, ^{
48
- keys = @[
49
- kFIRParameterQuantity,
50
- kFIRParameterIndex,
51
- kFIRParameterLevel,
52
- kFIRParameterNumberOfNights,
53
- kFIRParameterNumberOfPassengers,
54
- kFIRParameterNumberOfRooms,
55
- kFIRParameterScore,
56
- ];
57
- });
58
- return keys;
59
- }
60
-
61
- static void RNFBAnalyticsAddConsentStatus(NSMutableDictionary *consent,
62
- NSDictionary *consentSettings, NSString *key,
63
- FIRConsentType type) {
64
- NSNumber *value = consentSettings[key];
65
- if (value != nil) {
66
- consent[type] = value.boolValue ? FIRConsentStatusGranted : FIRConsentStatusDenied;
67
- }
68
- }
69
-
70
- static int RNFBAnalyticsHexDigit(unichar character) {
71
- if (character >= '0' && character <= '9') {
72
- return character - '0';
73
- }
74
- if (character >= 'a' && character <= 'f') {
75
- return character - 'a' + 10;
76
- }
77
- if (character >= 'A' && character <= 'F') {
78
- return character - 'A' + 10;
79
- }
80
- return -1;
81
- }
82
-
83
- static NSData *RNFBAnalyticsDataFromSHA256HexString(NSString *hexString) {
84
- if (hexString.length != 64) {
85
- return nil;
86
- }
87
-
88
- unsigned char bytes[32];
89
- for (NSUInteger i = 0; i < sizeof(bytes); i++) {
90
- int high = RNFBAnalyticsHexDigit([hexString characterAtIndex:i * 2]);
91
- int low = RNFBAnalyticsHexDigit([hexString characterAtIndex:i * 2 + 1]);
92
- if (high < 0 || low < 0) {
93
- return nil;
94
- }
95
- bytes[i] = (high << 4) | low;
96
- }
97
-
98
- return [NSData dataWithBytes:bytes length:sizeof(bytes)];
99
- }
25
+ #import "RNFBAnalyticsHelper.h"
100
26
 
101
27
  @implementation RNFBAnalyticsModule
102
28
  #pragma mark -
@@ -120,277 +46,101 @@ RCT_EXPORT_MODULE(NativeRNFBTurboAnalytics)
120
46
  params:(NSDictionary *)params
121
47
  resolve:(RCTPromiseResolveBlock)resolve
122
48
  reject:(RCTPromiseRejectBlock)reject {
123
- @try {
124
- [FIRAnalytics logEventWithName:name parameters:[self cleanJavascriptParams:params]];
125
- } @catch (NSException *exception) {
126
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
127
- }
128
-
129
- return resolve([NSNull null]);
49
+ [RNFBAnalyticsHelper logEvent:name params:params resolve:resolve reject:reject];
130
50
  }
131
51
 
132
52
  - (void)setAnalyticsCollectionEnabled:(BOOL)enabled
133
53
  resolve:(RCTPromiseResolveBlock)resolve
134
54
  reject:(RCTPromiseRejectBlock)reject {
135
- @try {
136
- [FIRAnalytics setAnalyticsCollectionEnabled:enabled];
137
- } @catch (NSException *exception) {
138
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
139
- }
140
-
141
- return resolve([NSNull null]);
55
+ [RNFBAnalyticsHelper setAnalyticsCollectionEnabled:enabled resolve:resolve reject:reject];
142
56
  }
143
57
 
144
58
  - (void)setUserId:(NSString *)id
145
59
  resolve:(RCTPromiseResolveBlock)resolve
146
60
  reject:(RCTPromiseRejectBlock)reject {
147
- @try {
148
- [FIRAnalytics setUserID:[self convertNSNullToNil:id]];
149
- } @catch (NSException *exception) {
150
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
151
- }
152
- return resolve([NSNull null]);
61
+ [RNFBAnalyticsHelper setUserId:id resolve:resolve reject:reject];
153
62
  }
154
63
 
155
64
  - (void)setUserProperty:(NSString *)name
156
65
  value:(NSString *)value
157
66
  resolve:(RCTPromiseResolveBlock)resolve
158
67
  reject:(RCTPromiseRejectBlock)reject {
159
- @try {
160
- [FIRAnalytics setUserPropertyString:[self convertNSNullToNil:value] forName:name];
161
- } @catch (NSException *exception) {
162
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
163
- }
164
- return resolve([NSNull null]);
68
+ [RNFBAnalyticsHelper setUserProperty:name value:value resolve:resolve reject:reject];
165
69
  }
166
70
 
167
71
  - (void)setUserProperties:(NSDictionary *)properties
168
72
  resolve:(RCTPromiseResolveBlock)resolve
169
73
  reject:(RCTPromiseRejectBlock)reject {
170
- @try {
171
- [properties enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
172
- [FIRAnalytics setUserPropertyString:[self convertNSNullToNil:value] forName:key];
173
- }];
174
- } @catch (NSException *exception) {
175
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
176
- }
177
- return resolve([NSNull null]);
74
+ [RNFBAnalyticsHelper setUserProperties:properties resolve:resolve reject:reject];
178
75
  }
179
76
 
180
77
  - (void)resetAnalyticsData:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
181
- @try {
182
- [FIRAnalytics resetAnalyticsData];
183
- } @catch (NSException *exception) {
184
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
185
- }
186
- return resolve([NSNull null]);
78
+ [RNFBAnalyticsHelper resetAnalyticsData:resolve reject:reject];
187
79
  }
188
80
 
189
81
  - (void)setSessionTimeoutDuration:(double)milliseconds
190
82
  resolve:(RCTPromiseResolveBlock)resolve
191
83
  reject:(RCTPromiseRejectBlock)reject {
192
- [FIRAnalytics setSessionTimeoutInterval:milliseconds / 1000];
193
- return resolve([NSNull null]);
84
+ [RNFBAnalyticsHelper setSessionTimeoutDuration:milliseconds resolve:resolve reject:reject];
194
85
  }
195
86
 
196
87
  - (void)getAppInstanceId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
197
- return resolve([FIRAnalytics appInstanceID]);
88
+ [RNFBAnalyticsHelper getAppInstanceId:resolve reject:reject];
198
89
  }
199
90
 
200
91
  - (void)getSessionId:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
201
- __block BOOL completed = NO;
202
- const int64_t timeoutNs = (int64_t)(60 * NSEC_PER_SEC);
203
-
204
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeoutNs), dispatch_get_main_queue(), ^{
205
- if (completed) {
206
- return;
207
- }
208
- completed = YES;
209
- DLog(@"getSessionId timed_out: no SDK callback within 60 seconds");
210
- resolve([NSNull null]);
211
- });
212
-
213
- [FIRAnalytics sessionIDWithCompletion:^(int64_t sessionID, NSError *_Nullable error) {
214
- dispatch_async(dispatch_get_main_queue(), ^{
215
- if (completed) {
216
- return;
217
- }
218
- completed = YES;
219
-
220
- // Occasionally sessionID is 0 despite nil error, reject as if it were an error
221
- // https://github.com/firebase/firebase-ios-sdk/issues/15258
222
- if (!error && [NSNumber numberWithLongLong:sessionID] == 0) {
223
- DLog(@"getSessionId zero_without_error: sessionID=0 (firebase-ios-sdk#15258)");
224
- return resolve([NSNull null]);
225
- }
226
-
227
- if (error) {
228
- DLog(@"getSessionId sdk_error: domain=%@ code=%ld description=%@", error.domain,
229
- (long)error.code, error.localizedDescription ?: @"(none)");
230
- return resolve([NSNull null]);
231
- }
232
-
233
- DLog(@"getSessionId success: sessionID=%lld", sessionID);
234
- return resolve([NSNumber numberWithLongLong:sessionID]);
235
- });
236
- }];
92
+ [RNFBAnalyticsHelper getSessionId:resolve reject:reject];
237
93
  }
238
94
 
239
95
  - (void)setDefaultEventParameters:(NSDictionary *)params
240
96
  resolve:(RCTPromiseResolveBlock)resolve
241
97
  reject:(RCTPromiseRejectBlock)reject {
242
- @try {
243
- [FIRAnalytics setDefaultEventParameters:[self cleanJavascriptParams:params]];
244
- } @catch (NSException *exception) {
245
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
246
- }
247
-
248
- return resolve([NSNull null]);
98
+ [RNFBAnalyticsHelper setDefaultEventParameters:params resolve:resolve reject:reject];
249
99
  }
250
100
 
251
101
  - (void)initiateOnDeviceConversionMeasurementWithEmailAddress:(NSString *)emailAddress
252
102
  resolve:(RCTPromiseResolveBlock)resolve
253
103
  reject:(RCTPromiseRejectBlock)reject {
254
- @try {
255
- [FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:emailAddress];
256
- } @catch (NSException *exception) {
257
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
258
- }
259
-
260
- return resolve([NSNull null]);
104
+ [RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithEmailAddress:emailAddress
105
+ resolve:resolve
106
+ reject:reject];
261
107
  }
262
108
 
263
109
  - (void)initiateOnDeviceConversionMeasurementWithHashedEmailAddress:(NSString *)hashedEmailAddress
264
110
  resolve:(RCTPromiseResolveBlock)resolve
265
111
  reject:(RCTPromiseRejectBlock)reject {
266
- @try {
267
- NSData *emailAddress = RNFBAnalyticsDataFromSHA256HexString(hashedEmailAddress);
268
- if (emailAddress == nil) {
269
- reject(@"firebase_analytics", @"Expected a 64-character SHA-256 hex string", nil);
270
- return;
271
- }
272
- [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:emailAddress];
273
- } @catch (NSException *exception) {
274
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
275
- }
276
-
277
- return resolve([NSNull null]);
112
+ [RNFBAnalyticsHelper
113
+ initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hashedEmailAddress
114
+ resolve:resolve
115
+ reject:reject];
278
116
  }
279
117
 
280
118
  - (void)initiateOnDeviceConversionMeasurementWithPhoneNumber:(NSString *)phoneNumber
281
119
  resolve:(RCTPromiseResolveBlock)resolve
282
120
  reject:(RCTPromiseRejectBlock)reject {
283
- @try {
284
- [FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:phoneNumber];
285
- } @catch (NSException *exception) {
286
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
287
- }
288
-
289
- return resolve([NSNull null]);
121
+ [RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithPhoneNumber:phoneNumber
122
+ resolve:resolve
123
+ reject:reject];
290
124
  }
291
125
 
292
126
  - (void)initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:(NSString *)hashedPhoneNumber
293
127
  resolve:(RCTPromiseResolveBlock)resolve
294
128
  reject:(RCTPromiseRejectBlock)reject {
295
- @try {
296
- NSData *phoneNumber = RNFBAnalyticsDataFromSHA256HexString(hashedPhoneNumber);
297
- if (phoneNumber == nil) {
298
- reject(@"firebase_analytics", @"Expected a 64-character SHA-256 hex string", nil);
299
- return;
300
- }
301
- [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:phoneNumber];
302
- } @catch (NSException *exception) {
303
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
304
- }
305
-
306
- return resolve([NSNull null]);
129
+ [RNFBAnalyticsHelper initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hashedPhoneNumber
130
+ resolve:resolve
131
+ reject:reject];
307
132
  }
308
133
 
309
134
  - (void)logTransaction:(NSString *)transactionId
310
135
  resolve:(RCTPromiseResolveBlock)resolve
311
136
  reject:(RCTPromiseRejectBlock)reject {
312
- if (@available(iOS 15.0, macOS 12.0, *)) {
313
- RNFBAnalyticsLogTransaction *handler = [[RNFBAnalyticsLogTransaction alloc] init];
314
- [handler logTransactionWithTransactionId:transactionId resolve:resolve reject:reject];
315
- } else {
316
- reject(@"firebase_analytics", @"logTransaction() is only supported on iOS 15.0 or newer", nil);
317
- }
137
+ [RNFBAnalyticsHelper logTransaction:transactionId resolve:resolve reject:reject];
318
138
  }
319
139
 
320
140
  - (void)setConsent:(NSDictionary *)consentSettings
321
141
  resolve:(RCTPromiseResolveBlock)resolve
322
142
  reject:(RCTPromiseRejectBlock)reject {
323
- @try {
324
- NSMutableDictionary *consent = [NSMutableDictionary dictionaryWithCapacity:4];
325
- RNFBAnalyticsAddConsentStatus(consent, consentSettings, @"analytics_storage",
326
- FIRConsentTypeAnalyticsStorage);
327
- RNFBAnalyticsAddConsentStatus(consent, consentSettings, @"ad_storage", FIRConsentTypeAdStorage);
328
- RNFBAnalyticsAddConsentStatus(consent, consentSettings, @"ad_user_data",
329
- FIRConsentTypeAdUserData);
330
- RNFBAnalyticsAddConsentStatus(consent, consentSettings, @"ad_personalization",
331
- FIRConsentTypeAdPersonalization);
332
- [FIRAnalytics setConsent:consent];
333
- } @catch (NSException *exception) {
334
- return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
335
- }
336
- return resolve([NSNull null]);
337
- }
338
-
339
- #pragma mark -
340
- #pragma mark Private methods
341
-
342
- - (NSDictionary *)cleanJavascriptParams:(NSDictionary *)params {
343
- NSMutableDictionary *newParams = [params mutableCopy];
344
- if (newParams[kFIRParameterItems]) {
345
- NSMutableArray *newItems = [NSMutableArray array];
346
- [(NSArray *)newParams[kFIRParameterItems]
347
- enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
348
- NSMutableDictionary *item = [obj mutableCopy];
349
- [self rnfb_coerceLongNumericParametersInMutableDictionary:item];
350
- [newItems addObject:[item copy]];
351
- }];
352
- newParams[kFIRParameterItems] = [newItems copy];
353
- }
354
- [self rnfb_coerceLongNumericParametersInMutableDictionary:newParams];
355
- [self rnfb_coerceSuccessParameterInMutableDictionary:newParams];
356
- NSNumber *extendSession = [newParams valueForKey:kFIRParameterExtendSession];
357
- if ([extendSession isEqualToNumber:@1]) {
358
- newParams[kFIRParameterExtendSession] = @YES;
359
- }
360
- return [newParams copy];
361
- }
362
-
363
- - (void)rnfb_coerceLongNumericParametersInMutableDictionary:(NSMutableDictionary *)dict {
364
- for (NSString *key in RNFBAnalyticsLongNumericParameterKeys()) {
365
- id value = dict[key];
366
- if (value != nil && value != [NSNull null]) {
367
- dict[key] = @([value integerValue]);
368
- }
369
- }
370
- }
371
-
372
- - (void)rnfb_coerceSuccessParameterInMutableDictionary:(NSMutableDictionary *)dict {
373
- id value = dict[kFIRParameterSuccess];
374
- if (value == nil || value == [NSNull null]) {
375
- return;
376
- }
377
- int success = 0;
378
- if ([value isKindOfClass:[NSString class]]) {
379
- NSString *lower = [(NSString *)value lowercaseString];
380
- if ([lower isEqualToString:@"true"] || [lower isEqualToString:@"yes"] ||
381
- [lower isEqualToString:@"1"]) {
382
- success = 1;
383
- }
384
- } else {
385
- success = [value boolValue] ? 1 : 0;
386
- }
387
- dict[kFIRParameterSuccess] = @(success);
388
- }
389
-
390
- /// Converts null values received over the bridge from NSNull to nil
391
- /// @param value Nullable string value
392
- - (NSString *)convertNSNullToNil:(NSString *)value {
393
- return [value isEqual:[NSNull null]] ? nil : value;
143
+ [RNFBAnalyticsHelper setConsent:consentSettings resolve:resolve reject:reject];
394
144
  }
395
145
 
396
146
  @end
@@ -9,6 +9,9 @@
9
9
  /* Begin PBXBuildFile section */
10
10
  2744B98621F45429004F8E3F /* RNFBAnalyticsModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2744B98521F45429004F8E3F /* RNFBAnalyticsModule.mm */; };
11
11
  2744B99021F45429004F8E3F /* RNFBAnalyticsLogTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2744B98F21F45429004F8E3F /* RNFBAnalyticsLogTransaction.swift */; };
12
+ 2744B99121F45429004F8E3F /* RNFBAnalyticsJavascriptParamsCleaner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2744B99221F45429004F8E3F /* RNFBAnalyticsJavascriptParamsCleaner.swift */; };
13
+ 2744B99321F45429004F8E3F /* RNFBAnalyticsConsentSettingsMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2744B99421F45429004F8E3F /* RNFBAnalyticsConsentSettingsMapper.swift */; };
14
+ RNFBAN000000000000000006 /* RNFBAnalyticsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = RNFBAN000000000000000008 /* RNFBAnalyticsHelper.m */; };
12
15
  /* End PBXBuildFile section */
13
16
 
14
17
  /* Begin PBXCopyFilesBuildPhase section */
@@ -28,6 +31,10 @@
28
31
  2744B98421F45429004F8E3F /* RNFBAnalyticsModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNFBAnalyticsModule.h; path = RNFBAnalytics/RNFBAnalyticsModule.h; sourceTree = SOURCE_ROOT; };
29
32
  2744B98521F45429004F8E3F /* RNFBAnalyticsModule.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = RNFBAnalyticsModule.mm; path = RNFBAnalytics/RNFBAnalyticsModule.mm; sourceTree = SOURCE_ROOT; };
30
33
  2744B98F21F45429004F8E3F /* RNFBAnalyticsLogTransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RNFBAnalyticsLogTransaction.swift; path = RNFBAnalytics/RNFBAnalyticsLogTransaction.swift; sourceTree = SOURCE_ROOT; };
34
+ 2744B99221F45429004F8E3F /* RNFBAnalyticsJavascriptParamsCleaner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RNFBAnalyticsJavascriptParamsCleaner.swift; path = RNFBAnalytics/RNFBAnalyticsJavascriptParamsCleaner.swift; sourceTree = SOURCE_ROOT; };
35
+ 2744B99421F45429004F8E3F /* RNFBAnalyticsConsentSettingsMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RNFBAnalyticsConsentSettingsMapper.swift; path = RNFBAnalytics/RNFBAnalyticsConsentSettingsMapper.swift; sourceTree = SOURCE_ROOT; };
36
+ RNFBAN000000000000000007 /* RNFBAnalyticsHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNFBAnalyticsHelper.h; path = RNFBAnalytics/RNFBAnalyticsHelper.h; sourceTree = SOURCE_ROOT; };
37
+ RNFBAN000000000000000008 /* RNFBAnalyticsHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = RNFBAnalyticsHelper.m; path = RNFBAnalytics/RNFBAnalyticsHelper.m; sourceTree = SOURCE_ROOT; };
31
38
  /* End PBXFileReference section */
32
39
 
33
40
  /* Begin PBXFrameworksBuildPhase section */
@@ -56,7 +63,11 @@
56
63
  2744B98C21F45C64004F8E3F /* common */,
57
64
  2744B98421F45429004F8E3F /* RNFBAnalyticsModule.h */,
58
65
  2744B98521F45429004F8E3F /* RNFBAnalyticsModule.mm */,
66
+ RNFBAN000000000000000007 /* RNFBAnalyticsHelper.h */,
67
+ RNFBAN000000000000000008 /* RNFBAnalyticsHelper.m */,
59
68
  2744B98F21F45429004F8E3F /* RNFBAnalyticsLogTransaction.swift */,
69
+ 2744B99221F45429004F8E3F /* RNFBAnalyticsJavascriptParamsCleaner.swift */,
70
+ 2744B99421F45429004F8E3F /* RNFBAnalyticsConsentSettingsMapper.swift */,
60
71
  );
61
72
  path = RNFBAnalytics;
62
73
  sourceTree = "<group>";
@@ -128,7 +139,10 @@
128
139
  buildActionMask = 2147483647;
129
140
  files = (
130
141
  2744B98621F45429004F8E3F /* RNFBAnalyticsModule.mm in Sources */,
142
+ RNFBAN000000000000000006 /* RNFBAnalyticsHelper.m in Sources */,
131
143
  2744B99021F45429004F8E3F /* RNFBAnalyticsLogTransaction.swift in Sources */,
144
+ 2744B99121F45429004F8E3F /* RNFBAnalyticsJavascriptParamsCleaner.swift in Sources */,
145
+ 2744B99321F45429004F8E3F /* RNFBAnalyticsConsentSettingsMapper.swift in Sources */,
132
146
  );
133
147
  runOnlyForDeploymentPostprocessing = 0;
134
148
  };
@@ -170,7 +184,7 @@
170
184
  PRODUCT_NAME = "$(TARGET_NAME)";
171
185
  SDKROOT = iphoneos;
172
186
  SKIP_INSTALL = YES;
173
- SWIFT_VERSION = 5.0;
187
+ SWIFT_VERSION = 5.10;
174
188
  TARGETED_DEVICE_FAMILY = "1,2";
175
189
  };
176
190
  name = Debug;
@@ -205,7 +219,7 @@
205
219
  PRODUCT_NAME = "$(TARGET_NAME)";
206
220
  SDKROOT = iphoneos;
207
221
  SKIP_INSTALL = YES;
208
- SWIFT_VERSION = 5.0;
222
+ SWIFT_VERSION = 5.10;
209
223
  TARGETED_DEVICE_FAMILY = "1,2";
210
224
  VALIDATE_PRODUCT = YES;
211
225
  };