Skip to content

Commit 06420ca

Browse files
fix(mobile): unblock release flow — Android Hermes entryFile + iOS fastlane Xcode 26 (#14394)
## 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>
1 parent f950823 commit 06420ca

5 files changed

Lines changed: 96 additions & 73 deletions

File tree

packages/mobile/android/app/build.gradle

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ apply plugin: "com.facebook.react"
1111
react {
1212
/* Folders */
1313
// The root of your project, i.e. where "package.json" lives. Default is '../..'
14-
// In monorepo setup, react-native and @react-native/* are hoisted to the root node_modules
15-
root = file("../../../../")
14+
// Leave at the default (../.. = packages/mobile) so index.js resolves correctly.
15+
// In monorepo setup, react-native and @react-native/* are hoisted to the root
16+
// node_modules — point the specific deps explicitly without moving `root`.
1617
// The folder where the react-native NPM package is. Default is ../../node_modules/react-native
1718
reactNativeDir = file("../../../../node_modules/react-native")
1819
// The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
@@ -128,7 +129,7 @@ android {
128129
// versionCode is automatically incremented in CI
129130
versionCode 1
130131
// Make sure this is above the currently released Android version in the play store if your changes touch native code:
131-
versionName "1.1.530"
132+
versionName "1.1.531"
132133
resValue "string", "build_config_package", "co.audius.app"
133134
resConfigs "en"
134135
}

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.194</string>
20+
<string>1.1.195</string>
2121
<key>CFBundleSignature</key>
2222
<string>????</string>
2323
<key>CFBundleURLTypes</key>

packages/mobile/ios/Gemfile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
source "https://rubygems.org"
22

3-
gem "fastlane", '~> 2.225.0'
3+
# fastlane 2.225.0 (and 2.226.x/2.227.x) crashes during TestFlight upload on
4+
# Xcode 26 runners: altool's error format changed from "*** Error:" to
5+
# "ERROR:", which the older ERROR_REGEX in itunes_transporter.rb can't match.
6+
# When @all_lines has fewer than 20 entries, the fallback slice
7+
# `@all_lines[-20..-1]` returns nil under Ruby 3.x and the displayer crashes
8+
# with `undefined method 'each' for nil`, masking the real upload error.
9+
# Fixed by fastlane#29545 + #29740, first released in 2.228.0.
10+
gem "fastlane", '2.234.0'
411

512
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
613
eval_gemfile(plugins_path) if File.exist?(plugins_path)

packages/mobile/ios/Gemfile.lock

Lines changed: 82 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ GEM
33
specs:
44
CFPropertyList (3.0.6)
55
rexml
6+
abbrev (0.1.2)
67
activesupport (7.0.8)
78
concurrent-ruby (~> 1.0, >= 1.0.2)
89
i18n (>= 1.6, < 2)
@@ -15,24 +16,27 @@ GEM
1516
json (>= 1.5.1)
1617
artifactory (3.0.17)
1718
atomos (0.1.3)
18-
aws-eventstream (1.3.0)
19-
aws-partitions (1.993.0)
20-
aws-sdk-core (3.211.0)
19+
aws-eventstream (1.4.0)
20+
aws-partitions (1.1253.0)
21+
aws-sdk-core (3.249.0)
2122
aws-eventstream (~> 1, >= 1.3.0)
2223
aws-partitions (~> 1, >= 1.992.0)
2324
aws-sigv4 (~> 1.9)
25+
base64
26+
bigdecimal
2427
jmespath (~> 1, >= 1.6.1)
25-
aws-sdk-kms (1.95.0)
26-
aws-sdk-core (~> 3, >= 3.210.0)
28+
logger
29+
aws-sdk-kms (1.128.0)
30+
aws-sdk-core (~> 3, >= 3.248.0)
2731
aws-sigv4 (~> 1.5)
28-
aws-sdk-s3 (1.169.0)
29-
aws-sdk-core (~> 3, >= 3.210.0)
32+
aws-sdk-s3 (1.224.0)
33+
aws-sdk-core (~> 3, >= 3.248.0)
3034
aws-sdk-kms (~> 1)
3135
aws-sigv4 (~> 1.5)
32-
aws-sigv4 (1.10.1)
36+
aws-sigv4 (1.12.1)
3337
aws-eventstream (~> 1, >= 1.0.2)
3438
babosa (1.0.4)
35-
base64 (0.2.0)
39+
base64 (0.3.0)
3640
benchmark (0.2.0)
3741
bigdecimal (3.1.1)
3842
claide (1.1.0)
@@ -78,8 +82,9 @@ GEM
7882
commander (4.6.0)
7983
highline (~> 2.0.0)
8084
concurrent-ruby (1.2.2)
85+
csv (3.3.5)
8186
declarative (0.0.20)
82-
digest-crc (0.6.5)
87+
digest-crc (0.7.0)
8388
rake (>= 12.0.0, < 14.0.0)
8489
domain_name (0.6.20240107)
8590
dotenv (2.8.1)
@@ -88,7 +93,7 @@ GEM
8893
ethon (0.16.0)
8994
ffi (>= 1.15.0)
9095
excon (0.112.0)
91-
faraday (1.10.4)
96+
faraday (1.10.5)
9297
faraday-em_http (~> 1.0)
9398
faraday-em_synchrony (~> 1.0)
9499
faraday-excon (~> 1.1)
@@ -100,53 +105,61 @@ GEM
100105
faraday-rack (~> 1.0)
101106
faraday-retry (~> 1.0)
102107
ruby2_keywords (>= 0.0.4)
103-
faraday-cookie_jar (0.0.7)
108+
faraday-cookie_jar (0.0.8)
104109
faraday (>= 0.8.0)
105-
http-cookie (~> 1.0.0)
110+
http-cookie (>= 1.0.0)
106111
faraday-em_http (1.0.0)
107-
faraday-em_synchrony (1.0.0)
112+
faraday-em_synchrony (1.0.1)
108113
faraday-excon (1.1.0)
109114
faraday-httpclient (1.0.1)
110-
faraday-multipart (1.0.4)
111-
multipart-post (~> 2)
115+
faraday-multipart (1.2.0)
116+
multipart-post (~> 2.0)
112117
faraday-net_http (1.0.2)
113118
faraday-net_http_persistent (1.2.0)
114119
faraday-patron (1.0.0)
115120
faraday-rack (1.0.0)
116-
faraday-retry (1.0.3)
121+
faraday-retry (1.0.4)
117122
faraday_middleware (1.2.1)
118123
faraday (~> 1.0)
119-
fastimage (2.3.1)
120-
fastlane (2.225.0)
121-
CFPropertyList (>= 2.3, < 4.0.0)
124+
fastimage (2.4.1)
125+
fastlane (2.234.0)
126+
CFPropertyList (>= 2.3, < 5.0.0)
127+
abbrev (~> 0.1)
122128
addressable (>= 2.8, < 3.0.0)
123129
artifactory (~> 3.0)
124-
aws-sdk-s3 (~> 1.0)
130+
aws-sdk-s3 (~> 1.197)
125131
babosa (>= 1.0.3, < 2.0.0)
126-
bundler (>= 1.12.0, < 3.0.0)
132+
base64 (~> 0.2)
133+
benchmark (>= 0.1.0)
134+
bundler (>= 1.17.3, < 5.0.0)
127135
colored (~> 1.2)
128136
commander (~> 4.6)
137+
csv (~> 3.3)
129138
dotenv (>= 2.1.1, < 3.0.0)
130139
emoji_regex (>= 0.1, < 4.0)
131140
excon (>= 0.71.0, < 1.0.0)
132141
faraday (~> 1.0)
133142
faraday-cookie_jar (~> 0.0.6)
134143
faraday_middleware (~> 1.0)
135144
fastimage (>= 2.1.0, < 3.0.0)
136-
fastlane-sirp (>= 1.0.0)
145+
fastlane-sirp (>= 1.1.0)
137146
gh_inspector (>= 1.1.2, < 2.0.0)
138147
google-apis-androidpublisher_v3 (~> 0.3)
139148
google-apis-playcustomapp_v1 (~> 0.1)
140-
google-cloud-env (>= 1.6.0, < 2.0.0)
149+
google-cloud-env (>= 1.6.0, <= 2.1.1)
141150
google-cloud-storage (~> 1.31)
142151
highline (~> 2.0)
143152
http-cookie (~> 1.0.5)
144153
json (< 3.0.0)
145154
jwt (>= 2.1.0, < 3)
155+
logger (>= 1.6, < 2.0)
146156
mini_magick (>= 4.9.4, < 5.0.0)
147157
multipart-post (>= 2.0.0, < 3.0.0)
158+
mutex_m (~> 0.3)
148159
naturally (~> 2.2)
160+
nkf (~> 0.2)
149161
optparse (>= 0.1.1, < 1.0.0)
162+
ostruct (>= 0.1.0)
150163
plist (>= 3.1.0, < 4.0.0)
151164
rubyzip (>= 2.0.0, < 3.0.0)
152165
security (= 0.1.5)
@@ -157,99 +170,101 @@ GEM
157170
tty-spinner (>= 0.8.0, < 1.0.0)
158171
word_wrap (~> 1.0.0)
159172
xcodeproj (>= 1.13.0, < 2.0.0)
160-
xcpretty (~> 0.3.0)
173+
xcpretty (~> 0.4.1)
161174
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
162175
fastlane-plugin-versioning (0.5.2)
163-
fastlane-sirp (1.0.0)
164-
sysrandom (~> 1.0)
176+
fastlane-sirp (1.1.0)
165177
ffi (1.17.1)
166178
ffi (1.17.1-arm64-darwin)
167179
fourflusher (2.3.1)
168180
fuzzy_match (2.0.4)
169181
gh_inspector (1.1.3)
170-
google-apis-androidpublisher_v3 (0.54.0)
171-
google-apis-core (>= 0.11.0, < 2.a)
172-
google-apis-core (0.11.3)
182+
google-apis-androidpublisher_v3 (0.100.0)
183+
google-apis-core (>= 0.15.0, < 2.a)
184+
google-apis-core (0.18.0)
173185
addressable (~> 2.5, >= 2.5.1)
174-
googleauth (>= 0.16.2, < 2.a)
175-
httpclient (>= 2.8.1, < 3.a)
186+
googleauth (~> 1.9)
187+
httpclient (>= 2.8.3, < 3.a)
176188
mini_mime (~> 1.0)
189+
mutex_m
177190
representable (~> 3.0)
178191
retriable (>= 2.0, < 4.a)
179-
rexml
180-
google-apis-iamcredentials_v1 (0.17.0)
181-
google-apis-core (>= 0.11.0, < 2.a)
182-
google-apis-playcustomapp_v1 (0.13.0)
183-
google-apis-core (>= 0.11.0, < 2.a)
184-
google-apis-storage_v1 (0.31.0)
185-
google-apis-core (>= 0.11.0, < 2.a)
186-
google-cloud-core (1.7.1)
192+
google-apis-iamcredentials_v1 (0.27.0)
193+
google-apis-core (>= 0.15.0, < 2.a)
194+
google-apis-playcustomapp_v1 (0.17.0)
195+
google-apis-core (>= 0.15.0, < 2.a)
196+
google-apis-storage_v1 (0.62.0)
197+
google-apis-core (>= 0.15.0, < 2.a)
198+
google-cloud-core (1.8.0)
187199
google-cloud-env (>= 1.0, < 3.a)
188200
google-cloud-errors (~> 1.0)
189-
google-cloud-env (1.6.0)
190-
faraday (>= 0.17.3, < 3.0)
191-
google-cloud-errors (1.4.0)
192-
google-cloud-storage (1.47.0)
201+
google-cloud-env (2.1.1)
202+
faraday (>= 1.0, < 3.a)
203+
google-cloud-errors (1.6.0)
204+
google-cloud-storage (1.60.0)
193205
addressable (~> 2.8)
194206
digest-crc (~> 0.4)
195-
google-apis-iamcredentials_v1 (~> 0.1)
196-
google-apis-storage_v1 (~> 0.31.0)
207+
google-apis-core (>= 0.18, < 2)
208+
google-apis-iamcredentials_v1 (~> 0.18)
209+
google-apis-storage_v1 (>= 0.42)
197210
google-cloud-core (~> 1.6)
198-
googleauth (>= 0.16.2, < 2.a)
211+
googleauth (~> 1.9)
199212
mini_mime (~> 1.0)
200-
googleauth (1.8.1)
201-
faraday (>= 0.17.3, < 3.a)
213+
googleauth (1.11.2)
214+
faraday (>= 1.0, < 3.a)
215+
google-cloud-env (~> 2.1)
202216
jwt (>= 1.4, < 3.0)
203217
multi_json (~> 1.11)
204218
os (>= 0.9, < 2.0)
205219
signet (>= 0.16, < 2.a)
206220
highline (2.0.3)
207-
http-cookie (1.0.7)
221+
http-cookie (1.0.8)
208222
domain_name (~> 0.5)
209223
httpclient (2.8.3)
210224
i18n (1.14.1)
211225
concurrent-ruby (~> 1.0)
212226
jmespath (1.6.2)
213227
json (2.7.1)
214-
jwt (2.9.3)
228+
jwt (2.10.3)
215229
base64
216-
logger (1.5.0)
230+
logger (1.7.0)
217231
mini_magick (4.13.2)
218232
mini_mime (1.1.5)
219233
minitest (5.20.0)
220234
molinillo (0.8.0)
221-
multi_json (1.15.0)
235+
multi_json (1.19.1)
222236
multipart-post (2.4.1)
223-
mutex_m (0.1.1)
237+
mutex_m (0.3.0)
224238
nanaimo (0.3.0)
225239
nap (1.1.0)
226-
naturally (2.2.1)
240+
naturally (2.3.0)
227241
netrc (0.11.0)
228-
optparse (0.5.0)
242+
nkf (0.2.0)
243+
optparse (0.8.1)
229244
os (1.1.4)
230-
plist (3.7.1)
245+
ostruct (0.6.3)
246+
plist (3.7.2)
231247
public_suffix (4.0.7)
232-
rake (13.2.1)
248+
rake (13.4.2)
233249
representable (3.2.0)
234250
declarative (< 0.1.0)
235251
trailblazer-option (>= 0.1.1, < 0.2.0)
236252
uber (< 0.2.0)
237-
retriable (3.1.2)
253+
retriable (3.4.1)
238254
rexml (3.4.0)
239-
rouge (2.0.7)
255+
rouge (3.28.0)
240256
ruby-macho (2.5.1)
241257
ruby2_keywords (0.0.5)
242-
rubyzip (2.3.2)
258+
rubyzip (2.4.1)
243259
security (0.1.5)
244-
signet (0.19.0)
260+
signet (0.21.0)
245261
addressable (~> 2.8)
246262
faraday (>= 0.17.5, < 3.a)
247-
jwt (>= 1.5, < 3.0)
263+
jwt (>= 1.5, < 4.0)
248264
multi_json (~> 1.10)
249265
simctl (1.6.10)
250266
CFPropertyList
251267
naturally
252-
sysrandom (1.0.5)
253268
terminal-notifier (2.0.0)
254269
terminal-table (3.0.2)
255270
unicode-display_width (>= 1.1.1, < 3)
@@ -272,8 +287,8 @@ GEM
272287
colored2 (~> 3.1)
273288
nanaimo (~> 0.3.0)
274289
rexml (>= 3.3.6, < 4.0)
275-
xcpretty (0.3.0)
276-
rouge (~> 2.0.7)
290+
xcpretty (0.4.1)
291+
rouge (~> 3.28.0)
277292
xcpretty-travis-formatter (1.0.1)
278293
xcpretty (~> 0.2, >= 0.0.7)
279294

@@ -287,7 +302,7 @@ DEPENDENCIES
287302
bigdecimal
288303
cocoapods (>= 1.13, != 1.15.1, != 1.15.0)
289304
concurrent-ruby (< 1.3.4)
290-
fastlane (~> 2.225.0)
305+
fastlane (>= 2.228.0)
291306
fastlane-plugin-versioning
292307
logger
293308
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.181",
3+
"version": "1.5.182",
44
"private": true,
55
"scripts": {
66
"android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug",

0 commit comments

Comments
 (0)