diff --git a/app.json b/app.json index 6caffc47..083b9c60 100644 --- a/app.json +++ b/app.json @@ -131,6 +131,7 @@ ], "expo-web-browser", ["./plugins/with-runtime-framework-headers.js"], + ["./plugins/withModularHeaders.js"], ["./plugins/withChangeNativeAndroidTextToWhite.js"], ["./plugins/withAndroidAlertColors.js"], ["./plugins/withAndroidManifest.js"], diff --git a/plugins/withModularHeaders.js b/plugins/withModularHeaders.js new file mode 100644 index 00000000..24d22123 --- /dev/null +++ b/plugins/withModularHeaders.js @@ -0,0 +1,24 @@ +const { withPodfile } = require("expo/config-plugins"); + +// Without `useFrameworks: static`, older Obj-C pods that do `#import ` +// (e.g. react-native-udp's UdpSockets.m -> ) can't resolve the +// React umbrella. `use_modular_headers!` restores module-style header maps for all +// pods so resolves again. Inserted at the top of the main target. +const MARKER = "use_modular_headers! # streamyfin: for legacy pods"; + +module.exports = function withModularHeaders(config) { + return withPodfile(config, (config) => { + let podfile = config.modResults.contents; + + if (!podfile.includes(MARKER)) { + podfile = podfile.replace( + /^(target\s+['"][^'"]+['"]\s+do)\s*$/m, + (match) => `${match}\n ${MARKER}`, + ); + config.modResults.contents = podfile; + console.log("✅ withModularHeaders: use_modular_headers! injected"); + } + + return config; + }); +};