Error Message “ERROR react-native-maps: AirGoogleMaps dir must be added to your xCode project to support GoogleMaps on iOS”
I’ve been using a MapView in my application as shown:
<SView flex={1}>
<MapView
provider={PROVIDER_GOOGLE}
style={{ width: "100%", height: "100%" }}
initialRegion={{
latitude: {latitude},
longitude: {longitude},
latitudeDelta: 0.01,
longitudeDelta: 0.01,
}}
>
{renderMarkers()}
</MapView>
</SView>
For some reason after installing expo-dev-client, and creating a development-simulator build, I’m getting the error “AirGoogleMaps dir must be added to your Xcode project to support GoogleMaps on iOS.” The map displayed fine before I was using the expo-dev-client, but not the map won’t even display. I’ve never had to play around in Xcode when working with the expo-dev-client managed workflow, and wanted to know if anyone has figured out a fix to this?
Details
- Expo SDK Version: 49.0.5
- iOS
- MapView
react-native-maps: AirGoogleMaps dir must be added to your xCode project to support GoogleMaps on iOS.
at MapView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:233661:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:183364:50)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:183364:50)
at ScreenWrapper
at SearchScreen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:233305:46)
at Route (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141484:24)
at Route(search) (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141790:24)
at StaticContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136776:17)
at EnsureSingleNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:133572:24)
at SceneView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136681:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at DebugContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141120:36)
at MaybeNestedStack (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138366:23)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at RNSScreen
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:98867:62)
at Suspender (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140765:22)
at Suspense
at Freeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140784:23)
at DelayedFreeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140374:22)
at InnerScreen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140422:36)
at Screen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140697:36)
at SceneView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138410:22)
at Suspender (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140765:22)
at Suspense
at Freeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140784:23)
at DelayedFreeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140374:22)
at RNSScreenStack
at ScreenStack (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140394:25)
at NativeStackViewInner (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138591:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at SafeAreaProviderCompat (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140149:25)
at NativeStackView
at PreventRemoveProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:135653:25)
at NavigationContent (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136464:22)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136479:27)
at NativeStackNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:131541:18)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141420:38)
at DynamicLayout
at Route (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141484:24)
at Route((search)) (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141790:24)
at StaticContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136776:17)
at EnsureSingleNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:133572:24)
at SceneView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136681:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at Background (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138858:21)
at Screen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140196:71)
at RNSScreen
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:98867:62)
at Suspender (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140765:22)
at Suspense
at Freeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140784:23)
at DelayedFreeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140374:22)
at InnerScreen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140422:36)
at Screen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140697:36)
at MaybeScreen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:145458:24)
at RNSScreenNavigationContainer
at ScreenContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140551:31)
at MaybeScreenContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:145446:23)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at SafeAreaProviderCompat (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140149:25)
at BottomTabView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:142693:30)
at PreventRemoveProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:135653:25)
at NavigationContent (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136464:22)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136479:27)
at BottomTabNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:142603:18)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141420:38)
at TabLayout (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:235748:55)
at Route (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141484:24)
at Route((tabs)) (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141790:24)
at StaticContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136776:17)
at EnsureSingleNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:133572:24)
at SceneView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136681:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at DebugContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141120:36)
at MaybeNestedStack (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138366:23)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at RNSScreen
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:98867:62)
at Suspender (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140765:22)
at Suspense
at Freeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140784:23)
at DelayedFreeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140374:22)
at InnerScreen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140422:36)
at Screen (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140697:36)
at SceneView (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138410:22)
at Suspender (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140765:22)
at Suspense
at Freeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140784:23)
at DelayedFreeze (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140374:22)
at RNSScreenStack
at ScreenStack (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140394:25)
at NativeStackViewInner (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:138591:22)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at SafeAreaProviderCompat (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:140149:25)
at NativeStackView
at PreventRemoveProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:135653:25)
at NavigationContent (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136464:22)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:136479:27)
at NativeStackNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:131541:18)
at anonymous (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141420:38)
at QueryClientProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:232574:23)
at ThemeProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:184582:38)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at Portal.Host (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:194311:36)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at SafeAreaProviderCompat (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:194596:25)
at PaperProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:186971:37)
at ThemeProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:183479:19)
at RootLayoutNav (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:248444:55)
at Provider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:212587:50)
at RootLayout (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:248415:44)
at Try (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:145547:36)
at Route (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141484:24)
at Route() (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:141790:24)
at RNCSafeAreaProvider
at SafeAreaProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:139254:24)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at GestureHandlerRootView
at GestureHandlerRootView
at wrapper (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:152325:27)
at EnsureSingleNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:133572:24)
at BaseNavigationContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:132165:28)
at ThemeProvider (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:137777:21)
at NavigationContainerInner (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:152648:26)
at ContextNavigator (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:152345:24)
at ExpoRoot (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:152316:30)
at App
at withDevTools(App) (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:130808:27)
at ErrorToastContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:130709:24)
at ErrorOverlay
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at RCTView
at View (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40428:43)
at AppContainer (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:40285:36)
at main(RootComponent) (http://192.168.0.68:8081/node_modules/expo-router/entry.bundle//&platform=ios&dev=true&hot=false&lazy=true:121126:28)
package.json
{
"name": "bbb-mobile",
"version": "1.0.0",
"main": "expo-router/entry",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
"dependencies": {
"@react-native-async-storage/async-storage": "1.18.2",
"@react-navigation/native": "^6.1.7",
"@react-navigation/native-stack": "^6.9.13",
"@shopify/restyle": "^2.4.2",
"@supabase/supabase-js": "^2.31.0",
"@tanstack/react-query": "^4.32.6",
"expo": "~49.0.5",
"expo-constants": "~14.4.2",
"expo-font": "^11.4.0",
"expo-linking": "~5.0.2",
"expo-router": "2.0.0",
"expo-secure-store": "~12.3.1",
"expo-status-bar": "~1.6.0",
"expo-updates": "~0.18.11",
"expo-web-browser": "~12.3.2",
"react": "18.2.0",
"react-hook-form": "^7.45.4",
"react-native": "0.72.3",
"react-native-elements": "^3.4.3",
"react-native-gesture-handler": "~2.12.0",
"react-native-paper": "^5.10.1",
"react-native-reanimated": "~3.3.0",
"react-native-safe-area-context": "4.6.3",
"react-native-screens": "~3.22.0",
"react-native-url-polyfill": "^2.0.0",
"react-native-vector-icons": "^10.0.0",
"react-native-maps": "1.7.1",
"expo-dev-client": "~2.4.6",
"expo-location": "~16.1.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@types/react": "~18.2.14",
"typescript": "^5.1.3"
},
"private": true
}
eas.json
{
"cli": {
"version": ">= 4.1.2"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"channel": "development",
"ios": {
"resourceClass": "m-medium"
}
},
"preview": {
"distribution": "internal",
"channel": "preview"
},
"development-simulator": {
"developmentClient": true,
"distribution": "internal",
"channel": "development-simulator",
"ios": {
"simulator": true,
"resourceClass": "m-medium"
}
},
"production": {
"channel": "production"
}
},
"submit": {
"production": {}
}
}