From 2bf5ad745c62164548c8f66ed03e87a6c15eb552 Mon Sep 17 00:00:00 2001 From: Loren Posen Date: Tue, 9 Jun 2026 14:27:00 -0700 Subject: [PATCH 1/2] feat: remove legacy arch support --- README.md | 13 +- android/build.gradle | 20 +- .../reactnative}/RNIterableAPIModule.java | 2 - .../reactnative/RNIterableAPIPackage.java | 3 +- .../oldarch/java/com/RNIterableAPIModule.java | 273 ------------------ ios/RNIterableAPI/RNIterableAPI.h | 16 +- ios/RNIterableAPI/RNIterableAPI.mm | 265 +---------------- package.json | 2 +- src/__mocks__/jest.setup.ts | 15 +- src/api/NativeRNIterableAPI.ts | 13 +- src/api/index.ts | 6 +- src/core/classes/Iterable.ts | 20 +- src/core/classes/IterableApi.test.ts | 8 +- src/core/classes/IterableApi.ts | 99 +++++-- 14 files changed, 100 insertions(+), 655 deletions(-) rename android/src/{newarch/java/com => main/java/com/iterable/reactnative}/RNIterableAPIModule.java (98%) delete mode 100644 android/src/oldarch/java/com/RNIterableAPIModule.java diff --git a/README.md b/README.md index d2f597b05..6fa92c4ae 100644 --- a/README.md +++ b/README.md @@ -69,17 +69,12 @@ View the [API documentation](https://iterable-react-native-sdk.netlify.app). ## Architecture Support -Iterable's React Native SDK supports [React Native's New +Iterable's React Native SDK requires [React Native's New Architecture](https://reactnative.dev/architecture/landing-page), including -TurboModules and Fabric. +TurboModules and Fabric. Legacy Architecture is not supported. -**IMPORTANT**: Iterable's React Native SDK supports React Native's Legacy Architecture, but it -is no longer actively maintained. Use at your own risk. - -Notes: - -- Ensure your app is configured for New Architecture per the React Native docs. -- The example app in this repository is configured with New Architecture enabled. +Ensure your app is configured for New Architecture per the React Native docs. +The example app in this repository has New Architecture enabled. ## Beta Versions diff --git a/android/build.gradle b/android/build.gradle index 6a3eb970b..37ebd9238 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -15,16 +15,9 @@ buildscript { } } -def isNewArchitectureEnabled() { - return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" -} - apply plugin: "com.android.library" apply plugin: "kotlin-android" - -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} +apply plugin: "com.facebook.react" def getExtOrDefault(name) { return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["RNIterable_" + name] @@ -59,7 +52,6 @@ android { defaultConfig { minSdkVersion getExtOrIntegerDefault("minSdkVersion") targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") - buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) } buildFeatures { @@ -81,16 +73,6 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - sourceSets { - main { - if (isNewArchitectureEnabled()) { - java.srcDirs += ['src/newarch'] - } else { - java.srcDirs += ['src/oldarch'] - } - } - } - // Add this to match the Iterable SDK group ID group = "com.iterable" } diff --git a/android/src/newarch/java/com/RNIterableAPIModule.java b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java similarity index 98% rename from android/src/newarch/java/com/RNIterableAPIModule.java rename to android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java index 9abe0d070..f5676c0a0 100644 --- a/android/src/newarch/java/com/RNIterableAPIModule.java +++ b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModule.java @@ -7,8 +7,6 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; -import com.iterable.iterableapi.AuthFailure; -import com.iterable.iterableapi.IterableLogger; public class RNIterableAPIModule extends NativeRNIterableAPISpec { private final ReactApplicationContext reactContext; diff --git a/android/src/main/java/com/iterable/reactnative/RNIterableAPIPackage.java b/android/src/main/java/com/iterable/reactnative/RNIterableAPIPackage.java index 3fade361b..17d093d2c 100644 --- a/android/src/main/java/com/iterable/reactnative/RNIterableAPIPackage.java +++ b/android/src/main/java/com/iterable/reactnative/RNIterableAPIPackage.java @@ -30,14 +30,13 @@ public ReactModuleInfoProvider getReactModuleInfoProvider() { @Override public Map getReactModuleInfos() { Map moduleInfos = new HashMap<>(); - boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; moduleInfos.put(RNIterableAPIModuleImpl.NAME, new ReactModuleInfo( RNIterableAPIModuleImpl.NAME, RNIterableAPIModuleImpl.NAME, false, // canOverrideExistingModule false, // needsEagerInit false, // isCxxModule - isTurboModule // isTurboModule + true // isTurboModule )); return moduleInfos; } diff --git a/android/src/oldarch/java/com/RNIterableAPIModule.java b/android/src/oldarch/java/com/RNIterableAPIModule.java deleted file mode 100644 index ce0a6280c..000000000 --- a/android/src/oldarch/java/com/RNIterableAPIModule.java +++ /dev/null @@ -1,273 +0,0 @@ -package com.iterable.reactnative; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; - -public class RNIterableAPIModule extends ReactContextBaseJavaModule { - private final ReactApplicationContext reactContext; - private static RNIterableAPIModuleImpl moduleImpl; - - RNIterableAPIModule(ReactApplicationContext context) { - super(context); - this.reactContext = context; - if (moduleImpl == null) { - moduleImpl = new RNIterableAPIModuleImpl(reactContext); - } - } - - @NonNull - @Override - public String getName() { - return RNIterableAPIModuleImpl.NAME; - } - - @ReactMethod - public void initializeWithApiKey(String apiKey, ReadableMap configReadableMap, String version, Promise promise) { - moduleImpl.initializeWithApiKey(apiKey, configReadableMap, version, promise); - } - - @ReactMethod - public void initialize2WithApiKey(String apiKey, ReadableMap configReadableMap, String version, String apiEndPointOverride, Promise promise) { - moduleImpl.initialize2WithApiKey(apiKey, configReadableMap, version, apiEndPointOverride, promise); - } - - @ReactMethod - public void setEmail(@Nullable String email, @Nullable String authToken) { - moduleImpl.setEmail(email, authToken); - } - - @ReactMethod - public void updateEmail(String email, @Nullable String authToken) { - moduleImpl.updateEmail(email, authToken); - } - - @ReactMethod - public void getEmail(Promise promise) { - moduleImpl.getEmail(promise); - } - - @ReactMethod - public void sampleMethod(String stringArgument, int numberArgument, Callback callback) { - moduleImpl.sampleMethod(stringArgument, numberArgument, callback); - } - - @ReactMethod - public void setUserId(@Nullable String userId, @Nullable String authToken) { - moduleImpl.setUserId(userId, authToken); - } - - @ReactMethod - public void updateUser(ReadableMap dataFields, boolean mergeNestedObjects) { - moduleImpl.updateUser(dataFields, mergeNestedObjects); - } - - @ReactMethod - public void getUserId(Promise promise) { - moduleImpl.getUserId(promise); - } - - @ReactMethod - public void trackEvent(String name, @Nullable ReadableMap dataFields) { - moduleImpl.trackEvent(name, dataFields); - } - - @ReactMethod - public void updateCart(ReadableArray items) { - moduleImpl.updateCart(items); - } - - @ReactMethod - public void trackPurchase(double total, ReadableArray items, @Nullable ReadableMap dataFields) { - moduleImpl.trackPurchase(total, items, dataFields); - } - - @ReactMethod - public void trackPushOpenWithCampaignId(double campaignId, @Nullable Double templateId, String messageId, boolean appAlreadyRunning, @Nullable ReadableMap dataFields) { - moduleImpl.trackPushOpenWithCampaignId(campaignId, templateId, messageId, appAlreadyRunning, dataFields); - } - - @ReactMethod - public void updateSubscriptions(@Nullable ReadableArray emailListIds, @Nullable ReadableArray unsubscribedChannelIds, @Nullable ReadableArray unsubscribedMessageTypeIds, @Nullable ReadableArray subscribedMessageTypeIds, double campaignId, double templateId) { - moduleImpl.updateSubscriptions(emailListIds, unsubscribedChannelIds, unsubscribedMessageTypeIds, subscribedMessageTypeIds, campaignId, templateId); - } - - @ReactMethod - public void showMessage(String messageId, boolean consume, final Promise promise) { - moduleImpl.showMessage(messageId, consume, promise); - } - - @ReactMethod - public void setReadForMessage(String messageId, boolean read) { - moduleImpl.setReadForMessage(messageId, read); - } - - @ReactMethod - public void removeMessage(String messageId, double location, double deleteSource) { - moduleImpl.removeMessage(messageId, location, deleteSource); - } - - @ReactMethod - public void getHtmlInAppContentForMessage(String messageId, final Promise promise) { - moduleImpl.getHtmlInAppContentForMessage(messageId, promise); - } - - @ReactMethod - public void getAttributionInfo(Promise promise) { - moduleImpl.getAttributionInfo(promise); - } - - @ReactMethod - public void setAttributionInfo(@Nullable ReadableMap attributionInfoReadableMap) { - moduleImpl.setAttributionInfo(attributionInfoReadableMap); - } - - @ReactMethod - public void getLastPushPayload(Promise promise) { - moduleImpl.getLastPushPayload(promise); - } - - @ReactMethod - public void disableDeviceForCurrentUser() { - moduleImpl.disableDeviceForCurrentUser(); - } - - @ReactMethod - public void handleAppLink(String uri, Promise promise) { - moduleImpl.handleAppLink(uri, promise); - } - - @ReactMethod - public void trackInAppOpen(String messageId, double location) { - moduleImpl.trackInAppOpen(messageId, location); - } - - @ReactMethod - public void trackInAppClick(String messageId, double location, String clickedUrl) { - moduleImpl.trackInAppClick(messageId, location, clickedUrl); - } - - @ReactMethod - public void trackInAppClose(String messageId, double location, double source, @Nullable String clickedUrl) { - moduleImpl.trackInAppClose(messageId, location, source, clickedUrl); - } - - @ReactMethod - public void inAppConsume(String messageId, double location, double source) { - moduleImpl.inAppConsume(messageId, location, source); - } - - @ReactMethod - public void getInAppMessages(Promise promise) { - moduleImpl.getInAppMessages(promise); - } - - @ReactMethod - public void getInboxMessages(Promise promise) { - moduleImpl.getInboxMessages(promise); - } - - @ReactMethod - public void getUnreadInboxMessagesCount(Promise promise) { - moduleImpl.getUnreadInboxMessagesCount(promise); - } - - @ReactMethod - public void setInAppShowResponse(double number) { - moduleImpl.setInAppShowResponse(number); - } - - @ReactMethod - public void setAutoDisplayPaused(final boolean paused) { - moduleImpl.setAutoDisplayPaused(paused); - } - - @ReactMethod - public void wakeApp() { - moduleImpl.wakeApp(); - } - - @ReactMethod - public void startSession(ReadableArray visibleRows) { - moduleImpl.startSession(visibleRows); - } - - @ReactMethod - public void endSession() { - moduleImpl.endSession(); - } - - @ReactMethod - public void updateVisibleRows(ReadableArray visibleRows) { - moduleImpl.updateVisibleRows(visibleRows); - } - - @ReactMethod - public void addListener(String eventName) { - moduleImpl.addListener(eventName); - } - - @ReactMethod - public void removeListeners(double count) { - moduleImpl.removeListeners(count); - } - - @ReactMethod - public void passAlongAuthToken(@Nullable String authToken) { - moduleImpl.passAlongAuthToken(authToken); - } - - @ReactMethod - public void pauseAuthRetries(boolean pauseRetry) { - moduleImpl.pauseAuthRetries(pauseRetry); - } - - @ReactMethod - public void syncEmbeddedMessages() { - moduleImpl.syncEmbeddedMessages(); - } - - @ReactMethod - public void startEmbeddedSession() { - moduleImpl.startEmbeddedSession(); - } - - @ReactMethod - public void endEmbeddedSession() { - moduleImpl.endEmbeddedSession(); - } - - @ReactMethod - public void startEmbeddedImpression(String messageId, double placementId) { - moduleImpl.startEmbeddedImpression(messageId, (int) placementId); - } - - @ReactMethod - public void pauseEmbeddedImpression(String messageId) { - moduleImpl.pauseEmbeddedImpression(messageId); - } - - @ReactMethod - public void getEmbeddedMessages(@Nullable ReadableArray placementIds, Promise promise) { - moduleImpl.getEmbeddedMessages(placementIds, promise); - } - - @ReactMethod - public void trackEmbeddedClick(ReadableMap message, String buttonId, String clickedUrl) { - moduleImpl.trackEmbeddedClick(message, buttonId, clickedUrl); - } - - public void sendEvent(@NonNull String eventName, @Nullable Object eventData) { - moduleImpl.sendEvent(eventName, eventData); - } - - void onInboxUpdated() { - moduleImpl.onInboxUpdated(); - } -} diff --git a/ios/RNIterableAPI/RNIterableAPI.h b/ios/RNIterableAPI/RNIterableAPI.h index a8b725452..7a5b20833 100644 --- a/ios/RNIterableAPI/RNIterableAPI.h +++ b/ios/RNIterableAPI/RNIterableAPI.h @@ -1,18 +1,10 @@ #import #import +#import +#import +#import +#import -#if RCT_NEW_ARCH_ENABLED - - #import - #import - #import - #import @interface RNIterableAPI : RCTEventEmitter -#else - #import -@interface RNIterableAPI : RCTEventEmitter - -#endif - @end diff --git a/ios/RNIterableAPI/RNIterableAPI.mm b/ios/RNIterableAPI/RNIterableAPI.mm index 025c4dc15..17ef5a4a7 100644 --- a/ios/RNIterableAPI/RNIterableAPI.mm +++ b/ios/RNIterableAPI/RNIterableAPI.mm @@ -1,9 +1,6 @@ #import "RNIterableAPI.h" - -#if RCT_NEW_ARCH_ENABLED - #import "RNIterableAPISpec.h" - #import -#endif +#import "RNIterableAPISpec.h" +#import #import @@ -54,9 +51,7 @@ - (void)sendEventWithName:(NSString *_Nonnull)name result:(double)result { [self sendEventWithName:name body:@(result)]; } -#if RCT_NEW_ARCH_ENABLED - -// MARK: - New Architecture functions exposed to JS +// MARK: - TurboModule functions exposed to JS - (void)startObserving { [(ReactIterableAPI *)_swiftAPI startObserving]; @@ -343,258 +338,4 @@ - (void)wakeApp { return std::make_shared(params); } -#else - -// MARK: - RCTBridgeModule integration for Legacy Architecture - -RCT_EXPORT_METHOD(startObserving) { - [(ReactIterableAPI *)_swiftAPI startObserving]; -} - -RCT_EXPORT_METHOD(stopObserving) { - [(ReactIterableAPI *)_swiftAPI stopObserving]; -} - -RCT_EXPORT_METHOD( - initializeWithApiKey : (NSString *)apiKey config : (NSDictionary *) - config version : (NSString *)version resolve : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI initializeWithApiKey:apiKey - config:config - version:version - resolver:resolve - rejecter:reject]; -} - -RCT_EXPORT_METHOD( - initialize2WithApiKey : (NSString *)apiKey config : (NSDictionary *) - config version : (NSString *)version apiEndPointOverride : (NSString *) - apiEndPointOverride resolve : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI initialize2WithApiKey:apiKey - config:config - version:version - apiEndPointOverride:apiEndPointOverride - resolver:resolve - rejecter:reject]; -} - -RCT_EXPORT_METHOD(setEmail : (NSString *_Nullable) - email authToken : (NSString *_Nullable)authToken) { - [_swiftAPI setEmail:email authToken:authToken]; -} - -RCT_EXPORT_METHOD(getEmail : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getEmail:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(setUserId : (NSString *_Nullable) - userId authToken : (NSString *_Nullable)authToken) { - [_swiftAPI setUserId:userId authToken:authToken]; -} - -RCT_EXPORT_METHOD(getUserId : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getUserId:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(setInAppShowResponse : (double)inAppShowResponse) { - [_swiftAPI setInAppShowResponse:inAppShowResponse]; -} - -RCT_EXPORT_METHOD(getInAppMessages : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getInAppMessages:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(getInboxMessages : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getInboxMessages:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(getUnreadInboxMessagesCount : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getUnreadInboxMessagesCount:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(showMessage : (NSString *)messageId consume : (BOOL) - consume resolve : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI showMessage:messageId - consume:consume - resolver:resolve - rejecter:reject]; -} - -RCT_EXPORT_METHOD(removeMessage : (NSString *)messageId location : (double) - location source : (double)source) { - [_swiftAPI removeMessage:messageId location:location source:source]; -} - -RCT_EXPORT_METHOD(setReadForMessage : (NSString *)messageId read : (BOOL)read) { - [_swiftAPI setReadForMessage:messageId read:read]; -} - -RCT_EXPORT_METHOD(setAutoDisplayPaused : (BOOL)autoDisplayPaused) { - [_swiftAPI setAutoDisplayPaused:autoDisplayPaused]; -} - -RCT_EXPORT_METHOD(trackEvent : (NSString *)name dataFields : (NSDictionary *) - dataFields) { - [_swiftAPI trackEvent:name dataFields:dataFields]; -} - -RCT_EXPORT_METHOD( - trackPushOpenWithCampaignId : (double)campaignId templateId : (NSNumber *) - templateId messageId : (NSString *)messageId appAlreadyRunning : (BOOL) - appAlreadyRunning dataFields : (NSDictionary *)dataFields) { - [_swiftAPI trackPushOpenWithCampaignId:campaignId - templateId:templateId - messageId:messageId - appAlreadyRunning:appAlreadyRunning - dataFields:dataFields]; -} - -RCT_EXPORT_METHOD(trackInAppOpen : (NSString *)messageId location : (double) - location) { - [_swiftAPI trackInAppOpen:messageId location:location]; -} - -RCT_EXPORT_METHOD(trackInAppClick : (NSString *)messageId location : (double) - location clickedUrl : (NSString *)clickedUrl) { - [_swiftAPI trackInAppClick:messageId location:location clickedUrl:clickedUrl]; -} - -RCT_EXPORT_METHOD(trackInAppClose : (NSString *)messageId location : (double) - location source : (double)source clickedUrl : (NSString *) - clickedUrl) { - [_swiftAPI trackInAppClose:messageId - location:location - source:source - clickedUrl:clickedUrl]; -} - -RCT_EXPORT_METHOD(inAppConsume : (NSString *)messageId location : (double) - location source : (double)source) { - [_swiftAPI inAppConsume:messageId location:location source:source]; -} - -RCT_EXPORT_METHOD(updateCart : (NSArray *)items) { - [_swiftAPI updateCart:items]; -} - -RCT_EXPORT_METHOD(trackPurchase : (double)total items : (NSArray *) - items dataFields : (NSDictionary *)dataFields) { - [_swiftAPI trackPurchase:total items:items dataFields:dataFields]; -} - -RCT_EXPORT_METHOD(updateUser : (NSDictionary *)dataFields mergeNestedObjects : ( - BOOL)mergeNestedObjects) { - [_swiftAPI updateUser:dataFields mergeNestedObjects:mergeNestedObjects]; -} - -RCT_EXPORT_METHOD(updateEmail : (NSString *)email authToken : (NSString *) - authToken) { - [_swiftAPI updateEmail:email authToken:authToken]; -} - -RCT_EXPORT_METHOD(getAttributionInfo : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getAttributionInfo:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(setAttributionInfo : (NSDictionary *)attributionInfo) { - [_swiftAPI setAttributionInfo:attributionInfo]; -} - -RCT_EXPORT_METHOD(disableDeviceForCurrentUser) { - [_swiftAPI disableDeviceForCurrentUser]; -} - -RCT_EXPORT_METHOD(getLastPushPayload : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getLastPushPayload:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(getHtmlInAppContentForMessage : (NSString *) - messageId resolve : (RCTPromiseResolveBlock) - resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getHtmlInAppContentForMessage:messageId - resolver:resolve - rejecter:reject]; -} - -RCT_EXPORT_METHOD(handleAppLink : (NSString *)appLink resolve : ( - RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI handleAppLink:appLink resolver:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD( - updateSubscriptions : (NSArray *)emailListIds unsubscribedChannelIds : ( - NSArray *) - unsubscribedChannelIds unsubscribedMessageTypeIds : (NSArray *) - unsubscribedMessageTypeIds subscribedMessageTypeIds : (NSArray *) - subscribedMessageTypeIds campaignId : (double) - campaignId templateId : (double)templateId) { - [_swiftAPI updateSubscriptions:emailListIds - unsubscribedChannelIds:unsubscribedChannelIds - unsubscribedMessageTypeIds:unsubscribedMessageTypeIds - subscribedMessageTypeIds:subscribedMessageTypeIds - campaignId:campaignId - templateId:templateId]; -} - -RCT_EXPORT_METHOD(startSession : (NSArray *)visibleRows) { - [_swiftAPI startSession:visibleRows]; -} - -RCT_EXPORT_METHOD(endSession) { [_swiftAPI endSession]; } - -RCT_EXPORT_METHOD(updateVisibleRows : (NSArray *)visibleRows) { - [_swiftAPI updateVisibleRows:visibleRows]; -} - -RCT_EXPORT_METHOD(passAlongAuthToken : (NSString *_Nullable)authToken) { - [_swiftAPI passAlongAuthToken:authToken]; -} - -RCT_EXPORT_METHOD(pauseAuthRetries : (BOOL)pauseRetry) { - [_swiftAPI pauseAuthRetries:pauseRetry]; -} - -RCT_EXPORT_METHOD(startEmbeddedSession) { - [_swiftAPI startEmbeddedSession]; -} - -RCT_EXPORT_METHOD(endEmbeddedSession) { - [_swiftAPI endEmbeddedSession]; -} - -RCT_EXPORT_METHOD(syncEmbeddedMessages) { - [_swiftAPI syncEmbeddedMessages]; -} - -RCT_EXPORT_METHOD(getEmbeddedMessages : (NSArray *_Nullable)placementIds resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) { - [_swiftAPI getEmbeddedMessages:placementIds resolver:resolve rejecter:reject]; -} - -RCT_EXPORT_METHOD(startEmbeddedImpression : (NSString *)messageId placementId : (double)placementId) { - [_swiftAPI startEmbeddedImpression:messageId placementId:placementId]; -} - -RCT_EXPORT_METHOD(pauseEmbeddedImpression : (NSString *)messageId) { - [_swiftAPI pauseEmbeddedImpression:messageId]; -} - -RCT_EXPORT_METHOD(trackEmbeddedClick : (NSDictionary *)message buttonId : (NSString *_Nullable)buttonId clickedUrl : (NSString *_Nullable)clickedUrl) { - [_swiftAPI trackEmbeddedClick:message buttonId:buttonId clickedUrl:clickedUrl]; -} - -RCT_EXPORT_METHOD(wakeApp) { - // Placeholder function -- this method is only used in Android -} - -#endif - @end diff --git a/package.json b/package.json index 7aa03d441..52c64fa4d 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ } }, "create-react-native-library": { - "type": "module-legacy", + "type": "turbo-module", "languages": "kotlin-swift", "version": "0.41.2" } diff --git a/src/__mocks__/jest.setup.ts b/src/__mocks__/jest.setup.ts index 96c17ca52..54af1eae9 100644 --- a/src/__mocks__/jest.setup.ts +++ b/src/__mocks__/jest.setup.ts @@ -45,13 +45,18 @@ jest.doMock('react-native', () => { // Extend ReactNative return Object.setPrototypeOf( { - // Mock RNIterableAPI - NativeModules: { - ...ReactNative.NativeModules, - RNIterableAPI: MockRNIterableAPI, - }, Linking: MockLinking, NativeEventEmitter: mockNativeEventEmitterConstructor, + TurboModuleRegistry: { + ...ReactNative.TurboModuleRegistry, + getEnforcing: jest.fn((name: string) => { + if (name === 'RNIterableAPI') { + return MockRNIterableAPI; + } + + return ReactNative.TurboModuleRegistry.getEnforcing(name); + }), + }, }, ReactNative ); diff --git a/src/api/NativeRNIterableAPI.ts b/src/api/NativeRNIterableAPI.ts index 86b8913e6..589b2ffe9 100644 --- a/src/api/NativeRNIterableAPI.ts +++ b/src/api/NativeRNIterableAPI.ts @@ -178,15 +178,4 @@ export interface Spec extends TurboModule { removeListeners(count: number): void; } -// Check if we're in a test environment -const isTestEnvironment = () => { - return ( - typeof jest !== 'undefined' || - process.env.NODE_ENV === 'test' || - process.env.JEST_WORKER_ID !== undefined - ); -}; - -export default isTestEnvironment() - ? undefined - : TurboModuleRegistry.getEnforcing('RNIterableAPI'); +export default TurboModuleRegistry.getEnforcing('RNIterableAPI'); diff --git a/src/api/index.ts b/src/api/index.ts index 9c327891b..31128335d 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,6 +1,4 @@ -import { NativeModules } from 'react-native'; -import BridgelessModule from './NativeRNIterableAPI'; - -export const RNIterableAPI = BridgelessModule ?? NativeModules.RNIterableAPI; +import RNIterableAPI from './NativeRNIterableAPI'; +export { RNIterableAPI }; export default RNIterableAPI; diff --git a/src/core/classes/Iterable.ts b/src/core/classes/Iterable.ts index 983fab49b..a9ec4083a 100644 --- a/src/core/classes/Iterable.ts +++ b/src/core/classes/Iterable.ts @@ -383,25 +383,7 @@ export class Iterable { * ``` */ static getAttributionInfo(): Promise { - return IterableApi.getAttributionInfo().then( - ( - dict: { - campaignId: number; - templateId: number; - messageId: string; - } | null - ) => { - if (dict) { - return new IterableAttributionInfo( - dict.campaignId as number, - dict.templateId as number, - dict.messageId as string - ); - } else { - return undefined; - } - } - ); + return IterableApi.getAttributionInfo(); } /** diff --git a/src/core/classes/IterableApi.test.ts b/src/core/classes/IterableApi.test.ts index 77a229c58..44cfbfd31 100644 --- a/src/core/classes/IterableApi.test.ts +++ b/src/core/classes/IterableApi.test.ts @@ -1113,9 +1113,11 @@ describe('IterableApi', () => { IterableApi.setAttributionInfo(attributionInfo); // THEN RNIterableAPI.setAttributionInfo is called with attribution info - expect(MockRNIterableAPI.setAttributionInfo).toBeCalledWith( - attributionInfo - ); + expect(MockRNIterableAPI.setAttributionInfo).toBeCalledWith({ + campaignId: attributionInfo.campaignId, + templateId: attributionInfo.templateId, + messageId: attributionInfo.messageId, + }); }); it('should call RNIterableAPI.setAttributionInfo with undefined', () => { diff --git a/src/core/classes/IterableApi.ts b/src/core/classes/IterableApi.ts index 88820c9f3..272f2ae79 100644 --- a/src/core/classes/IterableApi.ts +++ b/src/core/classes/IterableApi.ts @@ -9,11 +9,14 @@ import type { IterableInAppLocation } from '../../inApp/enums/IterableInAppLocat import type { IterableInAppShowResponse } from '../../inApp/enums/IterableInAppShowResponse'; import type { IterableInboxImpressionRowInfo } from '../../inbox/types/IterableInboxImpressionRowInfo'; import { IterableAttributionInfo } from './IterableAttributionInfo'; +import type { IterableAuthResponse } from './IterableAuthResponse'; import type { IterableCommerceItem } from './IterableCommerceItem'; import { IterableConfig } from './IterableConfig'; import { IterableLogger } from './IterableLogger'; import type { IterableEmbeddedMessage } from '../../embedded/types/IterableEmbeddedMessage'; +type NativeDataRecord = { [key: string]: string | number | boolean }; + /** * Contains functions that directly interact with the native layer. */ @@ -145,7 +148,10 @@ export class IterableApi { */ static updateUser(dataFields: unknown, mergeNestedObjects: boolean) { IterableLogger.log('updateUser: ', dataFields, mergeNestedObjects); - return RNIterableAPI.updateUser(dataFields, mergeNestedObjects); + return RNIterableAPI.updateUser( + dataFields as NativeDataRecord, + mergeNestedObjects + ); } /** @@ -156,7 +162,7 @@ export class IterableApi { */ static updateEmail(email: string, authToken?: string | null) { IterableLogger.log('updateEmail: ', email, authToken); - return RNIterableAPI.updateEmail(email, authToken); + return RNIterableAPI.updateEmail(email, authToken as string | undefined); } // ---- End USER MANAGEMENT ---- // @@ -199,9 +205,9 @@ export class IterableApi { return RNIterableAPI.trackPushOpenWithCampaignId( campaignId, templateId, - messageId, + messageId as string, appAlreadyRunning, - dataFields + dataFields as NativeDataRecord | undefined ); } @@ -223,7 +229,11 @@ export class IterableApi { dataFields?: unknown; }) { IterableLogger.log('trackPurchase: ', total, items, dataFields); - return RNIterableAPI.trackPurchase(total, items, dataFields); + return RNIterableAPI.trackPurchase( + total, + items as unknown as NativeDataRecord[], + dataFields as NativeDataRecord | undefined + ); } /** @@ -323,7 +333,10 @@ export class IterableApi { dataFields?: unknown; }) { IterableLogger.log('trackEvent: ', name, dataFields); - return RNIterableAPI.trackEvent(name, dataFields); + return RNIterableAPI.trackEvent( + name, + dataFields as NativeDataRecord | undefined + ); } // ---- End TRACKING ---- // @@ -347,9 +360,16 @@ export class IterableApi { * * @param authToken - The auth token to pass along */ - static passAlongAuthToken(authToken: string | null | undefined) { + static passAlongAuthToken( + authToken: string | null | undefined + ): Promise { IterableLogger.log('passAlongAuthToken: ', authToken); - return RNIterableAPI.passAlongAuthToken(authToken); + return Promise.resolve( + RNIterableAPI.passAlongAuthToken(authToken) as unknown as + | IterableAuthResponse + | string + | undefined + ); } // ---- End AUTH ---- // @@ -464,7 +484,9 @@ export class IterableApi { messageId: string ): Promise { IterableLogger.log('getHtmlInAppContentForMessage: ', messageId); - return RNIterableAPI.getHtmlInAppContentForMessage(messageId); + return RNIterableAPI.getHtmlInAppContentForMessage( + messageId + ) as unknown as Promise; } /** @@ -484,7 +506,9 @@ export class IterableApi { */ static startSession(visibleRows: IterableInboxImpressionRowInfo[]) { IterableLogger.log('startSession: ', visibleRows); - return RNIterableAPI.startSession(visibleRows); + return RNIterableAPI.startSession( + visibleRows as unknown as NativeDataRecord[] + ); } /** @@ -502,7 +526,9 @@ export class IterableApi { */ static updateVisibleRows(visibleRows: IterableInboxImpressionRowInfo[] = []) { IterableLogger.log('updateVisibleRows: ', visibleRows); - return RNIterableAPI.updateVisibleRows(visibleRows); + return RNIterableAPI.updateVisibleRows( + visibleRows as unknown as NativeDataRecord[] + ); } // ---- End IN-APP ---- // @@ -572,7 +598,11 @@ export class IterableApi { clickedUrl: string | null ) { IterableLogger.log('trackEmbeddedClick: ', message, buttonId, clickedUrl); - return RNIterableAPI.trackEmbeddedClick(message, buttonId, clickedUrl); + return RNIterableAPI.trackEmbeddedClick( + message as Parameters[0], + buttonId, + clickedUrl + ); } // ---- End EMBEDDED ---- // @@ -588,7 +618,7 @@ export class IterableApi { */ static updateCart(items: IterableCommerceItem[]) { IterableLogger.log('updateCart: ', items); - return RNIterableAPI.updateCart(items); + return RNIterableAPI.updateCart(items as unknown as NativeDataRecord[]); } /** @@ -670,25 +700,22 @@ export class IterableApi { static getAttributionInfo() { IterableLogger.log('getAttributionInfo'); // FIXME: What if this errors? - return RNIterableAPI.getAttributionInfo().then( - ( - dict: { - campaignId: number; - templateId: number; - messageId: string; - } | null - ) => { - if (dict) { - return new IterableAttributionInfo( - dict.campaignId as number, - dict.templateId as number, - dict.messageId as string - ); - } else { - return undefined; - } + return RNIterableAPI.getAttributionInfo().then((dict) => { + if ( + dict && + typeof dict.campaignId === 'number' && + typeof dict.templateId === 'number' && + typeof dict.messageId === 'string' + ) { + return new IterableAttributionInfo( + dict.campaignId, + dict.templateId, + dict.messageId + ); } - ); + + return undefined; + }); } /** @@ -698,7 +725,15 @@ export class IterableApi { */ static setAttributionInfo(attributionInfo?: IterableAttributionInfo) { IterableLogger.log('setAttributionInfo: ', attributionInfo); - return RNIterableAPI.setAttributionInfo(attributionInfo); + return RNIterableAPI.setAttributionInfo( + (attributionInfo + ? { + campaignId: attributionInfo.campaignId, + templateId: attributionInfo.templateId, + messageId: attributionInfo.messageId, + } + : undefined) as NativeDataRecord | null + ); } // ---- End MOSC ---- // From e05f5cb299fa647e0f4402251328180cc9582959 Mon Sep 17 00:00:00 2001 From: Loren Posen Date: Tue, 9 Jun 2026 15:35:24 -0700 Subject: [PATCH 2/2] chore: update Xcode project configuration to reflect changes in Pods and build phases --- .../project.pbxproj | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj b/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj index 33b69e5e6..6cc088f7c 100644 --- a/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj +++ b/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj @@ -8,15 +8,14 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* ReactNativeSdkExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeSdkExampleTests.m */; }; + 044F224ABD6C839935A95286 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 73A96708D3CDBD435D453DDD /* libPods-ReactNativeSdkExample.a */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 779227342DFA3FB500D69EC0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779227332DFA3FB500D69EC0 /* AppDelegate.swift */; }; 77E3B5772EA71A4B001449CE /* IterableJwtGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77E3B5742EA71A4B001449CE /* IterableJwtGenerator.swift */; }; 77E3B5782EA71A4B001449CE /* JwtTokenModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77E3B5752EA71A4B001449CE /* JwtTokenModule.mm */; }; 77E3B5792EA71A4B001449CE /* JwtTokenModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77E3B5762EA71A4B001449CE /* JwtTokenModule.swift */; }; - 7C8CB9778D44155D232C3690 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8A71BC6B8F9B2B3CF98A77 /* libPods-ReactNativeSdkExample.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; A3A40C20801B8F02005FA4C0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1FC6B09E65A7BD9F6864C5D8 /* PrivacyInfo.xcprivacy */; }; - DDD9C96E1785FEF10EEE61A5 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 627B7C7165CE568DB5CB8F50 /* libPods-ReactNativeSdkExample.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -39,8 +38,7 @@ 13B07FB71A68108700A75B9A /* ReactNativeSdkExample.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = ReactNativeSdkExample.entitlements; path = ReactNativeSdkExample/ReactNativeSdkExample.entitlements; sourceTree = ""; }; 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = ReactNativeSdkExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; 1FC6B09E65A7BD9F6864C5D8 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = ReactNativeSdkExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 5D6CA6ECC26D5E3B8D778E91 /* Pods-ReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.debug.xcconfig"; sourceTree = ""; }; - 627B7C7165CE568DB5CB8F50 /* libPods-ReactNativeSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 73A96708D3CDBD435D453DDD /* libPods-ReactNativeSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 779227312DFA3FB500D69EC0 /* ReactNativeSdkExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNativeSdkExample-Bridging-Header.h"; sourceTree = ""; }; 779227322DFA3FB500D69EC0 /* ReactNativeSdkExampleTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNativeSdkExampleTests-Bridging-Header.h"; sourceTree = ""; }; 779227332DFA3FB500D69EC0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = ReactNativeSdkExample/AppDelegate.swift; sourceTree = ""; }; @@ -48,7 +46,8 @@ 77E3B5752EA71A4B001449CE /* JwtTokenModule.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = JwtTokenModule.mm; sourceTree = ""; }; 77E3B5762EA71A4B001449CE /* JwtTokenModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JwtTokenModule.swift; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeSdkExample/LaunchScreen.storyboard; sourceTree = ""; }; - 97E816223ABF0AF81818FFC2 /* Pods-ReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.release.xcconfig"; sourceTree = ""; }; + 9EB47F2080B0550350CC7D33 /* Pods-ReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.release.xcconfig"; sourceTree = ""; }; + E8FEB6D15DD0FB888302BE84 /* Pods-ReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.debug.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -64,7 +63,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DDD9C96E1785FEF10EEE61A5 /* libPods-ReactNativeSdkExample.a in Frameworks */, + 044F224ABD6C839935A95286 /* libPods-ReactNativeSdkExample.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -108,7 +107,7 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 627B7C7165CE568DB5CB8F50 /* libPods-ReactNativeSdkExample.a */, + 73A96708D3CDBD435D453DDD /* libPods-ReactNativeSdkExample.a */, ); name = Frameworks; sourceTree = ""; @@ -150,8 +149,8 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 5D6CA6ECC26D5E3B8D778E91 /* Pods-ReactNativeSdkExample.debug.xcconfig */, - 97E816223ABF0AF81818FFC2 /* Pods-ReactNativeSdkExample.release.xcconfig */, + E8FEB6D15DD0FB888302BE84 /* Pods-ReactNativeSdkExample.debug.xcconfig */, + 9EB47F2080B0550350CC7D33 /* Pods-ReactNativeSdkExample.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -181,13 +180,13 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeSdkExample" */; buildPhases = ( - A286DF5F63E46316F3012613 /* [CP] Check Pods Manifest.lock */, + 0C9DF1A552A78FD6B5AE4C9E /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - C291FA7A286A5A6C809214BF /* [CP] Embed Pods Frameworks */, - DA5584E2135C9BE15A390C81 /* [CP] Copy Pods Resources */, + 17452EABB8DFFBB031EC77DF /* [CP] Embed Pods Frameworks */, + B8C8662A72640B3F9BA9BE86 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -273,7 +272,7 @@ shellPath = /bin/sh; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"\\\"$WITH_ENVIRONMENT\\\" \\\"$REACT_NATIVE_XCODE\\\"\"\n"; }; - A286DF5F63E46316F3012613 /* [CP] Check Pods Manifest.lock */ = { + 0C9DF1A552A78FD6B5AE4C9E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -295,7 +294,7 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - C291FA7A286A5A6C809214BF /* [CP] Embed Pods Frameworks */ = { + 17452EABB8DFFBB031EC77DF /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -312,7 +311,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - DA5584E2135C9BE15A390C81 /* [CP] Copy Pods Resources */ = { + B8C8662A72640B3F9BA9BE86 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -420,7 +419,7 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5D6CA6ECC26D5E3B8D778E91 /* Pods-ReactNativeSdkExample.debug.xcconfig */; + baseConfigurationReference = E8FEB6D15DD0FB888302BE84 /* Pods-ReactNativeSdkExample.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -452,7 +451,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 97E816223ABF0AF81818FFC2 /* Pods-ReactNativeSdkExample.release.xcconfig */; + baseConfigurationReference = 9EB47F2080B0550350CC7D33 /* Pods-ReactNativeSdkExample.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES;