[🐛] EAS build failing because of missing ios_app_id in app.json
What happened?
I'm building using eas build -p ios, and I'm getting this error:
❌ error: ios_app_id key not found in react-native-google-mobile-ads key in app.json. App will crash without it.
Consider that this error is suddenly happening after I upgraded to Expo SDK 51.
⚠️ ld: ignoring duplicate libraries: '-lc++'
› Generating debug NoFilter » NoFilter.app.dSYM
› Executing NoFilter » Bundle React Native code and images
Bundler cache is empty, rebuilding (this may take a minute)
› Executing NoFilter » [CP] Copy Pods Resources
› Executing NoFilter » Upload Debug Symbols to Sentry
› Executing NoFilter » [CP] Embed Pods Frameworks
› Executing NoFilter » [CP-User] [RNFB] Core Configuration
A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.
› Executing NoFilter » [CP-User] [RNGoogleMobileAds] Configuration
❌ error: ios_app_id key not found in react-native-google-mobile-ads key in app.json. App will crash without it.
⚠️ Script has ambiguous dependencies causing it to run on every build.
To fix, go to: Xcode » NoFilter/NoFilter » Build Phases » 'Upload Debug Symbols to Sentry'
Either: Uncheck "Based on dependency analysis", or select output files to trigger the script
⚠️ Script has ambiguous dependencies causing it to run on every build.
To fix, go to: Xcode » NoFilter/NoFilter » Build Phases » '[CP-User] [RNFB] Core Configuration'
Either: Uncheck "Based on dependency analysis", or select output files to trigger the script
⚠️ Script has ambiguous dependencies causing it to run on every build.
To fix, go to: Xcode » NoFilter/NoFilter » Build Phases » '[CP-User] [RNGoogleMobileAds] Configuration'
Either: Uncheck "Based on dependency analysis", or select output files to trigger the script
Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'React-RuntimeApple' fr
▸ ** ARCHIVE FAILED **
▸ The following build commands failed:
▸ PhaseScriptExecution [CP-User]\ [RNGoogleMobileAds]\ Configuration /Users/expo/Library/Developer/Xcode/DerivedData/NoFilter-fjavmkobuxfkzfckwbwnupmjterw/Build/Intermediates.noindex/ArchiveIntermediates/NoFilter/IntermediateBuildFilesPath/NoFilter.build/Release-iphoneos/NoFilter.build/Script-F562EEB2DBB1EB63B1F226D6.sh (in target 'NoFilter' from project 'NoFilter')
▸ (1 failure)
** ARCHIVE FAILED **
The following build commands failed:
PhaseScriptExecution [CP-User]\ [RNGoogleMobileAds]\ Configuration /Users/expo/Library/Developer/Xcode/DerivedData/NoFilter-fjavmkobuxfkzfckwbwnupmjterw/Build/Intermediates.noindex/ArchiveIntermediates/NoFilter/IntermediateBuildFilesPath/NoFilter.build/Release-iphoneos/NoFilter.build/Script-F562EEB2DBB1EB63B1F226D6.sh (in target 'NoFilter' from project 'NoFilter')
(1 failure)
Exit status: 65
Now, the weird thing is that I have, and I always had (it was working before) the ios_app_id in my app.json. Like this:
{
"expo": {
...
},
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-3342214521741372~6205894661",
"ios_app_id": "ca-app-pub-3342214521741372~3029422209",
"user_tracking_usage_description": "This identifier will be used to deliver personalized ads to you",
"sk_ad_network_items": [
"cstr6suwn9.skadnetwork",
"4fzdc2evr5.skadnetwork",
"4pfyvq9l8r.skadnetwork",
"2fnua5tdw4.skadnetwork",
"ydx93a7ass.skadnetwork",
"5a6flpkh64.skadnetwork",
"p78axxw29g.skadnetwork",
"v72qych5uu.skadnetwork",
"ludvb6z3bs.skadnetwork",
"cp8zw746q7.skadnetwork",
"3sh42y64q3.skadnetwork",
"c6k4g5qg8m.skadnetwork",
"s39g8k73mm.skadnetwork",
"3qy4746246.skadnetwork",
"f38h382jlk.skadnetwork",
"hs6bdukanm.skadnetwork",
"v4nxqhlyqp.skadnetwork",
"wzmmz9fp6w.skadnetwork",
"yclnxrl5pm.skadnetwork",
"t38b2kh725.skadnetwork",
"7ug5zh24hu.skadnetwork",
"gta9lk7p23.skadnetwork",
"vutu7akeur.skadnetwork",
"y5ghdn5j9k.skadnetwork",
"n6fk4nfna4.skadnetwork",
"v9wttpbfk9.skadnetwork",
"n38lu8286q.skadnetwork",
"47vhws6wlr.skadnetwork",
"kbd757ywx3.skadnetwork",
"9t245vhmpl.skadnetwork",
"eh6m2bh4zr.skadnetwork",
"a2p9lx4jpn.skadnetwork",
"22mmun2rn5.skadnetwork",
"4468km3ulz.skadnetwork",
"2u9pt9hc89.skadnetwork",
"8s468mfl3y.skadnetwork",
"klf5c3l5u5.skadnetwork",
"ppxm28t8ap.skadnetwork",
"ecpz2srf59.skadnetwork",
"uw77j35x4d.skadnetwork",
"pwa73g5rt2.skadnetwork",
"mlmmfzh3r3.skadnetwork",
"578prtvx9j.skadnetwork",
"4dzt52r2t5.skadnetwork",
"e5fvkxwrpn.skadnetwork",
"8c4e2ghe7u.skadnetwork",
"zq492l623r.skadnetwork",
"3rd42ekr43.skadnetwork",
"3qcr597p9d.skadnetwork"
]
}
}
Platforms
iOS, but have not tested behavior on Android
React Native Info
Consider that this build is being made on Expo EAS servers. Not in my local env.
System:
OS: macOS 12.7.5
CPU: (4) x64 Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Memory: 118.20 MB / 8.00 GB
Shell:
version: 5.8.1
path: /bin/zsh
Binaries:
Node:
version: 20.11.1
path: ~/.nvm/versions/node/v20.11.1/bin/node
Yarn:
version: 1.22.19
path: ~/.yarn/bin/yarn
npm:
version: 10.2.4
path: ~/.nvm/versions/node/v20.11.1/bin/npm
Watchman:
version: 2024.04.15.00
path: /usr/local/bin/watchman
Managers:
CocoaPods:
version: 1.15.2
path: /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 22.2
- iOS 16.2
- macOS 13.1
- tvOS 16.1
- watchOS 9.1
Android SDK: Not Found
IDEs:
Android Studio: 2023.2 AI-232.10300.40.2321.11668458
Xcode:
version: 14.2/14C18
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.11
path: /usr/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.74.1
wanted: 0.74.1
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: Not found
newArchEnabled: Not found
iOS:
hermesEnabled: Not found
newArchEnabled: Not found
Are your using Typescript?
- [ ] My project is using Typescript
package.json
{
"name": "no-filter-app",
"version": "19.72.0",
"private": true,
"devDependencies": {
"@babel/core": "^7.20.0",
"@google-cloud/translate": "^6.1.0",
"babel-eslint": "^10.1.0",
"eslint": "^8.22.0",
"eslint-plugin-react": "^7.31.0",
"eslint-plugin-react-native": "^4.0.0",
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0"
},
"main": "./node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start --dev-client",
"generate-i18n": "node ./generate-i18n.js",
"update-changelogs": "node ./update-changelogs.js",
"postinstall": "patch-package",
"build:develop": "eas build --profile development -p ios"
},
"dependencies": {
"@amplitude/analytics-react-native": "^1.4.8",
"@expo/react-native-action-sheet": "^4.1.0",
"@react-native-async-storage/async-storage": "1.23.1",
"@react-native-community/netinfo": "11.3.1",
"@react-native-firebase/analytics": "^19.2.2",
"@react-native-firebase/app": "^19.2.2",
"@react-native-google-signin/google-signin": "^11.0.1",
"@sentry/react-native": "~5.22.0",
"country-emoji": "^1.5.6",
"duix": "^3.0.3",
"expo": "~51.0.8",
"expo-apple-authentication": "~6.4.1",
"expo-application": "~5.9.1",
"expo-background-fetch": "~12.0.1",
"expo-build-properties": "~0.12.1",
"expo-clipboard": "~6.0.3",
"expo-constants": "~16.0.1",
"expo-dev-client": "~4.0.14",
"expo-device": "~6.0.2",
"expo-file-system": "~17.0.1",
"expo-font": "~12.0.5",
"expo-image": "~1.12.9",
"expo-image-picker": "~15.0.5",
"expo-linking": "~6.3.1",
"expo-localization": "~15.0.3",
"expo-location": "~17.0.1",
"expo-media-library": "~16.0.3",
"expo-notifications": "~0.28.3",
"expo-quick-actions": "^2.0.0",
"expo-splash-screen": "~0.27.4",
"expo-store-review": "~7.0.2",
"expo-task-manager": "~11.8.1",
"expo-tracking-transparency": "~4.0.2",
"expo-updates": "~0.25.14",
"i18n-js": "^3.7.1",
"lodash": "^4.17.21",
"react": "18.2.0",
"react-native": "0.74.1",
"react-native-fbsdk-next": "^12.2.0",
"react-native-gesture-handler": "~2.16.1",
"react-native-google-mobile-ads": "^13.6.0",
"react-native-maps": "1.14.0",
"react-native-purchases": "^7.27.2",
"react-native-reanimated": "~3.10.1",
"react-native-reanimated-carousel": "4.0.0-alpha.12",
"react-native-render-html": "^6.3.4",
"react-native-safe-area-context": "4.10.1",
"react-native-svg": "15.2.0",
"react-native-uuid": "^2.0.2",
"rn-prompt": "^1.0.4",
"sanitize-html": "^2.13.0",
"sunrise-sunset-js": "^2.2.1",
"use-interval": "^1.4.0"
}
}
app.json
{
"expo": {
"name": "NoFilter",
"version": "19.72.0",
"description": "NoFilter helps photographers and travelers to find the best photo spots nearby, and all around the world",
"icon": "src/styles/imgs/nofilter-icon.png",
"orientation": "portrait",
"primaryColor": "#ffffff",
"splash": {
"backgroundColor": "#000",
"resizeMode": "cover",
"image": "src/styles/imgs/splash-screen-ph.png"
},
"notification": {
"icon": "src/styles/imgs/noti-icon.png"
},
"locales": {
"ar": "./locales/ar.json",
"bg": "./locales/bg.json",
"ca": "./locales/ca.json",
"cs": "./locales/cs.json",
"de": "./locales/de.json",
"en": "./locales/en.json",
"es": "./locales/es.json",
"fr": "./locales/fr.json",
"hi": "./locales/hi.json",
"hr": "./locales/hr.json",
"id": "./locales/id.json",
"is": "./locales/is.json",
"it": "./locales/it.json",
"ja": "./locales/ja.json",
"ms": "./locales/ms.json",
"nl": "./locales/nl.json",
"pl": "./locales/pl.json",
"pt": "./locales/pt.json",
"ru": "./locales/ru.json",
"tr": "./locales/tr.json",
"vi": "./locales/vi.json",
"zh": "./locales/zh.json"
},
"slug": "xx",
"scheme": "nofilter",
"jsEngine": "hermes",
"plugins": [
[
"@sentry/react-native/expo",
{
"organization": "xx",
"project": "xxx",
"setCommits": true
}
],
"@react-native-google-signin/google-signin",
[
"expo-media-library",
{
"photosPermission": "We use your library when you want to upload a photo to your feed, or a new profile picture",
"savePhotosPermission": "We use your library when you want to upload a photo to your feed, or a new profile picture",
"isAccessMediaLocationEnabled": true
}
],
[
"react-native-fbsdk-next",
{
"appID": "xxx",
"clientToken": "xxx",
"displayName": "NoFilter",
"advertiserIDCollectionEnabled": false,
"autoLogAppEventsEnabled": false,
"isAutoInitEnabled": false,
"iosUserTrackingPermission": false
}
],
"./plugins/",
"@react-native-firebase/app",
[
"expo-build-properties",
{
"ios": {
"useFrameworks": "static"
}
}
],
"expo-localization",
[
"expo-tracking-transparency",
{
"userTrackingPermission": "This identifier will be used to deliver personalized ads to you"
}
],
[
"expo-font",
{
"fonts": [
"src/styles/fonts/Montserrat/Montserrat-Regular.ttf",
"src/styles/fonts/Montserrat/Montserrat-Medium.ttf",
"src/styles/fonts/Montserrat/Montserrat-SemiBold.ttf"
]
}
],
[
"expo-quick-actions",
{
"androidIcons": {
"help_icon": {
"foregroundImage": "src/styles/imgs/android-adaptive-foreground.png",
"backgroundColor": "#000000"
}
},
"iosActions": [
{
"title": "Wait! Don't delete me!",
"subtitle": "Tell me what happened",
"icon": "symbol:person.crop.circle.badge.questionmark",
"id": "0",
"params": {
"href": "/about-to-remove"
}
}
]
}
]
],
"updates": {
"enabled": false,
"url": "xxxx"
},
"ios": {
"buildNumber": "19.72.0",
"supportsTablet": true,
"googleServicesFile": "./GoogleService-Info.plist",
"bundleIdentifier": "app.no-filter.nofilter",
"appStoreUrl": "https://itunes.apple.com/us/app/nofilter-photo-spots/id1445583976",
"usesAppleSignIn": true,
"config": {
"usesNonExemptEncryption": false,
"googleMapsApiKey": "xxxx"
},
"infoPlist": {
"NSUserTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you",
"NSLocationWhenInUseUsageDescription": "We use your location to see how far you are from spots, and also to show you your position in the map",
"NSPhotoLibraryUsageDescription": "We use your library when you want to upload a photo to your feed, or a new profile picture",
"NSPhotoLibraryAddUsageDescription": "We use your library when you want to upload a photo to your feed, or a new profile picture",
"CFBundleAllowMixedLocalizations": true,
"SKAdNetworkItems": [
{
"SKAdNetworkIdentifier": "xxxx"
},
{
"SKAdNetworkIdentifier": "xxx"
}
],
"LSApplicationQueriesSchemes": [
"instagram",
"twitter"
]
}
},
"android": {
"versionCode": 483,
"package": "app.no_filter.nofilter",
"playStoreUrl": "https://play.google.com/store/apps/details?id=app.no_filter.nofilter",
"icon": "src/styles/imgs/nofilter-icon-android.png",
"adaptiveIcon": {
"foregroundImage": "src/styles/imgs/android-adaptive-foreground.png",
"backgroundColor": "#000000"
},
"config": {
"googleMaps": {
"apiKey": "xxxx"
}
},
"googleServicesFile": "./google-services.json",
"permissions": [
"ACCESS_COARSE_LOCATION",
"ACCESS_FINE_LOCATION",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE",
"ACCESS_MEDIA_LOCATION",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.ACCESS_MEDIA_LOCATION",
"android.permission.INTERNET",
"com.google.android.gms.permission.AD_ID"
],
"blockedPermissions": [
"android.permission.CAMERA",
"android.permission.RECORD_AUDIO"
]
},
"platforms": [
"android",
"ios"
],
"extra": {
"eas": {
"projectId": "xxxx"
}
},
"runtimeVersion": {
"policy": "appVersion"
},
"owner": "brodanoel"
},
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-3342214521741372~6205894661",
"ios_app_id": "ca-app-pub-3342214521741372~3029422209",
"user_tracking_usage_description": "This identifier will be used to deliver personalized ads to you",
"sk_ad_network_items": [
"cstr6suwn9.skadnetwork",
"4fzdc2evr5.skadnetwork",
"4pfyvq9l8r.skadnetwork",
"2fnua5tdw4.skadnetwork",
"ydx93a7ass.skadnetwork",
"5a6flpkh64.skadnetwork",
"p78axxw29g.skadnetwork",
"v72qych5uu.skadnetwork",
"ludvb6z3bs.skadnetwork",
"cp8zw746q7.skadnetwork",
"3sh42y64q3.skadnetwork",
"c6k4g5qg8m.skadnetwork",
"s39g8k73mm.skadnetwork",
"3qy4746246.skadnetwork",
"f38h382jlk.skadnetwork",
"hs6bdukanm.skadnetwork",
"v4nxqhlyqp.skadnetwork",
"wzmmz9fp6w.skadnetwork",
"yclnxrl5pm.skadnetwork",
"t38b2kh725.skadnetwork",
"7ug5zh24hu.skadnetwork",
"gta9lk7p23.skadnetwork",
"vutu7akeur.skadnetwork",
"y5ghdn5j9k.skadnetwork",
"n6fk4nfna4.skadnetwork",
"v9wttpbfk9.skadnetwork",
"n38lu8286q.skadnetwork",
"47vhws6wlr.skadnetwork",
"kbd757ywx3.skadnetwork",
"9t245vhmpl.skadnetwork",
"eh6m2bh4zr.skadnetwork",
"a2p9lx4jpn.skadnetwork",
"22mmun2rn5.skadnetwork",
"4468km3ulz.skadnetwork",
"2u9pt9hc89.skadnetwork",
"8s468mfl3y.skadnetwork",
"klf5c3l5u5.skadnetwork",
"ppxm28t8ap.skadnetwork",
"ecpz2srf59.skadnetwork",
"uw77j35x4d.skadnetwork",
"pwa73g5rt2.skadnetwork",
"mlmmfzh3r3.skadnetwork",
"578prtvx9j.skadnetwork",
"4dzt52r2t5.skadnetwork",
"e5fvkxwrpn.skadnetwork",
"8c4e2ghe7u.skadnetwork",
"zq492l623r.skadnetwork",
"3rd42ekr43.skadnetwork",
"3qcr597p9d.skadnetwork"
]
}
}
ios/Podfile
Not visible on Expo
android/build.gradle
Not visible on Expo
android/app/build.gradle
Not visible on Expo
android/settings.gradle
Not visible on Expo
AndroidManifest.xml
Not visible on Expo
Is maybe EAS removing it?
Is this something related? https://github.com/expo/fyi/blob/main/root-expo-object.md#migrating-the-config
There were some changes in app.json since SDK 51
@BrodaNoel
I'm having the same problem, do you have a solution for this?
@toadfansboy nop... not yet... I'mw waiting for some response here. My builds are totally blocked by this 🤷♂️
@toadfansboy have you found any workaround here? I still have my releases blocked because of this. I'm considering removing the Ads until it gets fixed.
Infortunately I'm thinking of doing the same thing as @BrodaNoel... Do you know which previous version would resolve this problem? 🤞
@maximebaudoin the only option would be to roll back to Expo SDK 50.
I am right now trying some workarounds for this. If I get some luck, I'll let your know
@maximebaudoin the only option would be to roll back to Expo SDK 50.
I am right now trying some workarounds for this. If I get some luck, I'll let your know
I don't know if I'm the only one, but with Expo SDK 50, I have the same problem. In fact, I have this problem from a minimum 1 or 2 months ago.
I just tried this, and it worked on iOS. I'm right now waiting for the Android build.
https://github.com/invertase/react-native-google-mobile-ads/pull/584
Right now, I'm duplicating all the configuration (react-native-google-mobile-ads) in 2 places:
- I keep the
root > react-native-google-mobile-adskey in the root ofapp.json - I added all the same config inside
root > expo > extra > react-native-google-mobile-adsinapp.json
@BrodaNoel how about android build?
Your guide is not work in iOS(root and root > expo > extra)
@jb9229 but have you applied the patches from the PR as well?
Can I patch "ios_config.sh"? pr
You can implement "patch-package" (look for the NPM package).
You make the changes in node_modules and then run
'npx patch-package react-native-google-mobile-ads'
Then you need to as patch-package as a dependency in your package.json, and configure it to auto-run it post install.
Sorry I can't give more details. I'm away from the computer.
I tried many times, but I failed...; @BrodaNoel
- changed 'ios_config.sh' , also setting patch-package
@jb9229 are you also copying all the config inside root > expo > extra ?
The key should be something like:
root > expo > extra > react-native-google-mobile-ads > ios_app_id
yes, i did
@jb9229 you are on Expo SDK 51, right?
@BrodaNoel
definitly right
- 51.0.10
Look, it really seems like you have everything exactly like my configuration, so, double check if this isn't a cache problem
You have this dependency installed, right?
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0"
Check in the logs if after the yarn install there is a text saying something like: "The patches were applied for package xxxx"
this is yarn install
@maximebaudoin the only option would be to roll back to Expo SDK 50.
Hi, I tried to go back to [email protected] but the problem was still present despite several hours of testing and deleting and reinstalling the node_modules.
You can implement "patch-package" (look for the NPM package).
You make the changes in node_modules and then run
'npx patch-package react-native-google-mobile-ads'
Then you need to as patch-package as a dependency in your package.json, and configure it to auto-run it post install.
Sorry I can't give more details. I'm away from the computer.
When I see your messages, I tested earlier by going back to [email protected] and applying the patch as explained above. And the error is still there.
I specify that I follow all the instructions to the letter and test by executing the npx expo run:ios command.
Am I forgetting something glaring ? I don't know...
@jb9229 it's hard to tell from your screenshot but it looks like your "react-native-google-mobile-ads" key is outside of the "extra" key. It looks like you have something like:
"extra": {
},
"react-native-google-mobile-ads": {
}
instead of:
"extra": {
"react-native-google-mobile-ads": {
}
}
Can confirm that this patch, at least via manually updating ios_config.sh, works as intended.
It seems to be inside extra 🤔
Why don't you try to build on EAS servers, instead of in your local? That's what I am doing
It seems to be inside extra 🤔
Why don't you try to build on EAS servers, instead of in your local? That's what I am doing
Apologies, I only saw the react-native-google-mobile-ads object at the end of the screenshot, I overlooked the one inside extra. I'm not using EAS, but local build on physical device is working for me for iOS. Thank you for your patch 👌
Are you guys having both app.json and app.config.js files?
If so, this might be the problem. PR #517 broke this case and PR #521 is supposed to fix it, but seems to come with more issued. In my projects I'm using the following patch (and apply it with patch-package). It basically reverts the behaviour of PR #517 by only looking at the app.js file.
diff --git a/node_modules/react-native-google-mobile-ads/ios_config.sh b/node_modules/react-native-google-mobile-ads/ios_config.sh
index b57451a..1df22c1 100755
--- a/node_modules/react-native-google-mobile-ads/ios_config.sh
+++ b/node_modules/react-native-google-mobile-ads/ios_config.sh
@@ -93,7 +93,7 @@ while true; do
echo "info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME}/${_JS_APP_CONFIG_FILE_NAME} file."
- _SEARCH_RESULT=$(find "$_CURRENT_SEARCH_DIR" -maxdepth 2 \( -name ${_JSON_FILE_NAME} -o -name ${_JS_APP_CONFIG_FILE_NAME} \) -print | /usr/bin/head -n 1)
+ _SEARCH_RESULT=$(find "$_CURRENT_SEARCH_DIR" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)
if [[ "$(basename ${_SEARCH_RESULT})" = "${_JS_APP_CONFIG_FILE_NAME}" ]]; then
_IS_CONFIG_JS=true
I have an iOS and Android app, with root > expo > react-native-google-mobile-ads, I'm able to build successfully for iOS with EAS and locally. The same app.json fails for Android:
ERROR: react-native-google-mobile-ads requires an 'android_app_id' property inside a 'react-native-google-mobile-ads' key in your app.json.
No android_app_id property was found in this location. The native Google Mobile Ads SDK will crash on startup without it.
I've tried to include react-native-google-mobile-ads in extra or keep both inside and outside but isn't working for Android.
Last chance is patch-package as suggested but I didn't had time to test it.
:tada: This issue has been resolved in version 14.0.0 :tada:
The release is available on:
Your semantic-release bot :package::rocket:
Does anyone have a fix for this, even after upgrading to the latest versions, I still can't build it "ios_app_id key not found in react-native-google-mobile-ads key in app.json. App will crash without it."
I have tried patch-package, I have verified the node_modules/react-native-google-mobile-ads/ios_config_sh code to make sure it's exactly like the fix shared by @mikehardy but still can't get the app to build. I have also added the "react-native-google-mobile-ads" key under extra with no success.
Thanks.