diff --git a/CHANGELOG.md b/CHANGELOG.md index 000974f2..ee8c4d91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Expo config plugin: optional `pinningDisabled` for `MPNetworkOptions` / `NetworkOptions` at SDK startup +### Changed + +- iOS: require `mParticle-Rokt >= 9.3.1, < 10.0`. `9.3.1` is the first kit release declaring `Rokt-Widget ~> 5.3`; `9.3.0` still allows `~> 5.2` +- iOS: no `Rokt-Widget` or `DcuiSchema` pins in the sample Podfile or Expo config plugin. Rokt iOS resolves through `mParticle-Rokt`, and `Rokt-Widget` `5.3` resolves `RoktUXHelper` `1.0.0`, which requires an exact `DcuiSchema` version, so the schema can no longer float out of sync. Remove any `DcuiSchema` pin, which now conflicts during resolution + ### Fixed - Preserve explicitly null custom event and product attributes as empty strings on iOS and Android, including product attributes with iOS New Architecture - iOS: raise the `mParticle-Apple-SDK-ObjC` floor to `>= 9.2.2` (was `~> 9.2`); the device-consent bridge uses `MParticle.deviceConsentState`, added in SDK `9.2.2`, so the previous floor permitted `9.2.0`/`9.2.1` which fail to compile -- iOS sample CI: pin `Rokt-Widget` to `5.2.0` and `DcuiSchema` to `2.7.0` (avoids `2.8.x` schema floating under Rokt’s `~> 2.6` and breaking `RoktUXHelper` Swift compile); GitHub Actions stays on Xcode 16.x +- iOS sample CI: GitHub Actions stays on Xcode 16.x - Android: raise the `com.mparticle:android-core` / `android-rokt-kit` dependency floor to `[5.79.2, 6.0)` (Expo plugin kit injection and bridge `android/build.gradle`), and bump the sample app to `5.79.2`. This guarantees consumers resolve a Rokt kit built against `com.rokt:roktsdk` `4.14.5`, which observes the Activity lifecycle from process start so overlay/bottom-sheet placements display even when `Rokt.init()` runs after the host Activity has resumed (deferred / late RN initialisation) ## [3.3.1] - 2026-07-24 diff --git a/ExpoTestApp/README.md b/ExpoTestApp/README.md index 0dd08634..9057c8e6 100644 --- a/ExpoTestApp/README.md +++ b/ExpoTestApp/README.md @@ -204,7 +204,7 @@ Check `ios/Podfile` for: - Kit pods (if specified): ```ruby - pod 'mParticle-Rokt', '~> 9.2' + pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' ``` ### Verify Android Integration diff --git a/MIGRATING.md b/MIGRATING.md index eddff73e..ed91fd8d 100644 --- a/MIGRATING.md +++ b/MIGRATING.md @@ -28,22 +28,30 @@ dependencies with the `[6.0.0, 7.0)` range. `selectShoppableAds` remains a no-op on Android in this release. -## Migrating to the mParticle Apple SDK 9.2.0 Rokt update +## Migrating to mParticle-Rokt 9.3.1+ (Rokt iOS 5.3 floor) -This update aligns the React Native wrapper with `mParticle-Apple-SDK` and -`mParticle-Rokt` `9.2.0`. The Apple Rokt kit now resolves `Rokt-Widget` `~> 5.2` -and `RoktContracts` `~> 2.0`. +This update aligns the React Native wrapper with `mParticle-Rokt` **9.3.1+**, +which requires `Rokt-Widget` `~> 5.3` (and `RoktContracts` `~> 2.0`), so the +Rokt iOS floor is enforced by the kit's own dependency graph rather than only by +an app-level pin. `9.3.0` is excluded because it still allows `Rokt-Widget` +`~> 5.2`. ### Dependency Changes For standard Rokt placements on iOS, use: ```ruby -pod 'mParticle-Rokt', '~> 9.2' +pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' ``` -Do not add `Rokt-Widget` directly to this React Native wrapper's podspec. Apps -receive it transitively through `mParticle-Rokt`. +Do not add `Rokt-Widget` yourself — apps receive it through `mParticle-Rokt`. +Run `pod update` so an existing `Podfile.lock` does not hold an older Rokt iOS +build. + +`Rokt-Widget` `5.3` resolves `RoktUXHelper` `1.0.0`, which requires an exact +`DcuiSchema` version. Remove any `DcuiSchema` pin (for example the previously +recommended `2.7.0`), otherwise CocoaPods reports conflicting `DcuiSchema` +requirements. ### React Native Rokt API @@ -74,8 +82,8 @@ Use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements: ] ``` -The plugin pins generated `mParticle-Rokt` pods to `~> 9.2`. It does not add -payment-extension pods or URL callback forwarding in this release. +The plugin pins generated `mParticle-Rokt` pods to `>= 9.3.1, < 10.0`. It does +not add payment-extension pods or URL callback forwarding in this release. For global CNAME setup, configure the shared `customBaseUrl` setting: diff --git a/README.md b/README.md index 5c800261..55534357 100644 --- a/README.md +++ b/README.md @@ -294,10 +294,12 @@ Next, you'll need to start the SDK: For standard Rokt placements, add the mParticle Rokt kit: ```ruby -pod 'mParticle-Rokt', '~> 9.2' +pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' ``` -In Expo apps, use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements. The Expo plugin does not add payment-extension pods or URL callback forwarding in this release. +Kit `9.3.1` is the first release requiring `Rokt-Widget` `~> 5.3` (`9.3.0` still allows `~> 5.2`), so Rokt iOS resolves transitively from this floor — do not declare `Rokt-Widget` yourself. + +In Expo apps, use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements. The Expo plugin pins `mParticle-Rokt` to `>= 9.3.1, < 10.0`. It does not add payment-extension pods or URL callback forwarding in this release. See [MIGRATING.md](./MIGRATING.md) for release-specific migration guidance. diff --git a/plugin/src/withMParticleIOS.ts b/plugin/src/withMParticleIOS.ts index 38918dcc..d0f27b89 100644 --- a/plugin/src/withMParticleIOS.ts +++ b/plugin/src/withMParticleIOS.ts @@ -387,7 +387,8 @@ const KIT_TRANSITIVE_DEPENDENCIES: Record = { }; const KIT_VERSION_REQUIREMENTS: Record = { - 'mParticle-Rokt': "'~> 9.2'", + // 9.3.1 is the first kit declaring Rokt-Widget ~> 5.3; 9.3.0 still allows ~> 5.2. + 'mParticle-Rokt': "'>= 9.3.1', '< 10.0'", }; /** @@ -473,16 +474,16 @@ end } } - // Add kit pods if specified + // Add kit pods if specified. Kits are matched individually so a Podfile that + // already declares one kit does not get it re-injected alongside a missing one. if (props.iosKits && props.iosKits.length > 0) { - const kitPods = props.iosKits.map(getKitPodDeclaration).join('\n'); - - // Check if kits are already added - const kitsAlreadyAdded = props.iosKits.every(kit => - podfileContent.includes(`pod '${kit}'`) + const missingKits = props.iosKits.filter( + kit => !podfileContent.includes(`pod '${kit}'`) ); - if (!kitsAlreadyAdded) { + if (missingKits.length > 0) { + const kitPods = missingKits.map(getKitPodDeclaration).join('\n'); + // Add kit pods inside the main target block // Look for use_react_native! and add after it const useReactNativeRegex = /(use_react_native!\([^)]*\))/s; diff --git a/sample/README.md b/sample/README.md index 7890f181..75261d4c 100644 --- a/sample/README.md +++ b/sample/README.md @@ -64,7 +64,9 @@ cd sample/ios pod install ``` -The sample Podfile pins `mParticle-Rokt` `~> 9.2`, **`Rokt-Widget` `5.2.0`**, and **`DcuiSchema` `2.7.0`**. Rokt’s pods allow `DcuiSchema` to float within `~> 2.6`; when CocoaPods resolves **2.8.0+**, the schema adds `image` styling that can desync from the `RoktUXHelper` sources in that widget line and break Swift compile (`StyleTransformer` / `BaseStyles`). Bump these pins together when you adopt a newer Rokt iOS stack. +The sample Podfile pins `mParticle-Rokt` `>= 9.3.1, < 10.0`. Kit `9.3.1` is the first release requiring `Rokt-Widget` `~> 5.3` (`9.3.0` still allows `~> 5.2`), so Rokt iOS resolves transitively and the Podfile does not declare it. + +There is no longer a `DcuiSchema` pin. `Rokt-Widget` `5.3` resolves `RoktUXHelper` `1.0.0`, which requires an exact `DcuiSchema` version, so the schema cannot float out of sync with the `RoktUXHelper` sources. The previous `2.7.0` pin guarded against that float (schema `2.8.x` added `image` styling APIs that older `RoktUXHelper` Swift did not pass through, breaking `StyleTransformer` / `BaseStyles`) and now conflicts with the exact version `RoktUXHelper` requires. The sample Android app pins both `com.mparticle:android-core` and `com.mparticle:android-rokt-kit` to `[6.0.0, 7.0)` so the Rokt session APIs are diff --git a/sample/ios/Podfile b/sample/ios/Podfile index 5063ebf7..809630e4 100644 --- a/sample/ios/Podfile +++ b/sample/ios/Podfile @@ -33,13 +33,12 @@ target 'MParticleSample' do # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) - pod 'mParticle-Rokt', '~> 9.2' - # Exact Rokt-Widget keeps RoktUXHelper on the same version (Rokt pins them together). - pod 'Rokt-Widget', '5.2.0' - # RoktUXHelper declares `DcuiSchema` `~> 2.6`, which otherwise floats to 2.8.x; that - # schema release adds `image` styling APIs that the shipped RoktUXHelper 5.2.x Swift - # does not pass through yet (CI: StyleTransformer.swift / BaseStyles "missing image"). - pod 'DcuiSchema', '2.7.0' + # 9.3.1 is the first kit requiring Rokt-Widget ~> 5.3 (9.3.0 still allows ~> 5.2), so + # Rokt iOS resolves transitively from this floor. No DcuiSchema pin either: Rokt-Widget + # 5.3 resolves RoktUXHelper 1.0.0, which requires an exact `DcuiSchema` version, so the + # schema can no longer float out of sync with the RoktUXHelper sources (the desync that + # the previous 2.7.0 pin guarded against). + pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' target 'MParticleSampleTests' do inherit! :complete