Skip to content

chore(mobile): bump versions for native release 1.5.189 - #14656

Draft
dylanjeffers wants to merge 1 commit into
mainfrom
chore/mobile-native-release-1.5.189
Draft

dylanjeffers wants to merge 1 commit into
mainfrom
chore/mobile-native-release-1.5.189

Conversation

@dylanjeffers

@dylanjeffers dylanjeffers commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Version bump for native release 1.5.189. Merging it starts the RC and production native builds.

  • packages/mobile/package.json: 1.5.188 → 1.5.189 (and the matching package-lock.json entry)
  • iOS CFBundleShortVersionString: 1.1.201 → 1.1.202
  • Android versionName: 1.1.537 → 1.1.538

1.5.189 contains one change: React Native's New Architecture turned on (#14657). Nothing else changes. Everything it depends on already shipped on the old architecture in 1.5.188 (RN 0.81.6 #14642, the RNTP bridgeless patch #14647, native-driver progress #14651, react-native-svg 15.15.1 and the Lottie recycling patch #14652). The findings from the spike (#14648, now closed) are in #14657.

Prerequisite: #14658 (JS-only, merges to main first). Without it, about half of iOS new-arch cold launches stay on the splash screen. It's a race in App.tsx's preload gate that new arch exposes. After it lands, merge main into this branch.

Stack

main
└── chore/mobile-native-release-1.5.189   (this PR)
    └── feat/mobile-new-architecture      #14657

Merge order

  1. Merge fix(mobile): don't leave the splash up when the preload beats the first effect #14658 into main and merge main into this branch. It's JS-only and also safe on 1.5.188.
  2. Wait until 1.5.188 is live in both stores. Until then, any native change on main would go into a 1.5.188 rebuild.
  3. Dispatch a production OTA from main before merging anything below, for every store version that can run main's JS:
    gh workflow run mobile.yml --repo AudiusProject/apps --ref main -f ota_channel=production
    
    With main at 1.5.188 this publishes to production/1.5.188.
  4. Land everything on main in one push. Merge feat(mobile): turn on the React Native New Architecture #14657 into this branch first, then merge this PR into main. Any push to main that leaves the version unchanged publishes an RC OTA to the current binary's history. With one push that also changes the version, the version check skips the OTA and starts the native builds. After that, OTAs route to 1.5.189 histories.
  5. JS compatibility across the flip. 1.5.188 (old arch) and 1.5.189 (new arch) run the same JS, but from here on every JS change has to work on both until 1.5.188 is gone, and OTAs must not cross histories (they don't: the history is keyed off package.json's version).
  6. Device-test the RC builds before submitting (the spike's physical-device checklist, in feat(mobile): turn on the React Native New Architecture #14657):
    • cold launch on both platforms, new arch at runtime (iOS JS thread com.facebook.react.runtime.JavaScript; Android, no "Legacy Architecture" warning)
    • background audio with the screen locked for more than 2 minutes, and no iOS CPU-kill
    • lock-screen and notification controls, Bluetooth, CarPlay/Android Auto, Chromecast
    • first play after a cold launch does not pause itself (Lottie), auto-advance
    • profile and contest collapsible headers, tab swipe, diagonal scroll on the feed
    • push: token registered and taps open the right screen
    • sign out and in on a test account (wallet decrypts; time the scrypt key derivation)
    • Android hardware Back on a pushed screen and at the root
    • video, track preview, and a Debug build for the ShadowTree::commit assert

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Oct 9, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: a74bb6f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@socket-security

Copy link
Copy Markdown

Dependency limit exceeded — report not shown.

This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report.

Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard.

Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account.

dylanjeffers added a commit that referenced this pull request Oct 9, 2026
…st effect (#14658)

## Summary

Cold launches can stay on the splash screen forever. `App` renders
`null` until the AsyncStorage preload finishes, and its `useEffectOnce`
only subscribed to `localStoragePreloadPromise` when the module-level
`localStoragePreloaded` flag was still false. If the preload resolves
after the first render but before the effect runs, the flag is already
true, the effect skips the subscription, and nothing ever sets
`preloaded`. `App` keeps returning `null`, `RootScreen` never mounts,
and `BootSplash.hide` is never called.

The fix subscribes unconditionally. `setPreloaded(true)` is idempotent,
so the extra `.then` on an already-resolved promise costs nothing.

## Why now

Found while smoke-testing the New Architecture flip (#14657). On the new
architecture, passive effects run later relative to the first render,
which opens the window. On the iOS 26.5 simulator with the 1.5.189
new-arch Release build:
- without this fix, 5 of 6 cold launches of the as-built bundle stuck on
the splash (JS idle, `RCTRootComponentView` with no children).
Instrumented runs logged `App render preloaded=false`, then `preload
resolved`, and no further render.
- with this fix, 8 of 8 cold launches reached the feed.

The same race exists on the old architecture (introduced in #14259). It
just loses it less often. 3 of 3 old-arch 1.5.188 launches were fine.

## Rollout

JS-only. It's safe to OTA to 1.5.188. It has to be on main before #14656
/ #14657 merge, so the 1.5.189 binary ships with it. Rebase or merge
main into `chore/mobile-native-release-1.5.189` after this lands.

## Checks
- eslint `packages/mobile/src/app/App.tsx`: pass
- `npx tsc --noEmit -p packages/mobile`: pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant