EAS Build creates development build, but the development build does not work using custom dev client

Bare workflow
eas-cli/0.54.1 darwin-x64 node-v14.17.0

Hi everyone, I moved my Expo project from managed workflow to bare workflow to use the native module for Google AdMob (GitHub - invertase/react-native-google-mobile-ads: React Native Google Mobile Ads enables you to monetize your app with AdMob.).

With such a change, I wanted to use eas build and custom dev clients (instead of expo build). I am able to create a development build using eas build --profile development, provision my device, and download the build on my iPhone, but when I open the app, it gives me a blank white screen.

This also happens when I run expo start --dev-client. After digging, I thought this would create the custom dev client and then the downloaded development build should work on my phone, but alas, it still gives me a blank white screen.

I ran expo run:ios --configuration Release to test if the build works in an iOS simulator, and it does, so I feel unsure why it doesn’t work using the custom dev client and the development builld.

For more context, this is my package.json:

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  "dependencies": {
    "@apollo/client": "^3.3.8",
    "@gorhom/bottom-sheet": "^2",
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/datetimepicker": "4.0.0",
    "@react-native-community/hooks": "^2.6.0",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-native-picker/picker": "2.2.1",
    "@react-navigation/bottom-tabs": "^6.2.0",
    "@react-navigation/native": "^6.0.8",
    "@react-navigation/stack": "^5.14.2",
    "@sentry/react-native": "^3.3.5",
    "apollo-link-ws": "^1.0.20",
    "axios": "^0.21.1",
    "crypto-js": "^4.0.0",
    "expo": "^44.0.0",
    "expo-analytics-segment": "~11.1.2",
    "expo-application": "~4.0.1",
    "expo-blur": "~11.0.0",
    "expo-clipboard": "~2.1.0",
    "expo-constants": "~13.0.1",
    "expo-contacts": "~10.1.0",
    "expo-dev-client": "~0.8.6",
    "expo-device": "~4.1.0",
    "expo-firebase-recaptcha": "~2.1.0",
    "expo-image-picker": "~12.0.1",
    "expo-linear-gradient": "~11.0.3",
    "expo-linking": "~3.0.0",
    "expo-location": "~14.0.1",
    "expo-media-library": "~14.0.0",
    "expo-navigation-bar": "~1.1.1",
    "expo-notifications": "~0.14.0",
    "expo-sharing": "~10.1.0",
    "expo-status-bar": "~1.2.0",
    "expo-store-review": "~5.1.0",
    "expo-system-ui": "~1.1.0",
    "expo-updates": "~0.11.7",
    "firebase": "8.2.3",
    "graphql": "^15.5.0",
    "react": "17.0.1",
    "react-dom": "17.0.1",
    "react-native": "0.64.3",
    "react-native-doorman": "^1.4.0",
    "react-native-elements": "^3.1.0",
    "react-native-gesture-handler": "~2.1.0",
    "react-native-google-mobile-ads": "^7.0.1",
    "react-native-google-places-autocomplete": "^2.2.0",
    "react-native-maps": "0.29.4",
    "react-native-paper": "^4.11.2",
    "react-native-purchases": "^4.5.3",
    "react-native-reanimated": "~2.3.1",
    "react-native-redash": "^16.2.3",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.10.1",
    "react-native-view-shot": "3.1.2",
    "react-native-web": "0.17.1",
    "react-native-webview": "11.15.0",
    "react-navigation": "^4.4.4",
    "react-navigation-stack": "^2.10.4",
    "sentry-expo": "^4.0.0",
    "subscriptions-transport-ws": "^0.9.18"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@types/react": "~17.0.21",
    "@types/react-dom": "~17.0.9",
    "@types/react-native": "~0.64.12",
    "eslint-config-nando": "^1.1.0",
    "typescript": "~4.3.5"
  },
  "private": true
}

Please let me know if you have any ideas!

I moved my Expo project from managed workflow to bare workflow to use the native module for Google AdMob

I do not see anything in setup instructions for that module that would require switching to bare workflow, it should work in managed out of the box(but it won’t work in Expo Go)

In bare projects eas just builds your project in Debug mode when you run build using development profile. If you ejected before installing dev client package then your native project was not configured for it. Here you can find instructions on how to add it in a bare or pure react native project Installation in React Native and Bare workflow projects - Expo Documentation or you can get back to managed, install dev client and eject again

Hey @wkozyra , thanks for the response! Why won’t the module work in Expo Go if it works in managed?

because expo go was not built with that package, so native code is not included there, but it will work in a managed project when building on eas because no configuration is necessary other than yarn add and pod install.

Got it. So “bare workflow” basically means making manual changes to the ios and android folders, correct?

I can stay in the managed workflow by doing “expo prebuild” or “expo run:ios” and then installing the native module using “yarn add” and “pod install”. Once they’re installed, I can develop using custom dev client and build using eas build. Is that accurate?

no, if you have android and ios directories it’s a bare project, if you want to use manged workflow you need to either delete them or add to gitignore

Ok I thought the ios directory was required for pod install. But you’re saying that we can still use pod install in a managed workflow?

t will work in a managed project when building on eas because no configuration is necessary other than yarn add and pod install.

It will work on managed because pod install is the only requirement, I’m no saying you should run pod install