Commit 669bf5b
fix(mobile): track-player RN 0.79 compat + fmt consteval for Xcode 26 (#14397)
## Summary
#14396 unblocked the runner + hermesc issues. The binary build matrix
now actually compiles and surfaces two real upstream-library
incompatibilities with React Native 0.79 + Xcode 26 in [run
26320122339](https://github.com/AudiusProject/apps/actions/runs/26320122339).
### 1. Android RC + Prod — \`react-native-track-player@4.0.1\` is
incompatible with RN 0.79
Kotlin compile error at \`react-native-track-player\` against the
updated \`HeadlessJsTaskService\` in RN 0.79:
\`\`\`
e:
file://.../react-native-track-player/android/src/main/java/com/doublesymmetry/trackplayer/service/MusicService.kt:764:5
'onBind' overrides nothing.
\`\`\`
RN 0.79's
[\`HeadlessJsTaskService.kt:58\`](https://github.com/facebook/react-native/blob/0.79-stable/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.kt#L58)
now declares:
\`\`\`kotlin
override fun onBind(intent: Intent): IBinder? = null
\`\`\`
but \`react-native-track-player@4.0.1\` still has the pre-0.79
signature:
\`\`\`kotlin
override fun onBind(intent: Intent?): IBinder
\`\`\`
Kotlin allows covariant return types but not contravariant parameter
types — \`Intent?\` ≠ \`Intent\` for override matching, so the compiler
errors. \`react-native-track-player@4.1.2\` already matches RN 0.79's
signature, so bumping the dep is the fix.
- \`packages/mobile/package.json\`: \`4.0.1\` → \`4.1.2\`
- \`package-lock.json\` regenerated to match.
### 2. iOS RC + Prod — \`fmt 11.0.2\` consteval fails under Xcode 26 /
Apple Clang
xcodebuild archive failed compiling the \`fmt\` Pod:
\`\`\`
Pods/fmt/include/fmt/format-inl.h:59: error: call to consteval function
'fmt::basic_format_string<...>' is not a constant expression
59 | fmt::format_to(it, FMT_STRING("{}{}"), message, SEP);
\`\`\`
RN 0.79 pins fmt 11.0.2 via
[\`third-party-podspecs/fmt.podspec\`](https://github.com/facebook/react-native/blob/0.79-stable/packages/react-native/third-party-podspecs/fmt.podspec).
Apple Clang in Xcode 26 enforces stricter \`consteval\` evaluation than
11.0.2 was written against. Fixed upstream in fmt 11.1+ (RN 0.80 picks
up the newer fmt); for 0.79 the standard workaround is
\`-DFMT_USE_CONSTEVAL=0\`, which falls back to the constexpr
implementation.
Add a Podfile post_install hook that injects \`FMT_USE_CONSTEVAL=0\`
into \`GCC_PREPROCESSOR_DEFINITIONS\` for the \`fmt\` target only. CI's
existing \`bundle exec pod install\` step picks up the change with no
lockfile churn.
### Re-trigger the release flow
- \`packages/mobile/package.json\`: \`1.5.183\` → \`1.5.184\`
- iOS \`Info.plist\` \`CFBundleShortVersionString\`: \`1.1.196\` →
\`1.1.197\`
- Android \`versionName\`: \`1.1.532\` → \`1.1.533\`
## Test plan
- [ ] Merge → version-check fires all 4 binary jobs
- [ ] Android RC + Prod pass Kotlin compile and reach \`fastlane
releaseCandidate\` / \`prod\` (no \`onBind overrides nothing\`)
- [ ] iOS RC + Prod compile \`fmt\` cleanly under Xcode 26 (no
\`consteval\` error) and reach \`pilot\`
- [ ] Slack notifications fire on success
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>1 parent 1219e2a commit 669bf5b
5 files changed
Lines changed: 45 additions & 26 deletions
File tree
- packages/mobile
- android/app
- ios
- AudiusReactNative
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
137 | | - | |
| 137 | + | |
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
100 | 116 | | |
101 | 117 | | |
102 | 118 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
152 | | - | |
| 152 | + | |
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| |||
0 commit comments