From f9b46105a732c02076690aeb93e023ffd3a61534 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 22 May 2026 18:39:35 -0700 Subject: [PATCH] fix(mobile): Xcode 26 SDK for iOS upload + hermesc path for Android MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two real failures surfaced in run 26319345276 after the displayer fix in #14394 made fastlane log altool errors again: ### iOS RC + Prod — Apple now requires iOS 26 SDK altool 409 Validation failed: 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-…) The `macos-15` runners default to Xcode 16.4 (iOS 18.5 SDK). Switch both iOS upload jobs to `macos-26` (Tahoe, GA), which has Xcode 26 as the only supported major. ### Android RC + Prod — hermesc location 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 The previous PR restored `react.root` to its default (`../..` = `packages/mobile`) to fix the Hermes JS bundle's entryFile lookup. The same plugin uses `root` to detect the prebuilt hermesc binary (PathUtils.kt#detectOSAwareHermesCommand) and only checks `root/node_modules/react-native/sdks/hermesc/...`. Since RN is hoisted to the monorepo node_modules, that lookup fails. Set `react.hermesCommand` explicitly to the hoisted prebuilt path: $rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc The `%OS-BIN%` placeholder is substituted at runtime by the plugin to `linux64-bin` / `osx-bin` / `win64-bin` as appropriate. Verified those bin directories exist in node_modules/react-native/sdks/hermesc/ in this branch. ### Housekeeping - `Gemfile.lock` dependency line aligned to `= 2.234.0` to match the Gemfile pin from #14394 (the squash-merge left the lock at the pre-pin `>= 2.228.0` constraint). - Bump versions to re-fire the build matrix: `1.5.182 -> 1.5.183`, iOS `1.1.195 -> 1.1.196`, Android `1.1.531 -> 1.1.532`. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/mobile.yml | 4 ++-- packages/mobile/android/app/build.gradle | 9 +++++++-- packages/mobile/ios/AudiusReactNative/Info.plist | 2 +- packages/mobile/ios/Gemfile.lock | 2 +- packages/mobile/package.json | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 8fa9dfdf0f6..dbd607c362b 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -432,7 +432,7 @@ jobs: # iOS Release Candidate: Build and upload mobile-build-upload-releasecandidate-ios: name: iOS Release Candidate Build & Upload - runs-on: macos-15 + runs-on: macos-26 needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' steps: @@ -834,7 +834,7 @@ jobs: # iOS Production: Build and upload (requires approval) mobile-build-upload-production-ios-main: name: iOS Production Build & Upload - runs-on: macos-15 + runs-on: macos-26 needs: [mobile-install, mobile-version-check] if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && needs.mobile-version-check.outputs.version_changed == 'true' environment: diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index fed87da48fb..1cd55af265e 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -46,7 +46,12 @@ react { // extraPackagerArgs = [] /* Hermes Commands */ // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // The RN Gradle plugin's hermesc lookup is anchored at `root` and only + // considers `root/node_modules/react-native/sdks/hermesc/...`. Since RN + // is hoisted to the monorepo node_modules, that lookup fails. Point the + // plugin at the hoisted prebuilt hermesc explicitly (%OS-BIN% is + // substituted by the plugin at runtime). + hermesCommand = "$rootDir/../../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc" // // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" // hermesFlags = ["-O", "-output-source-map"] @@ -129,7 +134,7 @@ android { // versionCode is automatically incremented in CI versionCode 1 // Make sure this is above the currently released Android version in the play store if your changes touch native code: - versionName "1.1.531" + versionName "1.1.532" resValue "string", "build_config_package", "co.audius.app" resConfigs "en" } diff --git a/packages/mobile/ios/AudiusReactNative/Info.plist b/packages/mobile/ios/AudiusReactNative/Info.plist index 524bbc7e0d3..cf346526a9f 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.195 + 1.1.196 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/ios/Gemfile.lock b/packages/mobile/ios/Gemfile.lock index 36ac3909a34..a2d9dbeecd3 100644 --- a/packages/mobile/ios/Gemfile.lock +++ b/packages/mobile/ios/Gemfile.lock @@ -302,7 +302,7 @@ DEPENDENCIES bigdecimal cocoapods (>= 1.13, != 1.15.1, != 1.15.0) concurrent-ruby (< 1.3.4) - fastlane (>= 2.228.0) + fastlane (= 2.234.0) fastlane-plugin-versioning logger mutex_m diff --git a/packages/mobile/package.json b/packages/mobile/package.json index e6d2f852f70..0b8c212f49c 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.182", + "version": "1.5.183", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug",