Answering my own question for the next person: the crash was a missing NSCameraUsageDescription in app.json. iOS kills the app the moment a permission is requested without a description, and the simulator does not.
How to see it: Xcode → Window → Devices → your phone → "Open Console", filter on your app name. The crash reason is in there in plain English.