You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Summary
Fixes both halves of the broken release run
[26316494213](https://github.com/AudiusProject/apps/actions/runs/26316494213)
so a single re-release can ship both platforms.
### 1. Android RC + Prod — Hermes entryFile pointed at monorepo root
Both Android builds failed at the JS bundle task with:
\`\`\`
* What went wrong:
A problem was found with the configuration of task
':app:createBundleReleaseCandidateReleaseJsAndAssets' (type
'BundleHermesCTask').
- In plugin 'com.facebook.react' type
'com.facebook.react.tasks.BundleHermesCTask' property 'entryFile'
specifies file '/home/runner/work/apps/apps/index.js' which doesn't
exist.
\`\`\`
When I added the Android gradle path overrides for the hoisted
node_modules in #14365, I also set \`react.root = file("../../../../")\`
(monorepo root). The React-Native Gradle plugin anchors \`entryFile\` to
\`root\` (\`PathUtils.kt#detectEntryFile\` → \`File(reactRoot,
"index.js")\`), so it searched for
\`/home/runner/work/apps/apps/index.js\` instead of
\`packages/mobile/index.js\`.
Drop the \`root\` override and let it default to \`../..\` (=
\`packages/mobile\`, where \`index.js\` lives). The explicit
\`reactNativeDir\`, \`codegenDir\`, and \`cliFile\` overrides are
absolute paths and continue to point at the hoisted node_modules.
### 2. iOS RC + Prod — fastlane crash on Xcode 26 altool errors
Both iOS jobs successfully archived the IPA (gym ~20 min) but died at
the \`pilot\` TestFlight upload step with:
\`\`\`
fastlane_core/itunes_transporter.rb:266:in 'execute':
undefined method 'each' for nil (NoMethodError)
\`\`\`
Root cause is two upstream bugs interacting:
- Xcode 26 changed altool's error prefix from \`*** Error:\` to
\`ERROR:\`. fastlane 2.225.0's \`ERROR_REGEX = /\*\*\* Error:\s+(.+)/\`
no longer matches, so \`error_line_index = nil\`.
- The fallback displayer does \`@all_lines[-20..-1].each\`. Under Ruby
3.x, that slice returns \`nil\` when the array has fewer than 20
elements (Ruby 3.0 stopped clamping out-of-range negative starts), so
\`.each\` crashes on nil. **The real altool error is hidden by this
crash.**
Both upstream bugs are fixed:
- fastlane#29545
([455bb5e1](fastlane/fastlane@455bb5e1),
2.228.0): displayer iterates \`@all_lines\` directly, no more broken
slice
- fastlane#29740
([744b01ce](fastlane/fastlane@744b01ce),
2.230.0): ERROR_REGEX matches both \`*** Error:\` and Xcode 26's
\`ERROR:\`
Bump the iOS Gemfile pin from \`~> 2.225.0\` to \`2.234.0\` (latest at
time of writing, includes both fixes). \`Gemfile.lock\` updated to
match. Android's Gemfile is already \`>= 2.220.0\` and locks at 2.231.1
— unaffected.
If altool itself has a real upload error remaining, it will at least
surface in the logs after this lands; can be addressed in a follow-up.
### 3. Re-trigger the release flow
- \`packages/mobile/package.json\`: \`1.5.181\` → \`1.5.182\`
- iOS \`Info.plist\` \`CFBundleShortVersionString\`: \`1.1.194\` →
\`1.1.195\`
- Android \`versionName\`: \`1.1.530\` → \`1.1.531\`
## Test plan
- [ ] Merge to main → version-check fires all 4 binary build/upload jobs
- [ ] Android RC + Prod reach \`fastlane releaseCandidate\` / \`prod\` —
no \`BundleHermesCTask entryFile\` failure
- [ ] iOS RC + Prod either succeed end-to-end OR fail at \`pilot\` with
a readable altool error (no more \`undefined method 'each' for nil\`)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
0 commit comments