Hermes ABI mismatch on EAS Build with Expo SDK 54
21:44 14 May 2026

I'm hitting a persistent iOS linker error on EAS Build with Expo SDK 54 and React Native 0.81.5 that I haven't been able to resolve across dozens of attempts. The same error occurs on both Xcode 16.2 and Xcode 26.

Environment:

  • Expo SDK: 54.0.34

  • React Native: 0.81.5

  • expo-router: ~6.0.23

  • react-native-reanimated: ~4.1.1

  • EAS Build image: macos-sequoia-15.3-xcode-16.2 (also tried macos-sequoia-15.5-xcode-26.0)

  • iOS deployment target: 15.1

  • New Architecture: enabled

  • Hermes: enabled

The error:

Undefined symbols for architecture arm64:
  "vtable for hermes::vm::NopCrashManager", referenced from:
      hermes::vm::RuntimeConfig::RuntimeConfig() in libExpoModulesCore.a[7](EXJavaScriptRuntime.o)
   NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

  "typeinfo for facebook::jsi::HostObject", referenced from:
      typeinfo for expo::ExpoModulesHostObject in libExpoModulesCore.a[26](ExpoModulesHostObject.o)
      typeinfo for expo::LazyObject in libExpoModulesCore.a[42](LazyObject.o)
      typeinfo for facebook::react::TurboModule in libRNReanimated.a[49](ReanimatedModuleProxy.o)
      typeinfo for RNScreens::RNScreensTurboModule in libRNScreens.a[24](RNScreensTurboModule.o)
      typeinfo for worklets::JSIWorkletsModuleProxy in libRNWorklets.a[12](JSIWorkletsModuleProxy.o)

  "typeinfo for facebook::jsi::NativeState", referenced from:
      typeinfo for expo::EventEmitter::NativeState in libExpoModulesCore.a[3](EventEmitter.o)

  "typeinfo for facebook::jsi::JSIException", referenced from:
      GCC_except_table32 in libExpoModulesCore.a[7](EXJavaScriptRuntime.o)

  "typeinfo for facebook::jsi::JSINativeException", referenced from:
      ... in libRNReanimated.a, libRNWorklets.a

ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1

What I've identified:

The references to [abi:ne180100] in the symbol names suggest libExpoModulesCore.a and libRNReanimated.a were compiled against headers expecting one C++ ABI tag, while the prebuilt React Native frameworks pulled in by EAS (React-Core-prebuilt, ReactNativeDependencies) export a different ABI version. Specifically, NopCrashManager, HostObject, NativeState, JSIException, JSINativeException, and Buffer all live in the prebuilt Hermes/JSI binaries but aren't being exported in a form the locally compiled .a files can link against.

What I've tried:

  1. Toggling New Architecture (newArchEnabled) on and off — same error either way.

  2. Switching EAS build image between xcode-16.2 and xcode-26.0.

  3. Setting buildReactNativeFromSource: true in expo-build-properties plugin to force RN compilation from source instead of prebuilts — fails with the same linker error.

  4. Removing and reinstalling react-native-reanimated — error persists regardless.

  5. Removing the entire committed ios/ folder so EAS runs a clean expo prebuild on every build — same error.

  6. Various OTHER_CPLUSPLUSFLAGS injections including -DFOLLY_CFG_NO_COROUTINES=1 via Podfile post_install hook (correctly handling both String and Array build setting types).

My main question:

Is there a known way to force the prebuilt React-Core-prebuilt and ReactNativeDependencies xcframeworks to align ABI with locally compiled native modules in Expo SDK 54 / RN 0.81.5? Or is this a confirmed incompatibility that requires staying on Expo SDK 53 / RN 0.79 until Expo ships matching prebuilts?

Any insight from anyone who has shipped an Expo SDK 54 production iOS build recently — particularly with react-native-reanimated 4.x and the new architecture — would be hugely appreciated.

ios react-native expo hermes expo-eas