Skip to content

chore: pin geofence native SDK versions and example test wiring#609

Open
mrehan27 wants to merge 2 commits into
feature/geofence-on-devicefrom
mbl-1785-geofence-final
Open

chore: pin geofence native SDK versions and example test wiring#609
mrehan27 wants to merge 2 commits into
feature/geofence-on-devicefrom
mbl-1785-geofence-final

Conversation

@mrehan27

@mrehan27 mrehan27 commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Wires the geofence feature to the native SDK versions that will ship it, and makes the example app buildable/testable against the pre-release native builds — including publishing this PR's sample builds to the feature-branch distribution channel so subscribed peers can test geofence before release.

Targets feature/geofence-on-device, not main. Nothing is released here.

⚠️ Read this first — two commits, one is temporary

This PR is intentionally two commits that must not be squashed:

Commit 1 — the real change we keep. Pins the native SDK versions that will contain geofence:

  • android/gradle.properties: cioSDKVersionAndroid4.20.0
  • package.json: cioNativeiOSSdkVersion= 4.7.0

These versions aren't published yet, which is why Commit 2 exists.

Commit 2 — temporary test/CI scaffolding, reverted when native goes live. It only touches the example app, the iOS version pin, and one CI line:

  • example/android/build.gradle: snapshot Maven repo → central.sonatype.com/repository/maven-snapshots
  • example/android/gradle.properties: example uses cioSDKVersionAndroid=feature-geofence-on-device-SNAPSHOT
  • example/ios/Podfile: load the geofence-aware CocoaPods override from the feature branch, build the app target against the customerio-ios feature/geofence-on-device branch, and add an explicit CustomerIO/LocationGeofence git pod (the umbrella subspec isn't on the released trunk spec yet)
  • package.json: temporarily pins cioNativeiOSSdkVersion to = 4.6.0 (the feature branch's current podspec version, now that iOS 4.6.0 has shipped) so CocoaPods can resolve — deliberately undoes Commit 1's iOS bump for testing only
  • .github/workflows/build-sample-app.yml: publish this PR branch's sample builds to the feature-branch Firebase channel (see below)

Reverting Commit 2 restores Commit 1's production state exactly (package.json= 4.7.0, no example/CI scaffolding).

Note for reviewers

Commit 2 is temporary test-only scaffolding — the downgraded iOS pin, the -SNAPSHOT Android version, the snapshot repo, the git-branch pods, and the feature-channel CI line are all intentional and get reverted before this reaches main. Please don't flag them as defects.

Feature builds for peers 📱

Native geofence is still pre-release, so the released SDKs can't build the example and the normal feature/* sample builds fail. This PR's CI builds against the pre-release native and pushes the sample apps to the feature-branch Firebase channel — that's where peers subscribed to feature builds should get geofence test builds until native ships.

Merge plan

This PR stays open while native geofence is pre-release — it's the source of feature-channel builds. When native iOS 4.7.0 / Android 4.20.0 are released, Commit 2 is reverted entirely and only Commit 1 is merged into feature/geofence-on-device — Commit 2 never lands on the feature branch.

Requires (native)

  • customerio-android#768 — ships in Android 4.20.0
  • customerio-ios#1140 — ships in iOS 4.7.0

Ticket

MBL-1785 — React Native: add geofencing support

PR stack

  1. chore: add geofence module base #605 — geofence module base
  2. chore: register geofence module and treat geofence as implying location #606 — register geofence module + geofence implies Location
  3. chore: add iOS allowBackgroundDelivery config for geofence #607 — iOS allowBackgroundDelivery config
  4. chore: enable geofence in the example app #608 — enable geofence in the example app
  5. 👉 This PR — native SDK version pins + temporary feature-build/CI wiring

🤖 Generated with Claude Code


Note

Low Risk
Changes are version pins plus example-app and CI test scaffolding; library consumers only see the Android SDK bump in gradle.properties, with no auth or data-path changes.

Overview
Pins the React Native wrapper to Android native 4.20.0 (android/gradle.properties) ahead of the geofence release, and adds temporary scaffolding so the example app and CI can build against pre-release native geofence.

The example app now resolves Android from Sonatype snapshots (feature-geofence-on-device-SNAPSHOT) and iOS from the feature/geofence-on-device branch (override script, non-production install helper, and an explicit CustomerIO/LocationGeofence git pod). package.json temporarily sets cioNativeiOSSdkVersion to = 4.6.0 so CocoaPods can resolve while testing (intended to revert to the shipping iOS pin when native releases).

Sample-app CI also publishes builds from PR head mbl-1785-geofence-final to the feature-branch Firebase distribution group so peers can test before iOS 4.7.0 / Android 4.20.0 ship. Comments mark this wiring as revertible once native SDKs are live.

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

@mrehan27 mrehan27 requested a review from a team as a code owner June 30, 2026 21:54
@mrehan27 mrehan27 self-assigned this Jun 30, 2026
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Sample app builds 📱

Below you will find the list of the latest versions of the sample apps. It's recommended to always download the latest builds of the sample apps to accurately test the pull request.


  • iOS APN: 609.2.0 (29723672)

@mrehan27 mrehan27 force-pushed the mbl-1785-geofence-final branch from a3ee796 to e83e720 Compare July 3, 2026 13:52
iOS 4.7.0, Android 4.20.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mrehan27 mrehan27 force-pushed the mbl-1785-geofence-final branch 2 times, most recently from 2cb7b96 to 7d93b96 Compare July 7, 2026 10:09
Comment thread package.json Outdated
Point the example at pre-release native builds so geofence can be tested before
the native SDKs are released, and publish this PR's sample builds to the
feature-branch Firebase channel so subscribed peers can use them. Revert this
commit once the native SDKs ship.

- Android: example uses the feature-branch snapshot + the central snapshot repo.
- iOS: load the geofence-aware CocoaPods override from the feature branch, build
  against the customerio-ios feature branch, and pin the native iOS SDK to
  4.6.0 (the branch version) so pods resolve until 4.7.0 is released.
- CI: distribute this PR branch's sample builds to the feature-branch group.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mrehan27 mrehan27 force-pushed the mbl-1785-geofence-final branch from 7d93b96 to be8acc3 Compare July 7, 2026 10:12

@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 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 be8acc3. Configure here.

# cioSDKVersionAndroid=local
# TEMP: geofence is not yet released; point at the feature-branch snapshot so the
# example can be built and tested. Revert once the native SDKs ship.
cioSDKVersionAndroid=feature-geofence-on-device-SNAPSHOT

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Android snapshot property not applied

High Severity

The example app sets cioSDKVersionAndroid to the geofence snapshot, but the React Native Android module resolves the native SDK via getExtOrDefault('cioSDKVersionAndroid'), which only reads rootProject.ext.cioSDKVersionAndroid or customerio.reactnative.cioSDKVersionAndroid. The snapshot line is ignored, so Gradle keeps resolving 4.20.0 from the library defaults even though that artifact is not released yet.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit be8acc3. Configure here.

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.

1 participant