Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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.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
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.1', '< 10.0'
```

### Verify Android Integration
Expand Down
26 changes: 17 additions & 9 deletions MIGRATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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:

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.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.

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.1 is the first kit declaring Rokt-Widget ~> 5.3; 9.3.0 still allows ~> 5.2.
'mParticle-Rokt': "'>= 9.3.1', '< 10.0'",
};

/**
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.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
Expand Down
13 changes: 6 additions & 7 deletions sample/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading