The situation
You are a mobile engineer on a two‑week sprint.
Your team has added a new “Invite” screen that must be reachable from an email link ( myapp://invite/abc123 ). You follow the Expo Router tutorial, add a file app/invite/[code].tsx , run the app in the Expo Go client, tap the link on a device and the screen appears instantly.
During the nightly build, the QA team reports that the same link opened the app on Android but stayed on a blank white screen on iOS, and on Android it sometimes opened the home screen instead of the invite screen. The failure only appears in the production build generated by EAS.
Cost: the release is blocked for another day, the QA cycle is delayed, and the product manager has to explain the missing feature to stakeholders.
The rest of this guide shows why the tutorial‑level configuration breaks under production conditions, and how to make deep links reliable with Expo Router.
Why it happens
Expo Router relies on two mechanisms:
Native intent/association handling –…