Should I be using Expo Go or Expo Dev Client for my Production App?

Yes, although it can also start a dev client if you have that installed on the simulator.

This runs npx expo prebuild -p ios in the background, which generates the native iOS project and builts it with Xcode on your machine. If you want to stick with the managed workflow you should clean up the changes made by the prebuild afterwards and not commit the ios or android directories.

See:

You can definitely build like this, but if you don’t have Xcode or you don’t want to have to clean up after a prebuild you can use EAS Build to build a dev client and use that like Expo Go.

Expo Go includes all native dependencies that are included in the Expo SDK. Reanimated and react-native-gesture-handler are included in the Expo SDK, so these will work in Expo Go.

The native code for things like react-native-fs, however, are not included in the Expo SDK. Expo has a similar FileSystem module, but if Stream Chat specifically needs react-native-fs then that won’t help you.

Normally if the native code is missing you’d get an error like:
null is not an object (evaluating ...

Based on the peer dependencies listed in the Stream Chat installation instructions you will need to use npx expo run or build a dev client to use instead of Expo Go, because some of those dependencies do have native code that is not part of the Expo SDK.

On Android this is basically just: eas build -p android --profile development and then side load the resulting APK. On iOS you need to tell it to build for the simulator in the build profile in eas.json.