appandflow / appandflow/stim

Track Expo precompiled modules with React Native source fallback

Open
#575 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
41
Forks
1
Avg merge
1h 25m
Merged PRs (30d)
397

Description

## Problem

The default Expo iOS release-QA fixture builds and installs, then aborts because its precompiled ExpoModulesWorklets framework requires React.framework, while React Native was installed from source. Stim correctly reports a fatal native launch; the app cannot complete the loop with these installed Pods.

```text
Native crash: EXC_CRASH / SIGABRT / DYLD / Library missing
Library not loaded: @rpath/React.framework/React
Referenced from: app.app/Frameworks/ExpoModulesWorklets.framework/ExpoModulesWorklets
```

## Evidence

- Stim candidate based on 49ae2fce16fbc49b69c710063ded7b685f3c7fea; Expo57.0.21, React Native0.86.3, ExpoModulesCore57.0.17; Xcode26.6 / iOS simulator26.5.
- Native loop built successfully, then the app aborted. The retained artifact has ExpoModulesWorklets.framework but no React.framework or ReactNativeDependencies.framework; `otool -L` confirms both are linked requirements of ExpoModulesWorklets.
- Repeating the Expo iOS lifecycle with `EXPO_USE_PRECOMPILED_MODULES=0` passed cold launch, second-worktree artifact reuse and cleanup. Expo iOS cache suite passed with that setting too.
- Running the installed upstream Ruby decision code with only the React Native artifact-availability probe stubbed to return false yields `reactNativeBuildsFromSource: true` and `expoPrecompiledModulesEnabled: true` when both prebuilt environment flags are1. No Stim code participates in that decision probe.
- Private release evidence: `release-qa-1.0.0.3deGkF/loop-expo-ios.log`, `source-modules-loop-expo-ios.log`, `source-modules-caches-expo-ios.json`; original disposable source fixture retained under `tmp/stim-native-expo-ios-iAIaTB/app`.

## Cause

The installed React Native `scripts/cocoapods/rncore.rb` lines79–87 falls back to source when its artifact probe fails, but leaves `RCT_USE_PREBUILT_RNCORE=1`. Expo's `scripts/ios/precompiled_modules.rb` lines984–985 decides whether prebuilt React is active solely from that environment value. This decision gap is reproduced. A transient artifact probe failure is consistent with the original fixture's dependency graph, but the original probe response was not captured, so its precise cause is still unconfirmed. The artifact URL returns HTTP200 now.

## Fix idea

Prefer an upstream Expo check of React Native's resolved source/prebuilt decision rather than only the requested flag. For release QA, record the source-module setting explicitly; also retest the default path once artifacts are available. Do not silently change every user's build configuration or mark the original failure as passed. Determine whether a doctor diagnostic is useful only after the upstream behavior and default-path rerun are settled.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.