Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` (kit declares `Rokt-Widget ~> 5.3`)
- 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
Expand Down
2 changes: 1 addition & 1 deletion ExpoTestApp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ Check `ios/Podfile` for:
- Kit pods (if specified):

```ruby
pod 'mParticle-Rokt', '~> 9.2'
pod 'mParticle-Rokt', '~> 9.3'
```

### Verify Android Integration
Expand Down
23 changes: 15 additions & 8 deletions MIGRATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,29 @@ 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+ (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+**,
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.

### Dependency Changes

For standard Rokt placements on iOS, use:

```ruby
pod 'mParticle-Rokt', '~> 9.2'
pod 'mParticle-Rokt', '~> 9.3'
```

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`,
which requires `~> 5.3`. 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

Expand Down Expand Up @@ -74,7 +81,7 @@ Use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements:
]
```

The plugin pins generated `mParticle-Rokt` pods to `~> 9.2`. It does not add
The plugin pins generated `mParticle-Rokt` pods to `~> 9.3`. It does not add
payment-extension pods or URL callback forwarding in this release.

For global CNAME setup, configure the shared `customBaseUrl` setting:
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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'
```

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.
The kit requires `Rokt-Widget` `~> 5.3`, so Rokt iOS resolves transitively — do not declare it yourself.

In Expo apps, use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements. The Expo plugin pins `mParticle-Rokt` to `~> 9.3`. It does not add payment-extension pods or URL callback forwarding in this release.

See [MIGRATING.md](./MIGRATING.md) for release-specific migration guidance.

Expand Down
17 changes: 9 additions & 8 deletions plugin/src/withMParticleIOS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,8 @@ const KIT_TRANSITIVE_DEPENDENCIES: Record<string, string[]> = {
};

const KIT_VERSION_REQUIREMENTS: Record<string, string> = {
'mParticle-Rokt': "'~> 9.2'",
// 9.3+ declares Rokt-Widget ~> 5.3 (mParticle Apple SDK #796 / kit 9.3.2).
'mParticle-Rokt': "'~> 9.3'",
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated
};

/**
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion sample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`. That kit requires `Rokt-Widget` `~> 5.3`, 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
Expand Down
12 changes: 5 additions & 7 deletions sample/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,11 @@ 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'
# The kit requires Rokt-Widget ~> 5.3, so Rokt iOS resolves transitively. 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'

target 'MParticleSampleTests' do
inherit! :complete
Expand Down
Loading