From e49b13a578f706e1d4c099f9526de40a747d7d06 Mon Sep 17 00:00:00 2001 From: Giovanni Laquidara Date: Wed, 27 May 2026 14:06:11 +0100 Subject: [PATCH 1/2] fix(ios): resolve Xcode 26 build failures with fmt consteval and icon sizing Xcode 26's stricter Clang rejects consteval usage in the fmt library bundled with hermes-engine, and enforces exact imagestack layer sizing for tvOS app icons. --- apps/expo-multi-tv/app.json | 1 + .../assets/tv_icons/icon-400x240.png | Bin 8290 -> 9711 bytes .../plugins/withFmtXcode26Fix.js | 37 ++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 apps/expo-multi-tv/plugins/withFmtXcode26Fix.js diff --git a/apps/expo-multi-tv/app.json b/apps/expo-multi-tv/app.json index 3200b08..5d69de2 100644 --- a/apps/expo-multi-tv/app.json +++ b/apps/expo-multi-tv/app.json @@ -4,6 +4,7 @@ "./plugins/withKotlinJvmTarget", "./plugins/withKeyEvent", "./plugins/withTvosDeploymentTarget", + "./plugins/withFmtXcode26Fix", [ "@react-native-tvos/config-tv", { diff --git a/apps/expo-multi-tv/assets/tv_icons/icon-400x240.png b/apps/expo-multi-tv/assets/tv_icons/icon-400x240.png index 17226ab73e8a8c2f5da8a27300175760678ce0bf..560a8f2f96debf45aa3a9cbaf2adcd58d39df319 100644 GIT binary patch literal 9711 zcmeHthg(z2_Gp5DltU9l4+um+ij+u~9z{T;NrzA(C3FIW(7TGD(yO!tlpU7wsg(mm&b-9l$^=wm{hnn2`wkggXF8FK_^WNMe0{Jt3C!zAkDdON5st zh))-euz@4tNPYl7)xp)v5`l04X;`{@I@nkuEs407vVi~MMWoCk`FEed*sM$ch5=hd zJV19ycptH%bbDyx0RYgppBG?~04*y3K=Rc=-xy`AsUc(S>LP4u<7x#L_Hl7Lrvk|N z$PhsnILZ>_M-(h7Dn!H(^6*8VEPaF! z9$bHQ^6!2gz&)&y4sIw1R|M$1UrQ@jPn0|-=Q*RlufOE9vHqKnnL1Gd)%wq#9D;p4>xab{_4@gw}4#>@iA0z}4`F{!ePd*od z{-;QCL<`F({be+LS663+|MYY@@PA_b%OZa<{y%)+LZ!c2i5{jvMWp<M4Zcp5Nxvm8e|>{saqNm-w2|n~YCWk>L||7>~`feZ>U4|AvBpAOXMA zV7FN{)t?|_T>K3D6mIU4`w%6%nZ&hgYJ(V9U zMHGCP90fVk8)Nu@q})0umgs;Ss;(HVRNg+;HF=6})iw3K7+cic!{9R=kVAt1cQ*V}d?i8FNHTZS6^>d%e@AUpsGKQymH*+=P=`P8Wgu~) z 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 literal 8290 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 diff --git a/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js b/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js new file mode 100644 index 0000000..c9f55ff --- /dev/null +++ b/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js @@ -0,0 +1,37 @@ +const { withDangerousMod } = require("expo/config-plugins"); +const fs = require("fs"); +const path = require("path"); + +function withFmtXcode26Fix(config) { + return withDangerousMod(config, [ + "ios", + (config) => { + const podfilePath = path.join( + config.modRequest.platformProjectRoot, + "Podfile" + ); + let podfile = fs.readFileSync(podfilePath, "utf8"); + + const fmtFix = ` + # Fix fmt consteval errors on Xcode 26+ + installer.pods_project.targets.each do |target| + if target.name == 'fmt' + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'FMT_CONSTEVAL=constexpr' + end + end + end`; + + podfile = podfile.replace( + /post_install do \|installer\|/, + `post_install do |installer|${fmtFix}` + ); + + fs.writeFileSync(podfilePath, podfile, "utf8"); + return config; + }, + ]); +} + +module.exports = withFmtXcode26Fix; From 08912980390db3a2ba49f15e6dff9da60699045c Mon Sep 17 00:00:00 2001 From: Giovanni Laquidara Date: Thu, 28 May 2026 18:02:49 +0100 Subject: [PATCH 2/2] fix(ios): improve Xcode 26 fmt fix with C++17 downgrade approach Move withFmtXcode26Fix plugin to last position so it runs after @react-native-tvos/config-tv writes the Podfile. Switch from FMT_CONSTEVAL preprocessor define to compiling the fmt pod with C++17, which is the community-recommended fix (react-native#55601). --- apps/expo-multi-tv/app.json | 4 ++-- apps/expo-multi-tv/plugins/withFmtXcode26Fix.js | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/expo-multi-tv/app.json b/apps/expo-multi-tv/app.json index 5d69de2..9de83a0 100644 --- a/apps/expo-multi-tv/app.json +++ b/apps/expo-multi-tv/app.json @@ -4,7 +4,6 @@ "./plugins/withKotlinJvmTarget", "./plugins/withKeyEvent", "./plugins/withTvosDeploymentTarget", - "./plugins/withFmtXcode26Fix", [ "@react-native-tvos/config-tv", { @@ -48,7 +47,8 @@ "useExoplayerDash": false } } - ] + ], + "./plugins/withFmtXcode26Fix" ], "name": "MultiTVSample", "slug": "MultiTVSample", diff --git a/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js b/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js index c9f55ff..d5f90d4 100644 --- a/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js +++ b/apps/expo-multi-tv/plugins/withFmtXcode26Fix.js @@ -12,13 +12,16 @@ function withFmtXcode26Fix(config) { ); let podfile = fs.readFileSync(podfilePath, "utf8"); + if (podfile.includes("CLANG_CXX_LANGUAGE_STANDARD") && podfile.includes("fmt")) { + return config; + } + const fmtFix = ` - # Fix fmt consteval errors on Xcode 26+ + # Fix fmt consteval errors on Xcode 26+ by compiling fmt with C++17 installer.pods_project.targets.each do |target| if target.name == 'fmt' - target.build_configurations.each do |config| - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'FMT_CONSTEVAL=constexpr' + target.build_configurations.each do |bc| + bc.build_settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++17' end end end`;