AI can hand you a working prototype in a weekend. Screens render, buttons respond, data appears. It feels like the app is ninety percent done and the last step is pressing an eject button that drops you into clean, owned production code.
That button does not exist. There is no single export that converts generated output into an app you can run, update, and answer for. What exists instead is a slower handoff: six systems you need to read, name, and take responsibility for before the app is really yours. Teams that plan for that handoff ship. Teams that wait for the button rewrite.
The confusion is understandable because the old vocabulary still floats around. Expo used to talk about managed versus bare workflows and ejecting from one to the other. That framing is now deprecated in favor of continuous native generation, where native projects are generated from configuration on demand. The direction of the whole ecosystem is away from one-time exports and toward repeatable generation from a config you own. If you take one idea from this post, take that one: ownership is the config, not the output.
Why the demo feels done before the app is shippable
A demo proves one path through happy-path data on one device with one set of credentials. Production is every other path: expired sessions, revoked tokens, slow networks, denied permissions, OS updates, store review, and the user who does everything in the wrong order. Generated code usually covers the demo path well and leaves the rest as TODO comments or silent assumptions.






