Build/Submit details page URL
https://expo.dev/accounts/tlon/projects/groups/builds/6b9f9554-d8d3-43af-bd25-5efbe4e0103e
(Public CI run that started this build: https://github.com/tloncorp/tlon-apps/actions/runs/28060676912)
Summary
On Expo SDK 56 with ios.useFrameworks: "static", EAS Build turns on EXPO_USE_PRECOMPILED_MODULES=1 by itself. pod install then fails in the Install pods phase with a duplicate pod error for ExpoContacts. The same project, with the same autolinking commands, installs pods fine when I build locally (not on EAS). Setting EXPO_USE_PRECOMPILED_MODULES=0 in the build profile avoids it and the build completes.
Managed or bare?
Bare (the native ios/android projects are committed), pnpm monorepo.
Environment
npx expo-env-info:
expo-env-info 2.0.14 environment info:
System:
OS: macOS 26.5
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.22.2
npm: 10.9.7
Watchman: 2026.03.02.00
Managers:
CocoaPods: 1.16.2
IDEs:
Xcode: 26.2/17C52
npmPackages:
babel-preset-expo: ~56.0.0 => 56.0.13
npmGlobalPackages:
eas-cli: 19.0.1
Expo Workflow: bare
Other relevant versions (from the mobile app's package.json):
expo@56.0.12, react-native@0.85.3, New Architecture enabled
expo-contacts@~56.0.9
@react-native-firebase/{app,crashlytics,perf}@^24.0.0 with $RNFirebaseAsStaticFramework = true
- iOS
ios.useFrameworks: "static" (needed for @react-native-firebase/* static linking)
- pnpm monorepo (pnpm 9.0.5, node 22.22.0 on the EAS build)
- EAS Build image
macos-tahoe-26.4-xcode-26.4
The build that hit this ran on EAS, so the failing pod install is in the EAS build log linked above, not on my machine.
Error output
pod install fails in the EAS Install pods phase with:
[!] There are multiple dependencies with different sources for `ExpoContacts` in `Podfile`:
- ExpoContacts (from `../../../node_modules/expo-contacts/ios`)
- ExpoContacts (from `../../../node_modules/expo-contacts/ios/ExpoContacts.podspec`)
pod install exited with non-zero code: 1
Earlier in the same install log:
[Expo] EXPO_USE_PRECOMPILED_MODULES=1 was set, but React Native is configured to build from source (RCT_USE_PREBUILT_RNCORE is not 1). Precompiled Expo modules require the prebuilt React.xcframework, so every Expo module will be built from source for this install.
What I noticed:
- The duplicate only shows up on the EAS precompiled-modules path. When I run the same autolinking commands from the generated
Podfile locally (not on EAS), ExpoContacts is added only once, through use_expo_modules!. It does not show up in the use_native_modules! output. No duplicate locally.
- There is no manual
pod 'ExpoContacts' or extraPods entry. The duplicate comes from autolinking on the precompiled path: one source is the module folder expo-contacts/ios, the other is its ExpoContacts.podspec.
- EAS turns on
EXPO_USE_PRECOMPILED_MODULES=1 by itself for SDK 56, which is why this happens on the build servers but not locally.
Workaround
Set EXPO_USE_PRECOMPILED_MODULES=0 in the build profile env (build all Expo modules from source). pod install then succeeds and the build completes normally.
The other option, RCT_USE_PREBUILT_RNCORE=1, gets past the ExpoContacts duplicate, but then use_react_native_codegen_discovery is skipped, so third-party New Architecture codegen headers go missing (for example react-native-worklets's <rnworklets/rnworklets.h> is not found at compile time).
Reproducible demo or steps to reproduce from a blank project
I have not been able to pull a small standalone repro out of the (private) monorepo yet, but the trigger is specific and consistent: SDK 56 + ios.useFrameworks: "static" + EAS turning on precompiled modules. The expected behavior is that the precompiled-modules autolinking adds ExpoContacts (and other Expo modules) only once, the same as local pod install. Happy to gather more from a build if that helps.
Originally filed against the SDK repo (closed for missing repro): expo/expo#47266
Build/Submit details page URL
https://expo.dev/accounts/tlon/projects/groups/builds/6b9f9554-d8d3-43af-bd25-5efbe4e0103e
(Public CI run that started this build: https://github.com/tloncorp/tlon-apps/actions/runs/28060676912)
Summary
On Expo SDK 56 with
ios.useFrameworks: "static", EAS Build turns onEXPO_USE_PRECOMPILED_MODULES=1by itself.pod installthen fails in the Install pods phase with a duplicate pod error forExpoContacts. The same project, with the same autolinking commands, installs pods fine when I build locally (not on EAS). SettingEXPO_USE_PRECOMPILED_MODULES=0in the build profile avoids it and the build completes.Managed or bare?
Bare (the native
ios/androidprojects are committed), pnpm monorepo.Environment
npx expo-env-info:Other relevant versions (from the mobile app's
package.json):expo@56.0.12,react-native@0.85.3, New Architecture enabledexpo-contacts@~56.0.9@react-native-firebase/{app,crashlytics,perf}@^24.0.0with$RNFirebaseAsStaticFramework = trueios.useFrameworks: "static"(needed for@react-native-firebase/*static linking)macos-tahoe-26.4-xcode-26.4The build that hit this ran on EAS, so the failing
pod installis in the EAS build log linked above, not on my machine.Error output
pod installfails in the EAS Install pods phase with:Earlier in the same install log:
What I noticed:
Podfilelocally (not on EAS),ExpoContactsis added only once, throughuse_expo_modules!. It does not show up in theuse_native_modules!output. No duplicate locally.pod 'ExpoContacts'orextraPodsentry. The duplicate comes from autolinking on the precompiled path: one source is the module folderexpo-contacts/ios, the other is itsExpoContacts.podspec.EXPO_USE_PRECOMPILED_MODULES=1by itself for SDK 56, which is why this happens on the build servers but not locally.Workaround
Set
EXPO_USE_PRECOMPILED_MODULES=0in the build profileenv(build all Expo modules from source).pod installthen succeeds and the build completes normally.The other option,
RCT_USE_PREBUILT_RNCORE=1, gets past theExpoContactsduplicate, but thenuse_react_native_codegen_discoveryis skipped, so third-party New Architecture codegen headers go missing (for examplereact-native-worklets's<rnworklets/rnworklets.h>is not found at compile time).Reproducible demo or steps to reproduce from a blank project
I have not been able to pull a small standalone repro out of the (private) monorepo yet, but the trigger is specific and consistent: SDK 56 +
ios.useFrameworks: "static"+ EAS turning on precompiled modules. The expected behavior is that the precompiled-modules autolinking addsExpoContacts(and other Expo modules) only once, the same as localpod install. Happy to gather more from a build if that helps.Originally filed against the SDK repo (closed for missing repro): expo/expo#47266