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

Hi all, I’m building a production grade app using Expo that is intended for the app store with real users. I’ve used expo in the past but its been a while and it seems the landscape has changed.

I’m currently developing my app locally running "ios": "expo start --ios",
which I believe starts the app up with Expo Go with the iOS simulator.

I’ve seen this other command "expo run:ios" which I believe uses a development client correct?

The reason I ask this is I’m trying to build an app that uses the Stream Chat SDK Getting Started | Stream Chat - React Native SDK Docs

I know this SDK uses things like reanimated and react-native-gesture-handler which I think have native dependencies. My understanding is I wouldn’t be able to access these packages in Expo Go and thus this library wouldn’t work.

Currently I’m having issues integrating that SDK where its rendering the components in dev tools but the screen is completely blank and showing no errors in the console. My next guess was there was a native code issue that was getting swallowed by Expo Go.

Thoughts?

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.