Skip to content

docs: state the real React Native, iOS and Android minimums - #670

Merged
Shahroz16 merged 2 commits into
mainfrom
docs/real-platform-floors
Oct 23, 2026
Merged

Shahroz16 merged 2 commits into
mainfrom
docs/real-platform-floors

Conversation

@Shahroz16

@Shahroz16 Shahroz16 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Refs MBL-2389

Docs only, no behaviour change. The README badges advertised iOS 13 and Android API 21, which are the native Customer.io SDKs' floors. A React Native app can't target below its React Native release's own minimum.

The wording follows the current support policy: keep minimums as low as actually works, and leave peerDependencies at * with no enforcement.

  • Minimum that works: React Native 0.77. It's the first template on Kotlin 2.x, which the Android module's Compose compiler plugin needs.
  • 0.81 is the first stock template whose app builds as generated. CI builds Android template apps with RN 0.81 and 0.88 (the Android build compatibility workflow in fix(android): build under AGP 9 built-in Kotlin and new DSL #669), and iOS with the example app (RN 0.83) and the scene E2E host (RN 0.88). The README states exactly that, rather than "tested end to end".
  • On 0.77–0.80, apps raise compileSdk/buildTools to 36, and on 0.77–0.79 also AGP to 8.9.1 + Gradle 8.11.1. The README lists the exact edits.

Changes

  • Badges: min iOS 15.1, min Android SDK 24, plus a new min React Native 0.77 badge. The Swift 5.3 badge is removed: the wrapper already uses Swift 5.7 syntax (shorthand if let, e.g. ios/wrappers/inapp/NativeMessagingInApp.swift:31), and no compiler minimum has been verified to replace it.
  • New Requirements section: a minimum table (React Native, iOS, Android API, Android build) with where each number comes from, the 0.77–0.80 Android build edits, and an Expo note (SDK 54 = RN 0.81.5 and later meet the Android build requirement; SDK 53 = RN 0.79.6).
  • The Android template-build sentence relies on fix(android): build under AGP 9 built-in Kotlin and new DSL #669's workflow, so merge this after fix(android): build under AGP 9 built-in Kotlin and new DSL #669, or drop that clause if fix(android): build under AGP 9 built-in Kotlin and new DSL #669 doesn't land. API 24 stays the Android floor because it comes from React Native itself. The module's own minSdkVersion=21 default is a separate change and isn't touched here.

Evidence for the numbers

Claim Source
iOS 15.1 Helpers::Constants.min_ios_version_supported returns 15.1 in react-native@0.76.0 and 0.77.0 (scripts/cocoapods/helpers.rb). Our podspec uses min_ios_version_supported.
API 24 minSdk = 24 in react-native@0.76.0 and 0.77.0 gradle/libs.versions.toml, and in both templates.
React Native 0.81 (builds as generated) First template with both compileSdk 36 (@react-native-community/template@0.81.6) and AGP ≥ 8.9.1 (8.11.0 in react-native@0.81.6's gradle/libs.versions.toml). The 0.80 template has compileSdk 35 / AGP 8.9.2; 0.79 has 35 / 8.8.2.
React Native 0.77 (minimum that works) The Android module applies org.jetbrains.kotlin.plugin.compose from compose-compiler-gradle-plugin:$kotlinVersion. That plugin only exists for Kotlin 2.0+. The RN 0.76 template sets kotlinVersion = "1.9.24"; 0.77 sets "2.0.21". Codegen EventEmitter module events (used in src/specs/modules) need RN 0.76+. Local builds: see below.
New Architecture only since 6.0.0 CHANGELOG 6.0.0: "remove support for React Native old architecture (#553)".
compileSdk 36, AGP 8.9.1 androidx.core:core(-ktx):1.17.0 AAR metadata: minCompileSdk=36, minAndroidGradlePluginVersion=8.9.1. It's requested directly by io.customer.android:messaging-in-app:4.23.2. Native Android moved to 1.17.0 in 4.13.0, which this SDK picked up in 5.1.0.

Builds (stock templates, packed 6.13.1, :app:assembleDebug)

React Native template Result
0.76.9 ❌ Could not find org.jetbrains.kotlin:compose-compiler-gradle-plugin:1.9.25
0.77.3 as generated (compileSdk 35, AGP 8.7.2) ❌ checkDebugAarMetadata: AndroidX Core 1.17.0 needs compileSdk 36 and AGP ≥ 8.9.1
0.77.3 with the README's edits (compileSdk 36, buildTools 36.0.0, AGP 8.9.1, Gradle 8.11.1) ✅
0.81.6 as generated (compileSdk 36, AGP 8.11.0) ✅
0.88.0 as generated ✅

Templates 0.79 (compileSdk 35, AGP 8.8.2) and 0.80 (35, AGP 8.9.2) fall in between. Hence "0.77–0.80: compileSdk 36" and "0.77–0.79: also AGP". 0.79 and 0.80 weren't built individually.

peerDependencies stays *. The feat! draft #671 is kept only for reference and isn't planned. This PR only documents what is already true.

Codex review

Codex (gpt-6.1-sol, high) did an adversarial review in two passes:

  • P2: the Requirements table omitted the Android toolchain. Fixed. Builds above confirmed it: the "Android build" row and per-version instructions were added.
  • P3: the Swift 5.3 badge is wrong. Fixed by removing the badge.
  • P3 (second pass): Expo apps regenerate android/. Fixed: added the expo-build-properties note.
  • Found fine: iOS 15.1 and API 24 come from RN 0.76+ and the podspecs inherit RN's iOS minimum; the Gradle 8.11.1 requirement for AGP 8.9.1; targetSdk doesn't need to change.
  • Third pass (on an earlier "0.81 supported" draft; the README is now 0.77 minimum / tested from 0.81):
    • Medium: the README claimed a module-only CI check that only exists in draft fix(android): build under AGP 9 built-in Kotlin and new DSL #669. Fixed: it now states only the validation done (a 0.77.3 app build).
    • Low: "0.76 and earlier cannot build" is too absolute. Fixed: "not supported".
    • Also: expo-build-properties can't raise AGP/Gradle. Fixed: point Expo users at SDK 54+.
  • Fourth pass, on the 0.77-minimum / tested-from-0.81 wording:
  • Fifth pass (after an independent review found "tested end to end" overstated iOS coverage; the sentence now lists what CI builds):

🤖 Generated with Claude Code

@Shahroz16
Shahroz16 force-pushed the docs/real-platform-floors branch 3 times, most recently from 2888739 to 908df70 Compare October 21, 2026 00:58
@Shahroz16
Shahroz16 marked this pull request as ready for review October 21, 2026 03:21
@Shahroz16
Shahroz16 requested a review from a team as a code owner October 21, 2026 03:21
The README badges still advertised iOS 13 and Android API 21, the native
SDKs' floors. A React Native app can't target below its React Native
release's minimum (iOS 15.1 and API 24 since 0.76).

The lowest React Native that works is 0.77: the SDK is New Architecture only
since 6.0.0, and its Android module applies the Compose compiler plugin with
the app's Kotlin version, which needs Kotlin 2.0, first used by the 0.77
template. Since 5.1.0 the native Android SDK has also depended on AndroidX
Core 1.17, which needs compileSdk 36 and AGP 8.9.1; React Native 0.81+
templates meet that as generated, so document the edits 0.77-0.80 apps need.

Update the badges, add a React Native badge, drop the Swift 5.3 badge (the
wrapper already uses Swift 5.7 syntax), and add a Requirements section.

Refs MBL-2389

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Shahroz16
Shahroz16 force-pushed the docs/real-platform-floors branch from 908df70 to 0ac6629 Compare October 21, 2026 06:30
Comment thread README.md
target an OS version below the minimum of the React Native release it uses.

Apps created from the React Native 0.81 template or later meet the Android build requirement as
generated. CI builds Android template apps with React Native 0.81 and 0.88, and iOS with the example

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.

CI on main doesn't build Android template apps yet; that's the android-build-compat job in #669, which is still open. Either merge this after #669, or drop the Android part here and add it back in #669.

@Shahroz16
Shahroz16 merged commit 0974966 into main Oct 23, 2026
4 checks passed
@Shahroz16
Shahroz16 deleted the docs/real-platform-floors branch October 23, 2026 21:01
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.

3 participants