feat: upgrade native SDKs to mParticle Android 6.0.0 / Apple 9.3.1 - #50
Conversation
Bumps the native bindings to mParticle Android SDK 6.0.0 (Kotlin 2.1.20, Rokt SDK 6.0.1 / RoktUX 1.0.0, coil3) and mParticle Apple SDK 9.3.1 (Rokt 9.3.1, Rokt Stripe payment extension 2.0.3). Android SDK 6 extracted the Rokt API out of android-core into the optional android-rokt-kit (com.mparticle.kits). Re-point the managed Rokt binding at the kit through a thin com.mparticle.mparticleroktbinding helper that flattens the Kotlin Flow / roktsdk event types into a primitive string map, so the C# kit does not bind those types. The core binding no longer surfaces Rokt. Also handle two other Android SDK 6 breaking changes in the core binding without touching the public MAUI C# API: - IdentityApiRequest.Builder.userAliasHandler was removed; UserAliasHandler is now a no-op on Android (public surface retained). - androidIdDisabled(bool) was replaced by androidIdEnabled(bool); IdDisabled is mapped with inverted semantics. The public MAUI C# API surface is unchanged. Core, Rokt, and Payments sample apps build on Android and iOS.
PR SummaryHigh Risk Overview On Android, Rokt is no longer in SDK 6 compatibility in core: Reviewed by Cursor Bugbot for commit 058eeca. Bugbot is set up for automated code reviews on this repo. Configure here. |
Restore Android RoktConfig parity from SDK 5.x. The 6.0.0 migration stubbed SelectPlacements' config as a no-op; forward color mode and cache configuration through the com.mparticle.mparticleroktbinding helper, which now builds the relocated com.rokt.roktsdk.RoktConfig. Public MAUI API is unchanged.
Package the retrofit2 kotlinx-serialization converter jar that the Rokt SDK network layer needs at runtime; without it the kit crashed on init with ClassNotFoundException for KotlinSerializationConverterFactory. Bump the Jetpack Compose stack to 1.11.x (and the Activity 1.13 / Lifecycle 2.11 / Collection 1.6 / Fragment 1.8.9 / Kotlin StdLib 2.4 / Serialization 1.11 cascade it requires). Rokt UX 9.3 is compiled against Compose 1.9+ and the previous 1.8.x bindings crashed at layout render with a rememberSaveable NoSuchMethodError. The 1.11.x line also resolves the runtime-annotation Kotlin-Multiplatform duplicate-class dex error.
The three NuGet project versions had been bumped to 5.0.0 in this feature branch while the VERSION file stayed at 4.2.0, which the release tooling flagged as drift. Versioning is owned by the release workflow: "Create draft release" bumps VERSION and all csproj <Version> together and opens a dedicated release PR, and merging a VERSION change to main triggers the publish-to-nuget.org workflow. Manually bumping versions in a feature PR both reintroduces the drift and would trigger a premature production release on merge. Revert to 4.2.0 so this PR is version-neutral; the major bump to 5.0.0 will be done via the release workflow.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ 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 058eeca. Configure here.

Background
android-coreinto the optionalandroid-rokt-kit(com.mparticle.kits), and a few core APIs were removed/renamed. The previous branch had bumped the AAR/SPM versions but the Android Rokt glue still targeted the SDK 5.xcom.mparticle.*layout, so the core binding no longer compiled.What Has Changed
Versions
5.79.0→6.0.0, Kotlin1.9.0→2.1.20, Rokt SDK6.0.1/ RoktUX1.0.0, coil2 → coil3.9.2.0→9.3.1, Rokt integration9.2.0→9.3.1, Rokt Stripe payment extension2.0.1→2.0.3.Android Rokt re-pointed to the kit
MParticleSdkBinding.ktand the Rokt entries from the coreandroid/Transforms/Metadata.xml(Rokt is gone fromcom.mparticle.*in 6.0.0).MParticleRoktBinding.kt(com.mparticle.mparticleroktbinding) that callscom.mparticle.kits.roktand flattens the KotlinFlow/com.rokt.roktsdk.RoktEventtypes into aMap<String,String>, so the managed kit does not need to bind those types.remove-nodeentries to the kitMetadata.xml(avoids binding the Kotlin Rokt surface and resolves thecom.mparticle.kits.Roktclass /com.mparticle.kits.roktpackage name collision).android/RoktPlatform.csto route through the bridge and useCom.Mparticle.Kits.RoktEmbeddedView. TheAndroidRoktApi(MParticle)constructor andNativeHandleare preserved, soRoktExtensions.csand the Payments kit are untouched.Other Android SDK 6 breaking changes (core, public API unchanged)
IdentityApiRequest.Builder.userAliasHandlerwas removed →UserAliasHandleris now a no-op on Android; removedUserAliasHandlerWrapper.cs.androidIdDisabled(bool)→androidIdEnabled(bool);MParticleOptions.IdDisabledis mapped with inverted semantics.Public API
RoktApi,MParticleRoktExtensions,RoktTypes, or the PaymentsRoktShoppableAdsExtensions.Screenshots/Video
Checklist
Additional Notes
Builds verified locally (all green, 0 errors):
SampleAppSampleAppThe Android kit build emits only harmless
BG8605/BG8403binding warnings (we intentionally do not bind the Flow / roktsdk types).trunk checkis clean.On Android,
RoktConfigandSelectShoppableAdsremain no-ops (parity with the previous behavior / other wrappers); iOS is unaffected since Rokt stays in the Apple core SDK.Heads-up: both
gradlewwrappers had a malformedcd "$(dirname \"$PRG\")/"line (stray escaped quotes) that prevented the native binding gradle build from starting locally; fixed by removing the backslashes. Happy to drop this if you'd prefer to handle it separately.