Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,15 @@ 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`) and pin companion `Rokt-Widget ~> 5.3` in the sample Podfile and Expo config plugin, so consumers cannot resolve Rokt iOS `5.2.x`

### 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: pin `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
- 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
3 changes: 2 additions & 1 deletion ExpoTestApp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,8 @@ Check `ios/Podfile` for:
- Kit pods (if specified):

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

### Verify Android Integration
Expand Down
21 changes: 12 additions & 9 deletions MIGRATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,24 @@ 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`). Use kit
`9.3.2` or newer so CocoaPods cannot resolve Rokt iOS `5.2.x`.
Comment thread
nickolas-dimitrakas marked this conversation as resolved.
Outdated

### Dependency Changes

For standard Rokt placements on iOS, use:

```ruby
pod 'mParticle-Rokt', '~> 9.2'
pod 'mParticle-Rokt', '~> 9.3'
pod 'Rokt-Widget', '~> 5.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` to this React Native wrapper's podspec. Apps receive
it through `mParticle-Rokt` `9.3+`; the companion `Rokt-Widget` pin makes the
5.3 floor explicit in app Podfiles / Expo-generated Podfiles.

### React Native Rokt API

Expand Down Expand Up @@ -74,8 +76,9 @@ 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` and companion
`Rokt-Widget` to `~> 5.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
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -294,10 +294,11 @@ 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'
pod 'Rokt-Widget', '~> 5.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.
In Expo apps, use `iosKits: ["mParticle-Rokt"]` for standard Rokt placements. The Expo plugin pins `mParticle-Rokt` to `~> 9.3` and `Rokt-Widget` to `~> 5.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
28 changes: 26 additions & 2 deletions plugin/src/withMParticleIOS.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {

Check failure on line 1 in plugin/src/withMParticleIOS.ts

View workflow job for this annotation

GitHub Actions / Trunk Check

prettier

Incorrect formatting, autoformat by running 'trunk fmt'
ConfigPlugin,
withAppDelegate,
withDangerousMod,
Expand Down Expand Up @@ -387,9 +387,19 @@
};

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
};

/**
* Extra pods declared alongside a kit to keep an explicit Rokt iOS floor even when
* CocoaPods would otherwise satisfy the kit with an older locked Widget build.
*/
const KIT_COMPANION_PODS: Record<string, Array<{ name: string; version: string }>> =

Check failure on line 398 in plugin/src/withMParticleIOS.ts

View workflow job for this annotation

GitHub Actions / Trunk Check

eslint(prettier/prettier)

[new] Replace `string,·Array<{·name:·string;·version:·string·}>>·=⏎·` with `⏎··string,⏎··Array<{·name:·string;·version:·string·}>⏎>·=`
{
'mParticle-Rokt': [{ name: 'Rokt-Widget', version: "'~> 5.3'" }],

Check failure on line 400 in plugin/src/withMParticleIOS.ts

View workflow job for this annotation

GitHub Actions / Trunk Check

eslint(prettier/prettier)

[new] Delete `··`
};

Check failure on line 401 in plugin/src/withMParticleIOS.ts

View workflow job for this annotation

GitHub Actions / Trunk Check

eslint(prettier/prettier)

[new] Delete `··`

/**
* Get all pods that need dynamic framework linking
*/
Expand Down Expand Up @@ -421,6 +431,20 @@
: ` pod '${kit}'`;
}

function getKitPodDeclarations(kits: string[]): string[] {
const lines: string[] = [];
for (const kit of kits) {
lines.push(getKitPodDeclaration(kit));
const companions = KIT_COMPANION_PODS[kit];
if (companions) {
for (const companion of companions) {
lines.push(` pod '${companion.name}', ${companion.version}`);
}
}
}
return lines;
}

/**
* Add kit pods and pre_install hook to Podfile
*/
Expand Down Expand Up @@ -475,7 +499,7 @@

// Add kit pods if specified
if (props.iosKits && props.iosKits.length > 0) {
const kitPods = props.iosKits.map(getKitPodDeclaration).join('\n');
const kitPods = getKitPodDeclarations(props.iosKits).join('\n');
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated

// Check if kits are already added
const kitsAlreadyAdded = props.iosKits.every(kit =>
Expand Down
2 changes: 1 addition & 1 deletion sample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ 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`, **`Rokt-Widget` `~> 5.3`**, and **`DcuiSchema` `2.7.0`**. Kit `9.3+` requires Rokt iOS `5.3+`, so CocoaPods does not resolve older `5.2.x`. Rokt’s pods allow `DcuiSchema` to float within `~> 2.6`; when CocoaPods resolves **2.8.0+**, the schema can add APIs that desync from the shipped `RoktUXHelper` and break Swift compile (`StyleTransformer` / `BaseStyles`). Retune the schema pin when validating a new Rokt iOS line.

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
11 changes: 6 additions & 5 deletions sample/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,13 @@ 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'
# 9.3+ requires Rokt-Widget ~> 5.3 (mParticle-Rokt 9.3.2+).
pod 'mParticle-Rokt', '~> 9.3'
pod 'Rokt-Widget', '~> 5.3'
# 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").
# schema release adds `image` styling APIs that older RoktUXHelper Swift does not
# pass through yet (CI: StyleTransformer.swift / BaseStyles "missing image").
# Retune this pin when validating a new Rokt-Widget line if schema APIs drift again.
pod 'DcuiSchema', '2.7.0'

target 'MParticleSampleTests' do
Expand Down
Loading