Uh oh!
There was an error while loading. Please reload this page.
Enhance iOS TestFlight configuration and update README - #89
Conversation
…ath and simplifying versioning strategy
…g and shell settings
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis pull request refactors the shared iOS TestFlight reusable workflow by removing five obsolete inputs ( ChangesiOS TestFlight Workflow Refactoring
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Uh oh!
There was an error while loading. Please reload this page.
react-native advertises a loose peer range while its bundled renderer
hard-codes an exact React version and throws at runtime:
if ("19.2.3" !== isomorphicReactPackageVersion) throw Error(...)
react-native@0.85.1 declares peerDependencies { react: "^19.2.3" }, so
bumping react to 19.2.8 is a legal semver-PATCH update. It installs, type-
checks, lints, passes jest and bundles with metro -- then throws on the
first real screen. mealivery-customer-mobile PR #89 auto-merged exactly
this combination into develop on 2026-07-22.
On the New Architecture it is a DEFERRED crash, not a launch crash:
renderElement() correctly uses Fabric, but RendererImplementation.js binds
six APIs to the Paper renderer unconditionally regardless of newArchEnabled
(findNodeHandle, unstable_batchedUpdates, sendAccessibilityEvent,
findHostInstance_DEPRECATED, unmountComponentAtNodeAndRemoveContainer,
isChildPublicInstance). ScrollView, FlatList, TextInput and any
useNativeDriver animation reach that set.
Verified by experiment which gates miss it: react-test-renderer render
passes under a simulated mismatch, and `npx react-native bundle` completes
successfully even with an unconditional throw injected into the renderer
module body (Metro builds a static graph and never evaluates it). tsc and
eslint are unaffected. Only a version-contract assertion or a real
native/E2E run catches this class.
Adds:
- .github/actions/check-react-native-contract (composite)
- .github/workflows/react-native-contract-gate.yml (reusable)
- workflow-templates/react-native-contract-check.yml (caller)
- react-core group in dependabot-templates/react-native-mobile.yml
Design notes:
- Plain `pull_request`, not pull_request_target: needs the PR's own
package.json/lockfile, needs no secrets, never installs or executes PR
code. A `yarn install` step must never be added here.
- Reads the lockfile first (it decides what installs), package.json only
as fallback; resolves ranges via npm view.
- Fails closed when the contract can't be determined. RN >= 0.86 removes
the Paper renderer, so it falls back to Fabric's reconcilerVersion
before giving up -- a gate that silently passes manufactures confidence.
- Also fails on duplicate react in the tree.
Verified against real repos and the real breaking commit:
083147e (PR #89) -> exit 1, DRIFT 19.2.8 vs 19.2.3
mealivery develop (current) -> exit 0, OK
RN 0.86.2 (no Paper renderer) -> exit 1, DRIFT via fabric-reconciler
duplicate react in yarn.lock -> exit 1, DUPLICATE_REACT
non-RN repo / caret RN range -> exit 0
fail-on-unknown=false -> downgrades to warning, exit 0
Grouping and exact-pinning are NOT the fix: Dependabot opens react-only PRs
when no matching react-native release exists, and it rewrites exact pins
(it did so twice in this repo). The gate is the fix, and it only blocks
once `rn-contract / check` is marked required on the Dependabot target
branch -- auto-merge waits on required checks only.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This pull request updates the documentation for the iOS build and TestFlight upload workflow. The main changes clarify the release process and update the inputs table to remove a deprecated or unused option.
Documentation updates:
use-simplify9-xcode-setupinput from the inputs table in theREADME.md, as it is no longer relevant.release_with_environmentjob, which is protected by an approval gate set via therelease-environmentinput, instead of describing two separate release paths.Summary by CodeRabbit
install-react-native-cli,use-simplify9-xcode-setup,verify-cocoapods,signing-style,build-number-offset).