What breaks
Every push to main where example/ios/Podfile.lock is unchanged fails the three iOS contract jobs (ios27.native, ios27.fallback, ios26.auto-fallback) in the Exact package candidate workflow within ~1 minute of the build starting:
error: Build input file cannot be found:
'.../example/ios/build/generated/ios/ReactCodegen/rnworklets/rnworklets-generated.mm'.
(in target 'ReactCodegen' from project 'Pods')
Same for rnreanimated-generated.mm, rngesturehandler_codegen-generated.mm, and ReorderableViewSpec/States.cpp. Observed on the push run for f3b11c7 (run 34016165910) and reproduced identically on the nightly scheduled run (34020531106), so it is deterministic, not a flake.
Root cause
#97 (commit 580b7f2) added a Pods cache to the contract job and made the "Verify Apple runtime and prepare native app" step skip pod install when the cache hits exactly:
if [[ "$COCOAPODS_CACHE_HIT" != 'true' ]]; then
( cd example && bundle install && bundle exec pod install --project-directory=ios )
fi
React Native codegen runs inside pod install and writes its generated sources to example/ios/build/generated/ios/, which is outside the cached example/ios/Pods path. A restored cache therefore produces a Pods project whose ReactCodegen target references source files that were never generated, and the Detox iOS build fails. The first run after #97 passed only because the cache was empty; every subsequent run with a stable Podfile.lock hits the key and fails.
ci.yml already documents this class of hazard on its own Pods cache and deliberately runs the Gemfile-pinned pod install even on a cache hit.
Fix
Run bundle install + bundle exec pod install unconditionally in the contract job, keeping the cache purely as a speedup for the Pods checkout — mirroring the ci.yml convention.
What breaks
Every push to
mainwhereexample/ios/Podfile.lockis unchanged fails the three iOS contract jobs (ios27.native,ios27.fallback,ios26.auto-fallback) in the Exact package candidate workflow within ~1 minute of the build starting:Same for
rnreanimated-generated.mm,rngesturehandler_codegen-generated.mm, andReorderableViewSpec/States.cpp. Observed on the push run for f3b11c7 (run 34016165910) and reproduced identically on the nightly scheduled run (34020531106), so it is deterministic, not a flake.Root cause
#97 (commit 580b7f2) added a
Podscache to thecontractjob and made the "Verify Apple runtime and prepare native app" step skippod installwhen the cache hits exactly:React Native codegen runs inside
pod installand writes its generated sources toexample/ios/build/generated/ios/, which is outside the cachedexample/ios/Podspath. A restored cache therefore produces a Pods project whoseReactCodegentarget references source files that were never generated, and the Detox iOS build fails. The first run after #97 passed only because the cache was empty; every subsequent run with a stablePodfile.lockhits the key and fails.ci.ymlalready documents this class of hazard on its own Pods cache and deliberately runs the Gemfile-pinnedpod installeven on a cache hit.Fix
Run
bundle install+bundle exec pod installunconditionally in the contract job, keeping the cache purely as a speedup for the Pods checkout — mirroring theci.ymlconvention.