diff --git a/Build ReactNativeSdkExample_2026-01-07T10-43-40.txt b/Build ReactNativeSdkExample_2026-01-07T10-43-40.txt new file mode 100644 index 000000000..322e1e288 --- /dev/null +++ b/Build ReactNativeSdkExample_2026-01-07T10-43-40.txt @@ -0,0 +1,96 @@ + +Showing All Errors Only + +Build target Iterable-React-Native-SDK of project Pods with configuration Debug + +SwiftCompile normal arm64 Compiling\ Serialization.swift /Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift (in target 'Iterable-React-Native-SDK' from project 'Pods') + +Failed frontend command: +/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c /Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/ReactIterableAPI.swift -primary-file /Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift -emit-dependencies-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.d -emit-const-values-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.swiftconstvalues -emit-reference-dependencies-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.swiftdeps -serialize-diagnostics-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.dia -target arm64-apple-ios15.1-simulator -load-resolved-plugin /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins/libFoundationMacros.dylib\#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server\#FoundationMacros -load-resolved-plugin /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins/libObservationMacros.dylib\#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server\#ObservationMacros -load-resolved-plugin /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins/libPreviewsMacros.dylib\#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server\#PreviewsMacros -load-resolved-plugin /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins/libSwiftMacros.dylib\#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server\#SwiftMacros -load-resolved-plugin /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins/libSwiftUIMacros.dylib\#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server\#SwiftUIMacros -disable-implicit-swift-modules -Xcc -fno-implicit-modules -Xcc -fno-implicit-module-maps -explicit-swift-module-map-file /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Iterable_React_Native_SDK-dependencies-5.json -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator26.2.sdk -I /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/Iterable-React-Native-SDK -I /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/Iterable-iOS-SDK -F /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/Iterable-React-Native-SDK -F /Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal -F /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/hermes-engine/Pre-built -no-color-diagnostics -Xcc -fno-color-diagnostics -enable-testing -g -debug-info-format\=dwarf -dwarf-version\=4 -import-underlying-module -module-cache-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules -swift-version 5 -enforce-exclusivity\=checked -Onone -D DEBUG -D COCOAPODS -D RCT_NEW_ARCH_ENABLED -serialize-debugging-options -const-gather-protocols-file /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Iterable-React-Native-SDK_const_extract_protocols.json -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods -enable-anonymous-context-mangled-names -file-compilation-dir /Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods -Xcc -fmodule-map-file\=/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/Iterable-iOS-SDK/IterableSDK.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/DoubleConversion/DoubleConversion.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTFabric/React-RCTFabric.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTRuntime/React-RCTRuntime.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React/React-Core.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/ReactCodegen/ReactCodegen.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/ReactCommon/ReactCommon.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React_Fabric/React-Fabric.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React_FabricComponents/React-FabricComponents.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/folly/RCT-Folly.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/glog/glog.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/jsi/React-jsi.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/jsinspector_modern/React-jsinspector.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/jsinspector_modern_tracing/React-jsinspectortracing.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_debug/React-debug.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_featureflags/React-featureflags.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_nativemodule_defaults/React-defaultsnativemodule.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_nativemodule_dom/React-domnativemodule.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_nativemodule_featureflags/React-featureflagsnativemodule.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_nativemodule_idlecallbacks/React-idlecallbacksnativemodule.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_nativemodule_microtasks/React-microtasksnativemodule.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_renderer_css/React-renderercss.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_renderer_graphics/React-graphics.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_runtime/React-jsitooling.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/react_utils/React-utils.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/reacthermes/React-hermes.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/yoga/Yoga.modulemap -Xcc -fmodule-map-file\=/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/Iterable_React_Native_SDK/Iterable-React-Native-SDK.modulemap -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/SDKStatCaches.noindex/iphonesimulator26.2-23C53-7d00a8b37fbd7999ea79df8ebc024bf0.sdkstatcache -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Iterable-React-Native-SDK-generated-files.hmap -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Iterable-React-Native-SDK-own-target-headers.hmap -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Iterable-React-Native-SDK-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Pods-8699adb1dd336b26511df848a716bd42-VFS-iphonesimulator/all-product-headers.yaml -Xcc -iquote -Xcc /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Iterable-React-Native-SDK-project-headers.hmap -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Products/Debug-iphonesimulator/Iterable-React-Native-SDK/include -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Private -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Private/Iterable-React-Native-SDK -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/DoubleConversion -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/FBLazyVector -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/Iterable-iOS-SDK -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCT-Folly -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTRequired -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/RCTTypeSafety -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-Core -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-Fabric -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-FabricComponents -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-FabricImage -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-ImageManager -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-Mapbuffer -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-NativeModulesApple -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTAnimation -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTBlob -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTFBReactNativeSpec -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTFabric -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTRuntime -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RCTText -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RuntimeApple -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RuntimeCore -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-RuntimeHermes -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-callinvoker -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-cxxreact -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-debug -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-defaultsnativemodule -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-domnativemodule -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-featureflags -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-featureflagsnativemodule -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-graphics -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-hermes -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-idlecallbacksnativemodule -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jserrorhandler -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jsi -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jsiexecutor -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jsinspector -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jsinspectortracing -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-jsitooling -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-logger -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-microtasksnativemodule -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-oscompat -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-perflogger -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-performancetimeline -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-rendererconsistency -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-renderercss -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-rendererdebug -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-runtimeexecutor -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-runtimescheduler -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-timing -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/React-utils -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/ReactCodegen -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/ReactCommon -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/Yoga -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/boost -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/fast_float -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/fmt -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/glog -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Public/hermes-engine -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/boost -Xcc -I/Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods/Headers/Private/Yoga -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/DerivedSources-normal/arm64 -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/DerivedSources/arm64 -Xcc -I/Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/DerivedSources -Xcc -DPOD_CONFIGURATION_DEBUG\=1 -Xcc -DDEBUG\=1 -Xcc -DCOCOAPODS\=1 -no-auto-bridging-header-chaining -module-name Iterable_React_Native_SDK -frontend-parseable-output -disable-clang-spi -target-sdk-version 26.2 -target-sdk-name iphonesimulator26.2 -clang-target arm64-apple-ios26.2-simulator -in-process-plugin-server-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -o /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.o -index-unit-output-path /Pods.build/Debug-iphonesimulator/Iterable-React-Native-SDK.build/Objects-normal/arm64/Serialization.o -index-store-path /Users/Loren.Posen/Library/Developer/Xcode/DerivedData/ReactNativeSdkExample-ghyslpaqbvrzvzdjqnqceksrqnul/Index.noindex/DataStore -index-system-modules + +SwiftCompile normal arm64 /Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift (in target 'Iterable-React-Native-SDK' from project 'Pods') + cd /Users/Loren.Posen/mobile/RN/react-native-sdk/example/ios/Pods + + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:390:43: error: extra arguments at positions #1, #2, #3, #4 in call + let metadata = EmbeddedMessageMetadata( + ^ +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageMetadata.init:3:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:391:7: error: missing argument for parameter 'from' in call + messageId: messageId, + ^ + from: <#any Decoder#>, +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageMetadata.init:3:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:409:68: error: 'nil' is not compatible with closure result type 'IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsButton' + guard let id = buttonDict["id"] as? String else { return nil } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:427:66: error: 'nil' is not compatible with closure result type 'IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsText' + guard let id = textDict["id"] as? String else { return nil } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:438:85: error: extra arguments at positions #1, #2 in call + defaultAction = EmbeddedMessageElements.EmbeddedMessageElementsDefaultAction(type: type, data: data) + ^ +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsDefaultAction.init:4:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:438:86: error: missing argument for parameter 'from' in call + defaultAction = EmbeddedMessageElements.EmbeddedMessageElementsDefaultAction(type: type, data: data) + ^ + from: <#any Decoder#>, +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsDefaultAction.init:4:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:441:41: error: extra arguments at positions #1, #2, #3, #4, #5, #6, #7 in call + elements = EmbeddedMessageElements( + ^ +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageElements.init:3:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:442:9: error: missing argument for parameter 'from' in call + title: title, + ^ + from: <#any Decoder#>, +IterableSDK.IterableEmbeddedMessage.EmbeddedMessageElements.init:3:8: note: 'init(from:)' declared here +public init(from decoder: any Decoder) throws } + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:455:35: error: extra arguments at positions #1, #2, #3 in call + return IterableEmbeddedMessage(metadata: metadata, elements: elements, payload: payload) + ^ +IterableSDK.IterableEmbeddedMessage.init:2:20: note: 'init(from:)' declared here +public convenience init(from decoder: any Decoder) throws} + ^ +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:455:36: error: missing argument for parameter 'from' in call + return IterableEmbeddedMessage(metadata: metadata, elements: elements, payload: payload) + ^ + from: <#any Decoder#>, +IterableSDK.IterableEmbeddedMessage.init:2:20: note: 'init(from:)' declared here +public convenience init(from decoder: any Decoder) throws} + ^ + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:390:43: Extra arguments at positions #1, #2, #3, #4 in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:391:7: Missing argument for parameter 'from' in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:409:68: 'nil' is not compatible with closure result type 'IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsButton' + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:427:66: 'nil' is not compatible with closure result type 'IterableEmbeddedMessage.EmbeddedMessageElements.EmbeddedMessageElementsText' + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:438:85: Extra arguments at positions #1, #2 in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:438:86: Missing argument for parameter 'from' in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:441:41: Extra arguments at positions #1, #2, #3, #4, #5, #6, #7 in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:442:9: Missing argument for parameter 'from' in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:455:35: Extra arguments at positions #1, #2, #3 in call + +/Users/Loren.Posen/mobile/RN/react-native-sdk/ios/RNIterableAPI/Serialization.swift:455:36: Missing argument for parameter 'from' in call + + + +Build failed 1/7/26, 10:43 AM 16.3 seconds diff --git a/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj b/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj index 766c9b681..4a233f179 100644 --- a/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj +++ b/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 13B07F961A680F5B00A75B9A /* ReactNativeSdkExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactNativeSdkExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactNativeSdkExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeSdkExample/Info.plist; sourceTree = ""; }; + 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 = ""; }; 3A95ED4563D4389808EDEA8F /* 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 = ""; }; @@ -91,6 +92,7 @@ children = ( 13B07FB51A68108700A75B9A /* Images.xcassets */, 779227332DFA3FB500D69EC0 /* AppDelegate.swift */, + 13B07FB71A68108700A75B9A /* ReactNativeSdkExample.entitlements */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, @@ -277,14 +279,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks.sh\"\n"; @@ -320,14 +318,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources.sh\"\n"; @@ -430,6 +424,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = ReactNativeSdkExample/ReactNativeSdkExample.entitlements; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = BP98Z28R86; ENABLE_BITCODE = NO; @@ -460,6 +455,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = ReactNativeSdkExample/ReactNativeSdkExample.entitlements; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = BP98Z28R86; INFOPLIST_FILE = ReactNativeSdkExample/Info.plist; @@ -555,7 +551,10 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); - OTHER_LDFLAGS = "$(inherited) "; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; @@ -628,7 +627,10 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); - OTHER_LDFLAGS = "$(inherited) "; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; diff --git a/example/ios/ReactNativeSdkExample/ReactNativeSdkExample.entitlements b/example/ios/ReactNativeSdkExample/ReactNativeSdkExample.entitlements new file mode 100644 index 000000000..4884860d8 --- /dev/null +++ b/example/ios/ReactNativeSdkExample/ReactNativeSdkExample.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.web-browser + + + diff --git a/example/src/hooks/useIterableApp.tsx b/example/src/hooks/useIterableApp.tsx index 0affc08ce..6e258c617 100644 --- a/example/src/hooks/useIterableApp.tsx +++ b/example/src/hooks/useIterableApp.tsx @@ -6,7 +6,7 @@ import { useState, type FunctionComponent, } from 'react'; -import { Alert } from 'react-native'; +import { Alert, Platform } from 'react-native'; import { Iterable, @@ -252,6 +252,10 @@ export const IterableAppProvider: FunctionComponent< '`Iterable.initialize` failed with the following error', err ); + if (Platform.OS === 'ios' && getUserId()) { + setIsInitialized(true); + return login(); + } setIsInitialized(false); setLoginInProgress(false); return Promise.reject(err); diff --git a/ios/RNIterableAPI/RNIterableAPI.mm b/ios/RNIterableAPI/RNIterableAPI.mm index 91955f797..ffb246e7c 100644 --- a/ios/RNIterableAPI/RNIterableAPI.mm +++ b/ios/RNIterableAPI/RNIterableAPI.mm @@ -277,6 +277,43 @@ - (void)pauseAuthRetries:(BOOL)pauseRetry { [_swiftAPI pauseAuthRetries:pauseRetry]; } +- (void)syncEmbeddedMessages { + [_swiftAPI syncEmbeddedMessages]; +} + +- (void)startEmbeddedSession { + [_swiftAPI startEmbeddedSession]; +} + +- (void)endEmbeddedSession { + [_swiftAPI endEmbeddedSession]; +} + +- (void)startEmbeddedImpression:(NSString *)messageId placementId:(double)placementId { + [_swiftAPI startEmbeddedImpression:messageId placementId:placementId]; +} + +- (void)pauseEmbeddedImpression:(NSString *)messageId { + [_swiftAPI pauseEmbeddedImpression:messageId]; +} + +- (void)getEmbeddedPlacementIds:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + [_swiftAPI getEmbeddedPlacementIds:resolve rejecter:reject]; +} + +- (void)getEmbeddedMessages:(NSArray *_Nullable)placementIds + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + [_swiftAPI getEmbeddedMessages:placementIds resolver:resolve rejecter:reject]; +} + +- (void)trackEmbeddedClick:(NSDictionary *)message + buttonId:(NSString *_Nullable)buttonId + clickedUrl:(NSString *_Nullable)clickedUrl { + [_swiftAPI trackEmbeddedClick:message buttonId:buttonId clickedUrl:clickedUrl]; +} + - (void)wakeApp { // Placeholder function -- this method is only used in Android } @@ -507,6 +544,38 @@ - (void)wakeApp { [_swiftAPI pauseAuthRetries:pauseRetry]; } +RCT_EXPORT_METHOD(syncEmbeddedMessages) { + [_swiftAPI syncEmbeddedMessages]; +} + +RCT_EXPORT_METHOD(startEmbeddedSession) { + [_swiftAPI startEmbeddedSession]; +} + +RCT_EXPORT_METHOD(endEmbeddedSession) { + [_swiftAPI endEmbeddedSession]; +} + +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(getEmbeddedPlacementIds : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) { + [_swiftAPI getEmbeddedPlacementIds:resolve rejecter:reject]; +} + +RCT_EXPORT_METHOD(getEmbeddedMessages : (NSArray *_Nullable)placementIds resolve : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) { + [_swiftAPI getEmbeddedMessages:placementIds resolver:resolve rejecter:reject]; +} + +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 } diff --git a/ios/RNIterableAPI/ReactIterableAPI.swift b/ios/RNIterableAPI/ReactIterableAPI.swift index 80c0a9cab..3143137e0 100644 --- a/ios/RNIterableAPI/ReactIterableAPI.swift +++ b/ios/RNIterableAPI/ReactIterableAPI.swift @@ -493,6 +493,105 @@ import React IterableAPI.pauseAuthRetries(pauseRetry) } + // MARK: - SDK Embedded Messaging Functions + + @objc(syncEmbeddedMessages) + public func syncEmbeddedMessages() { + ITBInfo() + IterableAPI.embeddedManager.syncMessages { } + } + + @objc(startEmbeddedSession) + public func startEmbeddedSession() { + ITBInfo() + EmbeddedSessionManager.shared.startSession() + } + + @objc(endEmbeddedSession) + public func endEmbeddedSession() { + ITBInfo() + EmbeddedSessionManager.shared.endSession() + } + + @objc(startEmbeddedImpression:placementId:) + public func startEmbeddedImpression(messageId: String, placementId: Double) { + ITBInfo() + EmbeddedSessionManager.shared.startImpression(messageId: messageId, placementId: placementId) + } + + @objc(pauseEmbeddedImpression:) + public func pauseEmbeddedImpression(messageId: String) { + ITBInfo() + EmbeddedSessionManager.shared.pauseImpression(messageId: messageId) + } + + @objc(getEmbeddedPlacementIds:rejecter:) + public func getEmbeddedPlacementIds( + resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock + ) { + ITBInfo() + let messages = IterableAPI.embeddedManager.getMessages() + let placementIds = Set(messages.compactMap { $0.metadata.placementId }) + let sortedPlacementIds = Array(placementIds).sorted() + resolver(sortedPlacementIds) + } + + @objc(getEmbeddedMessages:resolver:rejecter:) + public func getEmbeddedMessages( + placementIds: [NSNumber]?, resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock + ) { + ITBInfo() + var messages: [IterableEmbeddedMessage] = [] + + if let placementIds = placementIds, !placementIds.isEmpty { + // Get messages for specific placement IDs + for placementId in placementIds { + let placementMessages = IterableAPI.embeddedManager.getMessages( + for: placementId.intValue + ) + messages.append(contentsOf: placementMessages) + } + } else { + // Get all messages + messages = IterableAPI.embeddedManager.getMessages() + } + + resolver(messages.map { $0.toDict() }) + } + + @objc(trackEmbeddedClick:buttonId:clickedUrl:) + public func trackEmbeddedClick( + message: NSDictionary, buttonId: String?, clickedUrl: String? + ) { + ITBInfo() + + // Extract message ID from the dictionary + guard let messageDict = message as? [AnyHashable: Any], + let metadataDict = messageDict["metadata"] as? [AnyHashable: Any], + let messageId = metadataDict["messageId"] as? String else { + ITBError("Could not extract messageId from message dictionary") + return + } + + // Find the message in the embedded manager's cache + let messages = IterableAPI.embeddedManager.getMessages() + guard let embeddedMessage = messages.first(where: { $0.metadata.messageId == messageId }) else { + ITBError("Could not find embedded message with id: \(messageId)") + return + } + + guard let clickedUrl = clickedUrl else { + ITBError("clickedUrl is required for trackEmbeddedClick") + return + } + + IterableAPI.track( + embeddedMessageClick: embeddedMessage, + buttonIdentifier: buttonId, + clickedUrl: clickedUrl + ) + } + // MARK: Private private var shouldEmit = false private let _methodQueue = DispatchQueue(label: String(describing: ReactIterableAPI.self)) diff --git a/ios/RNIterableAPI/Serialization.swift b/ios/RNIterableAPI/Serialization.swift index 3f837ab2c..88bca45cb 100644 --- a/ios/RNIterableAPI/Serialization.swift +++ b/ios/RNIterableAPI/Serialization.swift @@ -83,6 +83,10 @@ extension IterableConfig { config.useInMemoryStorageForInApps = useInMemoryStorageForInApp } + if let enableEmbeddedMessaging = dict["enableEmbeddedMessaging"] as? Bool { + config.enableEmbeddedMessaging = enableEmbeddedMessaging + } + if let dataRegion = dict["dataRegion"] as? NSNumber { switch dataRegion { case 0: @@ -279,3 +283,27 @@ extension InboxImpressionTracker.RowInfo { return rows.compactMap(InboxImpressionTracker.RowInfo.from(dict:)) } } + +extension IterableEmbeddedMessage { + func toDict() -> [AnyHashable: Any] { + var dict = [AnyHashable: Any]() + + // Serialize metadata (which is Codable) + if let metadataDict = SerializationUtil.encodableToDictionary(encodable: metadata) { + dict["metadata"] = metadataDict + } + + // Serialize elements if present (which is Codable) + if let elements = elements, + let elementsDict = SerializationUtil.encodableToDictionary(encodable: elements) { + dict["elements"] = elementsDict + } + + // Add payload directly + if let payload = payload { + dict["payload"] = payload + } + + return dict + } +}