From 57baf881cf1461c369f5abae38f9f96a441c793a Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 22 May 2026 17:30:02 -0700 Subject: [PATCH 1/2] fix(mobile/android): drop react root override + bump versions for release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When I added the Android gradle plugin path overrides for the hoisted node_modules in PR #14365, I also moved `react.root` to the monorepo root. That broke the React-Native Gradle plugin's entryFile lookup, which is anchored at `root` — it ended up searching for index.js at the monorepo root instead of packages/mobile/index.js. The Android release/production builds in run 26316494213 failed with: > Task :app:createBundleReleaseCandidateReleaseJsAndAssets FAILED - 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. Restore the default `root = ../..` (packages/mobile) so entryFile resolves to packages/mobile/index.js. The other explicit overrides (reactNativeDir, codegenDir, cliFile) are absolute paths and still point at the hoisted node_modules — unaffected. Bump versions again so version-check fires the binary build jobs: - 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 Note: in the same run, both iOS jobs successfully archived (gym ~20min) but failed at the `pilot` TestFlight upload step with `undefined method 'each' for nil` in fastlane's itunes_transporter.rb — that's a separate fastlane error-reporting bug (fastlane#21455) masking the real Transporter error. Not addressed here; the iOS build itself works. Co-Authored-By: Claude Opus 4.7 --- packages/mobile/android/app/build.gradle | 7 ++++--- packages/mobile/ios/AudiusReactNative/Info.plist | 2 +- packages/mobile/package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/mobile/android/app/build.gradle b/packages/mobile/android/app/build.gradle index b34bb0a6865..fed87da48fb 100755 --- a/packages/mobile/android/app/build.gradle +++ b/packages/mobile/android/app/build.gradle @@ -11,8 +11,9 @@ apply plugin: "com.facebook.react" react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '../..' - // In monorepo setup, react-native and @react-native/* are hoisted to the root node_modules - root = file("../../../../") + // Leave at the default (../.. = packages/mobile) so index.js resolves correctly. + // In monorepo setup, react-native and @react-native/* are hoisted to the root + // node_modules — point the specific deps explicitly without moving `root`. // The folder where the react-native NPM package is. Default is ../../node_modules/react-native reactNativeDir = file("../../../../node_modules/react-native") // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen @@ -128,7 +129,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.530" + versionName "1.1.531" 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 7eff4972d41..524bbc7e0d3 100644 --- a/packages/mobile/ios/AudiusReactNative/Info.plist +++ b/packages/mobile/ios/AudiusReactNative/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1.194 + 1.1.195 CFBundleSignature ???? CFBundleURLTypes diff --git a/packages/mobile/package.json b/packages/mobile/package.json index a13ccfbde7a..e6d2f852f70 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.181", + "version": "1.5.182", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", From 8f47f56794949fc34a86517c30f743e65c99bc59 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Fri, 22 May 2026 17:41:39 -0700 Subject: [PATCH 2/2] fix(mobile/ios): pin fastlane to 2.234.0 to unblock TestFlight upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The TestFlight upload step in the iOS RC + Prod builds crashes with fastlane_core/itunes_transporter.rb:266:in 'execute': [!] undefined method 'each' for nil (NoMethodError) The build itself succeeds (gym archives the IPA in ~20 min), then pilot calls altool, which fails — but fastlane crashes trying to log the failure, hiding the real upload error. Root cause: 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 path then does `@all_lines[-20..-1].each`, but under Ruby 3.x the slice returns nil when the array has fewer than 20 elements (Ruby 3.0 changed Array#[] to no longer clamp out-of-range negative starts), so `.each` blows up on nil. Fixed upstream in fastlane: - 455bb5e1 (2.228.0): rewrites the displayer to iterate `@all_lines` directly, removing the broken slice - 744b01ce (2.230.0): updates ERROR_REGEX to also match "ERROR:" so Xcode 26 altool errors get parsed correctly Bump the Gemfile pin from 2.225.0 to 2.234.0 (latest at time of writing, includes both fixes). Lockfile updated to match. The Android Gemfile is already `>= 2.220.0` and locks at 2.231.1, so it's unaffected. Co-Authored-By: Claude Opus 4.7 --- packages/mobile/ios/Gemfile | 9 +- packages/mobile/ios/Gemfile.lock | 149 +++++++++++++++++-------------- 2 files changed, 90 insertions(+), 68 deletions(-) diff --git a/packages/mobile/ios/Gemfile b/packages/mobile/ios/Gemfile index 60090323c5d..8a74316d892 100644 --- a/packages/mobile/ios/Gemfile +++ b/packages/mobile/ios/Gemfile @@ -1,6 +1,13 @@ source "https://rubygems.org" -gem "fastlane", '~> 2.225.0' +# fastlane 2.225.0 (and 2.226.x/2.227.x) crashes during TestFlight upload on +# Xcode 26 runners: altool's error format changed from "*** Error:" to +# "ERROR:", which the older ERROR_REGEX in itunes_transporter.rb can't match. +# When @all_lines has fewer than 20 entries, the fallback slice +# `@all_lines[-20..-1]` returns nil under Ruby 3.x and the displayer crashes +# with `undefined method 'each' for nil`, masking the real upload error. +# Fixed by fastlane#29545 + #29740, first released in 2.228.0. +gem "fastlane", '2.234.0' plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/packages/mobile/ios/Gemfile.lock b/packages/mobile/ios/Gemfile.lock index c6fb4542c6c..36ac3909a34 100644 --- a/packages/mobile/ios/Gemfile.lock +++ b/packages/mobile/ios/Gemfile.lock @@ -3,6 +3,7 @@ GEM specs: CFPropertyList (3.0.6) rexml + abbrev (0.1.2) activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) @@ -15,24 +16,27 @@ GEM json (>= 1.5.1) artifactory (3.0.17) atomos (0.1.3) - aws-eventstream (1.3.0) - aws-partitions (1.993.0) - aws-sdk-core (3.211.0) + aws-eventstream (1.4.0) + aws-partitions (1.1253.0) + aws-sdk-core (3.249.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.95.0) - aws-sdk-core (~> 3, >= 3.210.0) + logger + aws-sdk-kms (1.128.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.169.0) - aws-sdk-core (~> 3, >= 3.210.0) + aws-sdk-s3 (1.224.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.1) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) - base64 (0.2.0) + base64 (0.3.0) benchmark (0.2.0) bigdecimal (3.1.1) claide (1.1.0) @@ -78,8 +82,9 @@ GEM commander (4.6.0) highline (~> 2.0.0) concurrent-ruby (1.2.2) + csv (3.3.5) declarative (0.0.20) - digest-crc (0.6.5) + digest-crc (0.7.0) rake (>= 12.0.0, < 14.0.0) domain_name (0.6.20240107) dotenv (2.8.1) @@ -88,7 +93,7 @@ GEM ethon (0.16.0) ffi (>= 1.15.0) excon (0.112.0) - faraday (1.10.4) + faraday (1.10.5) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -100,32 +105,36 @@ GEM faraday-rack (~> 1.0) faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) + faraday-cookie_jar (0.0.8) faraday (>= 0.8.0) - http-cookie (~> 1.0.0) + http-cookie (>= 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) + faraday-multipart (1.2.0) + multipart-post (~> 2.0) faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday-retry (1.0.4) faraday_middleware (1.2.1) faraday (~> 1.0) - fastimage (2.3.1) - fastlane (2.225.0) - CFPropertyList (>= 2.3, < 4.0.0) + fastimage (2.4.1) + fastlane (2.234.0) + CFPropertyList (>= 2.3, < 5.0.0) + abbrev (~> 0.1) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) - aws-sdk-s3 (~> 1.0) + aws-sdk-s3 (~> 1.197) babosa (>= 1.0.3, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) + base64 (~> 0.2) + benchmark (>= 0.1.0) + bundler (>= 1.17.3, < 5.0.0) colored (~> 1.2) commander (~> 4.6) + csv (~> 3.3) dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 4.0) excon (>= 0.71.0, < 1.0.0) @@ -133,20 +142,24 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) - fastlane-sirp (>= 1.0.0) + fastlane-sirp (>= 1.1.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-env (>= 1.6.0, <= 2.1.1) google-cloud-storage (~> 1.31) highline (~> 2.0) http-cookie (~> 1.0.5) json (< 3.0.0) jwt (>= 2.1.0, < 3) + logger (>= 1.6, < 2.0) mini_magick (>= 4.9.4, < 5.0.0) multipart-post (>= 2.0.0, < 3.0.0) + mutex_m (~> 0.3) naturally (~> 2.2) + nkf (~> 0.2) optparse (>= 0.1.1, < 1.0.0) + ostruct (>= 0.1.0) plist (>= 3.1.0, < 4.0.0) rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.5) @@ -157,99 +170,101 @@ GEM tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) + xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) fastlane-plugin-versioning (0.5.2) - fastlane-sirp (1.0.0) - sysrandom (~> 1.0) + fastlane-sirp (1.1.0) ffi (1.17.1) ffi (1.17.1-arm64-darwin) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - google-apis-androidpublisher_v3 (0.54.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-core (0.11.3) + google-apis-androidpublisher_v3 (0.100.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) + googleauth (~> 1.9) + httpclient (>= 2.8.3, < 3.a) mini_mime (~> 1.0) + mutex_m representable (~> 3.0) retriable (>= 2.0, < 4.a) - rexml - google-apis-iamcredentials_v1 (0.17.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-playcustomapp_v1 (0.13.0) - google-apis-core (>= 0.11.0, < 2.a) - google-apis-storage_v1 (0.31.0) - google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.7.1) + google-apis-iamcredentials_v1 (0.27.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-playcustomapp_v1 (0.17.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-storage_v1 (0.62.0) + google-apis-core (>= 0.15.0, < 2.a) + google-cloud-core (1.8.0) google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) - google-cloud-errors (1.4.0) - google-cloud-storage (1.47.0) + google-cloud-env (2.1.1) + faraday (>= 1.0, < 3.a) + google-cloud-errors (1.6.0) + google-cloud-storage (1.60.0) addressable (~> 2.8) digest-crc (~> 0.4) - google-apis-iamcredentials_v1 (~> 0.1) - google-apis-storage_v1 (~> 0.31.0) + google-apis-core (>= 0.18, < 2) + google-apis-iamcredentials_v1 (~> 0.18) + google-apis-storage_v1 (>= 0.42) google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) + googleauth (~> 1.9) mini_mime (~> 1.0) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + googleauth (1.11.2) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) highline (2.0.3) - http-cookie (1.0.7) + http-cookie (1.0.8) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.14.1) concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.7.1) - jwt (2.9.3) + jwt (2.10.3) base64 - logger (1.5.0) + logger (1.7.0) mini_magick (4.13.2) mini_mime (1.1.5) minitest (5.20.0) molinillo (0.8.0) - multi_json (1.15.0) + multi_json (1.19.1) multipart-post (2.4.1) - mutex_m (0.1.1) + mutex_m (0.3.0) nanaimo (0.3.0) nap (1.1.0) - naturally (2.2.1) + naturally (2.3.0) netrc (0.11.0) - optparse (0.5.0) + nkf (0.2.0) + optparse (0.8.1) os (1.1.4) - plist (3.7.1) + ostruct (0.6.3) + plist (3.7.2) public_suffix (4.0.7) - rake (13.2.1) + rake (13.4.2) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - retriable (3.1.2) + retriable (3.4.1) rexml (3.4.0) - rouge (2.0.7) + rouge (3.28.0) ruby-macho (2.5.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.4.1) security (0.1.5) - signet (0.19.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList naturally - sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -272,8 +287,8 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (>= 3.3.6, < 4.0) - xcpretty (0.3.0) - rouge (~> 2.0.7) + xcpretty (0.4.1) + rouge (~> 3.28.0) xcpretty-travis-formatter (1.0.1) xcpretty (~> 0.2, >= 0.0.7) @@ -287,7 +302,7 @@ DEPENDENCIES bigdecimal cocoapods (>= 1.13, != 1.15.1, != 1.15.0) concurrent-ruby (< 1.3.4) - fastlane (~> 2.225.0) + fastlane (>= 2.228.0) fastlane-plugin-versioning logger mutex_m