Skip to content

chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3.1 - #369

Merged
nickolas-dimitrakas merged 4 commits into
mainfrom
chore/rokt-ios-min-5.3
Jul 29, 2026
Merged

chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3.1#369
nickolas-dimitrakas merged 4 commits into
mainfrom
chore/rokt-ios-min-5.3

Conversation

@nickolas-dimitrakas

@nickolas-dimitrakas nickolas-dimitrakas commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Raises the iOS Rokt SDK floor for this wrapper by requiring mParticle-Rokt >= 9.3.1, < 10.0.

Kit 9.3.1 is the first release declaring Rokt-Widget ~> 5.3 (the bump in mParticle/mparticle-apple-sdk#796 landed before that release), so Rokt iOS resolves transitively through the kit. Apps do not declare Rokt-Widget themselves, which matches the guidance this repo already carried.

9.3.0 is deliberately excluded — it still declares Rokt-Widget ~> 5.2, so a ~> 9.3 range would not enforce the floor:

Kit version Declares
9.3.0 Rokt-Widget ~> 5.2
9.3.1 Rokt-Widget ~> 5.3
9.3.2 Rokt-Widget ~> 5.3

Dependency changes

Location Before After
Expo config plugin (iosKits) mParticle-Rokt ~> 9.2 mParticle-Rokt >= 9.3.1, < 10.0
sample/ios/Podfile mParticle-Rokt ~> 9.2, Rokt-Widget 5.2.0, DcuiSchema 2.7.0 mParticle-Rokt >= 9.3.1, < 10.0

The >= X, < 10.0 form matches the idiom the podspec already uses for the core SDK (mParticle-Apple-SDK-ObjC >= 9.2.2, < 10.0).

Resolved graph from the kit alone (verified locally with pod install):

mParticle-Rokt 9.3.2 → mParticle-Apple-SDK 9.3.2, Rokt-Widget 5.3.0
Rokt-Widget 5.3.0    → RoktContracts 2.0.2, RoktUXHelper 1.0.0
RoktUXHelper 1.0.0   → DcuiSchema 2.8.1

Rokt-Widget and DcuiSchema pins removed from the sample. The DcuiSchema 2.7.0 pin guarded against the schema floating within ~> 2.6 and desyncing from RoktUXHelper Swift sources. Rokt-Widget 5.3 resolves RoktUXHelper 1.0.0, which requires DcuiSchema at an exact version, so that float is no longer possible — and the old pin now makes resolution fail outright:

[!] CocoaPods could not find compatible versions for pod "DcuiSchema":
      DcuiSchema (= 2.7.0)
      RoktUXHelper (1.0.0) ... depends on DcuiSchema (= 2.8.1)

Rokt-Widget, RoktUXHelper, and DcuiSchema remain in the dynamic-framework pre_install lists; that is about linkage, not about declaring pods.

Expo plugin injection fix. Kit injection previously skipped the whole block when every requested kit was already in the Podfile, so a config requesting two kits with only one present would re-inject both and duplicate the existing declaration. Kits are now matched individually and only missing ones are added.

No React Native bridge or JavaScript API changes.

Upstream chain (no further upstream PRs required for the 5.3 floor):

  1. Rokt iOS 5.3.0 published to CocoaPods; 5.3.1 release open at ROKT/rokt-sdk-ios#269 and will float under the kit's ~> 5.3
  2. mParticle-Rokt floors Rokt-Widget at ~> 5.3 as of kit 9.3.1
  3. This PR aligns the React Native wrapper

Testing Plan

Verified locally with pod install:

  • pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' resolves mParticle-Rokt 9.3.2, Rokt-Widget 5.3.0, RoktUXHelper 1.0.0, DcuiSchema 2.8.1, core 9.3.2
  • Negative control — pinning mParticle-Rokt 9.3.0 against the new floor fails with a CocoaPods version conflict, confirming 9.3.0 is excluded
  • Regression proof — the previously proposed ~> 9.3 plus Rokt-Widget 5.2.6 resolved kit 9.3.0 with Rokt-Widget 5.2.6, i.e. the old range did not enforce the floor
  • yarn jest passes; tsc --build plugin clean; trunk check reports no new issues on all changed files

Reviewer verification:

  • iOS Sample App CI green (was failing on the DcuiSchema conflict)
  • In an Expo app with iosKits: ["mParticle-Rokt"], prebuild generates pod 'mParticle-Rokt', '>= 9.3.1', '< 10.0' and no Rokt-Widget line
  • Rokt placements (embedded, overlay, bottom sheet) still render in the sample app

Consumer impact: existing apps must run pod update (or regenerate the Expo Podfile) to pick up the new floor, and must remove any DcuiSchema pin. Documented in MIGRATING.md.

Master Issue

Closes https://go.mparticle.com/work/REPLACEME

Pin the Expo plugin and sample to mParticle-Rokt ~> 9.3 (kit declares
Rokt-Widget ~> 5.3) plus an explicit Rokt-Widget ~> 5.3 companion so
consumers cannot resolve Rokt iOS 5.2.x.
@nickolas-dimitrakas
nickolas-dimitrakas requested a review from a team as a code owner July 29, 2026 15:01
Copilot AI review requested due to automatic review settings July 29, 2026 15:01
@cursor

cursor Bot commented Jul 29, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Dependency and CocoaPods resolution changes affect all iOS Rokt consumers; they must pod update and remove any DcuiSchema pin, but there are no JS or bridge API changes.

Overview
Raises the iOS Rokt stack floor by requiring mParticle-Rokt >= 9.3.1, < 10.0 everywhere the wrapper documents or injects pods (sample Podfile, Expo plugin, README, MIGRATING). That kit is the first to require Rokt-Widget ~> 5.3, so Rokt iOS is pulled transitively—apps should not declare Rokt-Widget themselves.

The sample drops explicit Rokt-Widget and DcuiSchema pins; the old DcuiSchema pin now conflicts with RoktUXHelper 1.0.0’s exact schema requirement. CHANGELOG records the dependency and pin policy changes and trims obsolete sample CI pin notes.

The Expo iOS plugin now injects only missing iosKits pod lines (per-kit check) instead of skipping or re-adding the whole set when one kit is already in the Podfile.

Reviewed by Cursor Bugbot for commit 02c0283. Bugbot is set up for automated code reviews on this repo. Configure here.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The Expo Podfile injection currently skips adding the new companion Rokt-Widget pin when the kit pod is already present, which can prevent the intended floor from being enforced.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR raises the iOS Rokt dependency floor across the wrapper’s documentation, sample app, and Expo config plugin by moving to mParticle-Rokt ~> 9.3 and explicitly pinning Rokt-Widget ~> 5.3 to ensure apps don’t resolve older 5.2.x widget builds.

Changes:

  • Updated sample iOS Podfile and multiple docs (README/MIGRATING/ExpoTestApp) to use mParticle-Rokt ~> 9.3 plus an explicit Rokt-Widget ~> 5.3 pin.
  • Updated the Expo config plugin to pin mParticle-Rokt to ~> 9.3 and add a companion Rokt-Widget ~> 5.3 pod.
  • Updated CHANGELOG to reflect the new iOS Rokt floor behavior and rationale.
File summaries
File Description
sample/README.md Updates sample dependency guidance to the new mParticle-Rokt/Rokt-Widget floor.
sample/ios/Podfile Raises the sample’s Rokt pod versions and keeps the schema pin.
README.md Updates integration snippet and clarifies Expo plugin pinning behavior.
plugin/src/withMParticleIOS.ts Adds companion pod injection for Rokt-Widget alongside the kit and updates version requirements.
MIGRATING.md Updates migration guidance for the new iOS Rokt floor and Expo pinning.
ExpoTestApp/README.md Updates generated Podfile expectations for iOS kits.
CHANGELOG.md Documents the iOS Rokt floor change and related pinning behavior.
Review details

Comments suppressed due to low confidence (1)

plugin/src/withMParticleIOS.ts:507

  • The Expo Podfile injection skips adding companion pods when the primary kit pod already exists: kitsAlreadyAdded only checks for pod 'mParticle-Rokt', so a Podfile that already contains the kit but not Rokt-Widget will not get the new Rokt-Widget ~> 5.3 floor (and the code comment implies this floor should be enforced). Consider adding only the missing kit/companion pod lines rather than treating the whole kit list as already added.
      if (props.iosKits && props.iosKits.length > 0) {
        const kitPods = getKitPodDeclarations(props.iosKits).join('\n');

        // Check if kits are already added
        const kitsAlreadyAdded = props.iosKits.every(kit =>
          podfileContent.includes(`pod '${kit}'`)
        );
  • Files reviewed: 7/7 changed files
  • Comments generated: 1
  • Review effort level: Low

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread MIGRATING.md Outdated
Comment thread plugin/src/withMParticleIOS.ts Outdated
@nickolas-dimitrakas nickolas-dimitrakas self-assigned this Jul 29, 2026
@nickolas-dimitrakas nickolas-dimitrakas changed the title chore(ios): require mParticle-Rokt 9.3+ for Rokt Widget 5.3 floor chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3 Jul 29, 2026
Address review feedback and unblock iOS CI:

- Podfile kit injection now matches individual pods instead of the whole kit
  selection, so a Podfile that already declares mParticle-Rokt still picks up
  the Rokt-Widget companion floor on upgrade.
- Extract addKitPodsToPodfile and cover the upgrade path with unit tests.
- Remove the sample DcuiSchema 2.7.0 pin. Rokt-Widget 5.3 resolves
  RoktUXHelper 1.0.0, which requires DcuiSchema exactly, so the pin conflicts
  during resolution and the float it guarded is no longer possible.
- Clarify in MIGRATING that kit 9.3.2+ enforces the 5.3 floor transitively and
  the explicit pin only makes it visible / defeats a stale lockfile.
mParticle-Rokt 9.3 already requires Rokt-Widget ~> 5.3, so declaring
Rokt-Widget directly was redundant and contradicted existing guidance that apps
receive it transitively through the kit.

- Drop the companion Rokt-Widget pin from the Expo config plugin, the sample
  Podfile, and the README / MIGRATING / ExpoTestApp examples.
- Remove the plugin companion-pod mechanism and its tests, restoring the
  original jest and plugin tsconfig configuration.
- Keep the per-kit injection filter so a Podfile that already declares one kit
  is not re-injected alongside a missing one.
- Keep Rokt-Widget, RoktUXHelper, and DcuiSchema in the dynamic-framework
  pre_install lists, which is unrelated to declaring pods.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6b7effd. Configure here.

Comment thread plugin/src/withMParticleIOS.ts Outdated
`~> 9.3` admitted kit 9.3.0, which still declares Rokt-Widget ~> 5.2, so the
stated 5.3 floor was not enforced. Reproduced with `pod install`: `~> 9.3` plus
Rokt-Widget 5.2.6 resolves mParticle-Rokt 9.3.0 and Rokt-Widget 5.2.6.

9.3.1 is the first kit release declaring Rokt-Widget ~> 5.3, so use
`>= 9.3.1', '< 10.0'` in the Expo config plugin, the sample Podfile, and docs,
matching the podspec idiom already used for the core SDK floor.
@nickolas-dimitrakas nickolas-dimitrakas changed the title chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3 chore(ios): raise Rokt iOS floor to 5.3 via mParticle-Rokt 9.3.1 Jul 29, 2026
@nickolas-dimitrakas
nickolas-dimitrakas merged commit 6c8489b into main Jul 29, 2026
11 checks passed
@nickolas-dimitrakas
nickolas-dimitrakas deleted the chore/rokt-ios-min-5.3 branch July 29, 2026 17:45
@rokt-releases rokt-releases Bot mentioned this pull request Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants