Skip to content

Commit fa4a923

Browse files
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>
1 parent 06420ca commit fa4a923

5 files changed

Lines changed: 12 additions & 7 deletions

File tree

.github/workflows/mobile.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ jobs:
432432
# iOS Release Candidate: Build and upload
433433
mobile-build-upload-releasecandidate-ios:
434434
name: iOS Release Candidate Build & Upload
435-
runs-on: macos-15
435+
runs-on: macos-26
436436
needs: [mobile-install, mobile-version-check]
437437
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true'
438438
steps:
@@ -834,7 +834,7 @@ jobs:
834834
# iOS Production: Build and upload (requires approval)
835835
mobile-build-upload-production-ios-main:
836836
name: iOS Production Build & Upload
837-
runs-on: macos-15
837+
runs-on: macos-26
838838
needs: [mobile-install, mobile-version-check]
839839
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true'
840840
environment:

packages/mobile/android/app/build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ react {
4646
// extraPackagerArgs = []
4747
/* Hermes Commands */
4848
// The hermes compiler command to run. By default it is 'hermesc'
49-
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
49+
// The RN Gradle plugin's hermesc lookup is anchored at `root` and only
50+
// considers `root/node_modules/react-native/sdks/hermesc/...`. Since RN
51+
// is hoisted to the monorepo node_modules, that lookup fails. Point the
52+
// plugin at the hoisted prebuilt hermesc explicitly (%OS-BIN% is
53+
// substituted by the plugin at runtime).
54+
hermesCommand = "$rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc"
5055
//
5156
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
5257
// hermesFlags = ["-O", "-output-source-map"]
@@ -129,7 +134,7 @@ android {
129134
// versionCode is automatically incremented in CI
130135
versionCode 1
131136
// Make sure this is above the currently released Android version in the play store if your changes touch native code:
132-
versionName "1.1.531"
137+
versionName "1.1.532"
133138
resValue "string", "build_config_package", "co.audius.app"
134139
resConfigs "en"
135140
}

packages/mobile/ios/AudiusReactNative/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<key>CFBundlePackageType</key>
1818
<string>APPL</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>1.1.195</string>
20+
<string>1.1.196</string>
2121
<key>CFBundleSignature</key>
2222
<string>????</string>
2323
<key>CFBundleURLTypes</key>

packages/mobile/ios/Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ DEPENDENCIES
302302
bigdecimal
303303
cocoapods (>= 1.13, != 1.15.1, != 1.15.0)
304304
concurrent-ruby (< 1.3.4)
305-
fastlane (>= 2.228.0)
305+
fastlane (= 2.234.0)
306306
fastlane-plugin-versioning
307307
logger
308308
mutex_m

packages/mobile/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@audius/mobile",
3-
"version": "1.5.182",
3+
"version": "1.5.183",
44
"private": true,
55
"scripts": {
66
"android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug",

0 commit comments

Comments
 (0)