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
fix(mobile): Xcode 26 SDK for iOS upload + hermesc path for Android (#14396)
## Summary
Two real failures surfaced in [run
26319345276](https://github.com/AudiusProject/apps/actions/runs/26319345276)
after the displayer fix in #14394 made fastlane log altool errors again.
### 1. iOS RC + Prod — Apple now requires iOS 26 SDK
altool now returns:
\`\`\`
ERROR: Validation failed (409) SDK version issue. This app was built
with the iOS 18.5 SDK.
All iOS and iPadOS apps must be built with the iOS 26 SDK or later,
included in Xcode 26 or
later, in order to be uploaded to App Store Connect or submitted for
distribution.
(ID: 287c542e-3971-4158-b3c3-71eb1fcd6eb3)
\`\`\`
The \`macos-15\` runners ship Xcode 16.4 (iOS 18.5 SDK) by default —
that's why gym archived fine but altool rejected the upload. Switch both
iOS jobs to \`macos-26\` (Tahoe, GA), which has Xcode 26 as the only
supported major.
### 2. Android RC + Prod — hermesc binary lookup also anchored at the
wrong root
\`\`\`
Couldn't determine Hermesc location. Please set \`react.hermesCommand\`
to the path of the
hermesc binary file.
node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc
\`\`\`
#14394 restored \`react.root\` to its default (\`../.. =
packages/mobile\`) to unblock the Hermes JS bundle's \`entryFile\`
lookup. But the same gradle plugin uses \`root\` for hermesc detection
too (\`PathUtils.kt#detectOSAwareHermesCommand\` → only checks
\`root/node_modules/react-native/sdks/hermesc/...\`), and RN is hoisted
to the monorepo \`node_modules\` so that path doesn't exist.
Set \`react.hermesCommand\` explicitly to the hoisted prebuilt:
\`\`\`groovy
hermesCommand =
"\$rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc"
\`\`\`
The \`%OS-BIN%\` placeholder is substituted by the plugin at runtime
(linux64-bin / osx-bin / win64-bin). Verified all three subdirs exist in
\`node_modules/react-native/sdks/hermesc/\` after \`npm ci\`.
### Housekeeping
- \`packages/mobile/ios/Gemfile.lock\`: dependency line aligned to \`=
2.234.0\` to match the Gemfile pin from #14394. (The squash-merge of
#14394 amended the Gemfile to a pin but kept the lock at the pre-pin
\`>= 2.228.0\` constraint; CI was re-resolving every build.)
- Versions bumped to re-fire the build matrix:
- \`packages/mobile/package.json\`: \`1.5.182\` → \`1.5.183\`
- iOS Info.plist \`CFBundleShortVersionString\`: \`1.1.195\` →
\`1.1.196\`
- Android \`versionName\`: \`1.1.531\` → \`1.1.532\`
## Test plan
- [ ] Merge → version-check fires all 4 binary jobs
- [ ] Android RC + Prod reach \`fastlane releaseCandidate\` / \`prod\`
(no \`Couldn't determine Hermesc location\`)
- [ ] iOS RC + Prod reach App Store Connect (no \`SDK version issue\`
409)
- [ ] Slack notification fires from the success branch of each iOS /
Android job
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
0 commit comments