1919#import < React/RCTViewManager.h>
2020#import < React/RCTUIManager.h>
2121#import < React/RCTBridge.h>
22+ #import < os/log.h>
2223#import " RoktEventManager.h"
2324
2425#ifdef RCT_NEW_ARCH_ENABLED
2526#import " RoktNativeLayoutComponentView.h"
2627#import < RNMParticle/RNMParticle.h>
2728#endif // RCT_NEW_ARCH_ENABLED
2829
30+ // os_log for [mParticle-Rokt] diagnostics: visible in production (Console.app, device logs)
31+ // and does not trigger RCT LogBox/warning UI in debug.
32+ static os_log_t _rokt_os_log (void ) {
33+ static os_log_t log;
34+ static dispatch_once_t once;
35+ dispatch_once (&once, ^{
36+ log = os_log_create (" com.mparticle.react-native" , " rokt" );
37+ });
38+ return log;
39+ }
40+
41+ static void _rokt_log (NSString *format, ...) {
42+ va_list args;
43+ va_start (args, format);
44+ NSString *msg = [[NSString alloc ] initWithFormat: format arguments: args];
45+ va_end (args);
46+ os_log_with_type (_rokt_os_log (), OS_LOG_TYPE_INFO, " %{public}s" , [msg UTF8String ]);
47+ }
48+
2949@interface RNMPRokt ()
3050
3151@property (nonatomic , nullable ) RoktEventManager *eventManager;
@@ -43,15 +63,15 @@ + (NSString *)moduleName {
4363}
4464
4565+ (void )load {
46- RCTLogWarn (@" [mParticle-Rokt] RNMPRokt module load" );
66+ _rokt_log (@" [mParticle-Rokt] RNMPRokt module load" );
4767 RCTRegisterModule (self);
4868}
4969
5070- (dispatch_queue_t )methodQueue
5171{
5272 BOOL bridgeNil = (self.bridge == nil );
5373 BOOL uiManagerNil = (self.bridge .uiManager == nil );
54- RCTLogWarn (@" [mParticle-Rokt] methodQueue called, bridge %@ , uiManager %@ " , bridgeNil ? @" nil" : @" non-nil" , uiManagerNil ? @" nil" : @" non-nil" );
74+ _rokt_log (@" [mParticle-Rokt] methodQueue called, bridge %@ , uiManager %@ " , bridgeNil ? @" nil" : @" non-nil" , uiManagerNil ? @" nil" : @" non-nil" );
5575 return self.bridge .uiManager .methodQueue ;
5676}
5777
@@ -69,10 +89,10 @@ - (void)setMethodQueue:(dispatch_queue_t)methodQueue
6989static NSDictionary * __attribute__ ((optnone)) safeExtractRoktConfigDict(
7090 JS::NativeMPRokt::RoktConfigType &roktConfig) {
7191 if (&roktConfig == nullptr ) {
72- RCTLogWarn (@" [mParticle-Rokt] safeExtractRoktConfigDict: roktConfig ref is nullptr, returning nil" );
92+ _rokt_log (@" [mParticle-Rokt] safeExtractRoktConfigDict: roktConfig ref is nullptr, returning nil" );
7393 return nil ;
7494 }
75- RCTLogWarn (@" [mParticle-Rokt] safeExtractRoktConfigDict: extracting config" );
95+ _rokt_log (@" [mParticle-Rokt] safeExtractRoktConfigDict: extracting config" );
7696 NSMutableDictionary *roktConfigDict = [[NSMutableDictionary alloc ] init ];
7797 if (roktConfig.cacheConfig ().has_value ()) {
7898 NSMutableDictionary *cacheConfigDict = [[NSMutableDictionary alloc ] init ];
@@ -84,11 +104,11 @@ - (void)setMethodQueue:(dispatch_queue_t)methodQueue
84104 cacheConfigDict[@" cacheAttributes" ] = cacheConfig.cacheAttributes ();
85105 }
86106 roktConfigDict[@" cacheConfig" ] = cacheConfigDict;
87- RCTLogWarn (@" [mParticle-Rokt] safeExtractRoktConfigDict: cacheConfig present, keys: %lu " , (unsigned long )roktConfigDict.count );
107+ _rokt_log (@" [mParticle-Rokt] safeExtractRoktConfigDict: cacheConfig present, keys: %lu " , (unsigned long )roktConfigDict.count );
88108 } else {
89- RCTLogWarn (@" [mParticle-Rokt] safeExtractRoktConfigDict: cacheConfig has no value" );
109+ _rokt_log (@" [mParticle-Rokt] safeExtractRoktConfigDict: cacheConfig has no value" );
90110 }
91- RCTLogWarn (@" [mParticle-Rokt] safeExtractRoktConfigDict: returning dict with %lu keys" , (unsigned long )roktConfigDict.count );
111+ _rokt_log (@" [mParticle-Rokt] safeExtractRoktConfigDict: returning dict with %lu keys" , (unsigned long )roktConfigDict.count );
92112 return roktConfigDict;
93113}
94114
@@ -99,7 +119,7 @@ - (void)selectPlacements:(NSString *)identifer
99119 roktConfig : (JS::NativeMPRokt::RoktConfigType &)roktConfig
100120 fontFilesMap : (NSDictionary *)fontFilesMap
101121{
102- RCTLogWarn (@" [mParticle-Rokt] New Architecture Implementation" );
122+ _rokt_log (@" [mParticle-Rokt] New Architecture Implementation" );
103123 NSMutableDictionary *finalAttributes = [self convertToMutableDictionaryOfStrings: attributes];
104124
105125 NSDictionary *roktConfigDict = safeExtractRoktConfigDict (roktConfig);
@@ -108,70 +128,70 @@ - (void)selectPlacements:(NSString *)identifer
108128// Old Architecture Implementation
109129RCT_EXPORT_METHOD (selectPlacements:(NSString *) identifer attributes:(NSDictionary *)attributes placeholders:(NSDictionary * _Nullable)placeholders roktConfig:(NSDictionary * _Nullable)roktConfig fontFilesMap:(NSDictionary * _Nullable)fontFilesMap)
110130{
111- RCTLogWarn (@" [mParticle-Rokt] Old Architecture Implementation" );
131+ _rokt_log (@" [mParticle-Rokt] Old Architecture Implementation" );
112132 NSMutableDictionary *finalAttributes = [self convertToMutableDictionaryOfStrings: attributes];
113133 MPRoktConfig *config = [self buildRoktConfigFromDict: roktConfig];
114134#endif
115135
116- RCTLogWarn (@" [mParticle-Rokt] selectPlacements called with identifier: %@ , attributes count: %lu " , identifer, (unsigned long )finalAttributes.count );
136+ _rokt_log (@" [mParticle-Rokt] selectPlacements called with identifier: %@ , attributes count: %lu " , identifer, (unsigned long )finalAttributes.count );
117137
118138 [MParticle _setWrapperSdk_internal: MPWrapperSdkReactNative version: @" " ];
119139 // Create callback implementation
120140 MPRoktEventCallback *callbacks = [[MPRoktEventCallback alloc ] init ];
121141 __weak __typeof__ (self) weakSelf = self;
122142
123143 callbacks.onLoad = ^{
124- RCTLogWarn (@" [mParticle-Rokt] onLoad" );
144+ _rokt_log (@" [mParticle-Rokt] onLoad" );
125145 [weakSelf.eventManager onRoktCallbackReceived: @" onLoad" ];
126146 };
127147
128148 callbacks.onUnLoad = ^{
129- RCTLogWarn (@" [mParticle-Rokt] onUnLoad" );
149+ _rokt_log (@" [mParticle-Rokt] onUnLoad" );
130150 [weakSelf.eventManager onRoktCallbackReceived: @" onUnLoad" ];
131151 };
132152
133153 callbacks.onShouldShowLoadingIndicator = ^{
134- RCTLogWarn (@" [mParticle-Rokt] onShouldShowLoadingIndicator" );
154+ _rokt_log (@" [mParticle-Rokt] onShouldShowLoadingIndicator" );
135155 [weakSelf.eventManager onRoktCallbackReceived: @" onShouldShowLoadingIndicator" ];
136156 };
137157
138158 callbacks.onShouldHideLoadingIndicator = ^{
139- RCTLogWarn (@" [mParticle-Rokt] onShouldHideLoadingIndicator" );
159+ _rokt_log (@" [mParticle-Rokt] onShouldHideLoadingIndicator" );
140160 [weakSelf.eventManager onRoktCallbackReceived: @" onShouldHideLoadingIndicator" ];
141161 };
142162
143163 callbacks.onEmbeddedSizeChange = ^(NSString *placementId, CGFloat height) {
144- RCTLogWarn (@" [mParticle-Rokt] onEmbeddedSizeChange" );
164+ _rokt_log (@" [mParticle-Rokt] onEmbeddedSizeChange" );
145165 [weakSelf.eventManager onWidgetHeightChanges: height placement: placementId];
146166 };
147167
148168 BOOL bridgeNil = (self.bridge == nil );
149169 BOOL uiManagerNil = (self.bridge .uiManager == nil );
150- RCTLogWarn (@" [mParticle-Rokt] bridge %@ , uiManager %@ " , bridgeNil ? @" nil" : @" non-nil" , uiManagerNil ? @" nil" : @" non-nil" );
170+ _rokt_log (@" [mParticle-Rokt] bridge %@ , uiManager %@ " , bridgeNil ? @" nil" : @" non-nil" , uiManagerNil ? @" nil" : @" non-nil" );
151171
152172 if (bridgeNil || uiManagerNil) {
153- RCTLogWarn (@" [mParticle-Rokt] addUIBlock skipped: self.bridge%@ is nil. selectPlacements will not be called. This can occur in New Architecture bridgeless production builds." , bridgeNil ? @" " : @" .uiManager" );
173+ _rokt_log (@" [mParticle-Rokt] addUIBlock skipped: self.bridge%@ is nil. selectPlacements will not be called. This can occur in New Architecture bridgeless production builds." , bridgeNil ? @" " : @" .uiManager" );
154174 } else {
155- RCTLogWarn (@" [mParticle-Rokt] queuing addUIBlock for identifier: %@ " , identifer);
175+ _rokt_log (@" [mParticle-Rokt] queuing addUIBlock for identifier: %@ " , identifer);
156176 }
157177 [self .bridge.uiManager addUIBlock: ^(RCTUIManager *uiManager, NSDictionary <NSNumber *,UIView *> *viewRegistry) {
158178 __strong __typeof__ (weakSelf) strongSelf = weakSelf;
159- RCTLogWarn (@" [mParticle-Rokt] addUIBlock executing for identifier: %@ , viewRegistry count: %lu " , identifer, (unsigned long )viewRegistry.count );
179+ _rokt_log (@" [mParticle-Rokt] addUIBlock executing for identifier: %@ , viewRegistry count: %lu " , identifer, (unsigned long )viewRegistry.count );
160180
161181 NSMutableDictionary *nativePlaceholders = strongSelf ? [strongSelf getNativePlaceholders: placeholders viewRegistry: viewRegistry] : [NSMutableDictionary dictionary ];
162182
163183 if (strongSelf) {
164184 [strongSelf subscribeViewEvents: identifer];
165185 }
166186
167- RCTLogWarn (@" [mParticle-Rokt] calling mParticle Core selectPlacements for: %@ " , identifer);
187+ _rokt_log (@" [mParticle-Rokt] calling mParticle Core selectPlacements for: %@ " , identifer);
168188 [[[MParticle sharedInstance ] rokt ] selectPlacements: identifer
169189 attributes: finalAttributes
170190 embeddedViews: nativePlaceholders
171191 config: config
172192 callbacks: callbacks];
173193 }];
174- RCTLogWarn (@" [mParticle-Rokt] addUIBlock enqueued for identifier: %@ " , identifer);
194+ _rokt_log (@" [mParticle-Rokt] addUIBlock enqueued for identifier: %@ " , identifer);
175195}
176196
177197RCT_EXPORT_METHOD (purchaseFinalized : (NSString *)placementId catalogItemId : (
@@ -210,7 +230,7 @@ - (MPColorMode)stringToColorMode:(NSString*)colorString
210230}
211231
212232- (MPRoktConfig *)buildRoktConfigFromDict:(NSDictionary <NSString *, id > *)configMap {
213- RCTLogWarn (@" [mParticle-Rokt] buildRoktConfigFromDict: configMap %@ " , configMap == nil ? @" nil" : [NSString stringWithFormat: @" non-nil (%lu keys)" , (unsigned long )configMap.count]);
233+ _rokt_log (@" [mParticle-Rokt] buildRoktConfigFromDict: configMap %@ " , configMap == nil ? @" nil" : [NSString stringWithFormat: @" non-nil (%lu keys)" , (unsigned long )configMap.count]);
214234 MPRoktConfig *config = [[MPRoktConfig alloc ] init ];
215235 BOOL isConfigEmpty = YES ;
216236
@@ -243,13 +263,13 @@ - (MPRoktConfig *)buildRoktConfigFromDict:(NSDictionary<NSString *, id> *)config
243263 config.cacheDuration = cacheDuration;
244264 }
245265
246- RCTLogWarn (@" [mParticle-Rokt] buildRoktConfigFromDict: returning %@ " , isConfigEmpty ? @" nil" : @" config" );
266+ _rokt_log (@" [mParticle-Rokt] buildRoktConfigFromDict: returning %@ " , isConfigEmpty ? @" nil" : @" config" );
247267 return isConfigEmpty ? nil : config;
248268}
249269
250270- (void )subscribeViewEvents:(NSString * _Nonnull) viewName
251271{
252- RCTLogWarn (@" [mParticle-Rokt] subscribeViewEvents for viewName: %@ " , viewName);
272+ _rokt_log (@" [mParticle-Rokt] subscribeViewEvents for viewName: %@ " , viewName);
253273 if (self.eventManager == nil ) {
254274 self.eventManager = [RoktEventManager allocWithZone: nil ];
255275 }
@@ -260,7 +280,7 @@ - (void)subscribeViewEvents:(NSString* _Nonnull) viewName
260280
261281- (NSMutableDictionary *)getNativePlaceholders:(NSDictionary *)placeholders viewRegistry:(NSDictionary <NSNumber *, UIView *> *)viewRegistry
262282{
263- RCTLogWarn (@" [mParticle-Rokt] getNativePlaceholders: placeholders %lu , viewRegistry %lu " , (unsigned long )placeholders.count , (unsigned long )viewRegistry.count );
283+ _rokt_log (@" [mParticle-Rokt] getNativePlaceholders: placeholders %lu , viewRegistry %lu " , (unsigned long )placeholders.count , (unsigned long )viewRegistry.count );
264284 NSMutableDictionary *nativePlaceholders = [[NSMutableDictionary alloc ]initWithCapacity:placeholders.count];
265285
266286 for (id key in placeholders){
@@ -282,14 +302,14 @@ - (NSMutableDictionary *)getNativePlaceholders:(NSDictionary *)placeholders view
282302#endif // RCT_NEW_ARCH_ENABLED
283303 }
284304
285- RCTLogWarn (@" [mParticle-Rokt] getNativePlaceholders: resolved %lu native placeholder(s)" , (unsigned long )nativePlaceholders.count );
305+ _rokt_log (@" [mParticle-Rokt] getNativePlaceholders: resolved %lu native placeholder(s)" , (unsigned long )nativePlaceholders.count );
286306 return nativePlaceholders;
287307}
288308
289309#ifdef RCT_NEW_ARCH_ENABLED
290310- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
291311 self.bridge = params.instance .bridge ;
292- RCTLogWarn (@" [mParticle-Rokt] getTurboModule: bridge set to %@ " , self.bridge == nil ? @" nil" : @" non-nil" );
312+ _rokt_log (@" [mParticle-Rokt] getTurboModule: bridge set to %@ " , self.bridge == nil ? @" nil" : @" non-nil" );
293313 return std::make_shared<facebook::react::NativeMPRoktSpecJSI>(params);
294314}
295315#endif // RCT_NEW_ARCH_ENABLED
0 commit comments