Open
Description
What happened?
I was going through the setup instructions outlined here for my expo app and once I got to rebuilding my app using eas, I was met with the following error
[INSTALL_PODS] [Codegen] Processing RNGoogleMobileAdsSpec
[INSTALL_PODS] [Codegen] Searching for podspec in the project dependencies.
[INSTALL_PODS] [Codegen] Supported Apple platforms: ios for RNGoogleMobileAdsSpec
[INSTALL_PODS] [Codegen] Done.
[INSTALL_PODS] UnsupportedModulePropertyParserError: Module NativeGoogleMobileAdsNativeModule: TypeScript interfaces extending TurboModule must only contain 'FunctionTypeAnnotation's. Property 'onAdEvent' refers to a 'TSTypeReference'.
[INSTALL_PODS] at throwIfModuleTypeIsUnsupported (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/error-utils.js:163:11)
[INSTALL_PODS] at buildPropertySchema (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:472:3)
[INSTALL_PODS] at /private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:705:24
[INSTALL_PODS] at guard (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/utils.js:26:14)
[INSTALL_PODS] at /private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:702:14
[INSTALL_PODS] at Array.map (<anonymous>)
[INSTALL_PODS] at buildModuleSchema (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:699:6)
[INSTALL_PODS] at /private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:522:9
[INSTALL_PODS] at guard (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/utils.js:26:14)
[INSTALL_PODS] at buildSchemaFromConfigType (/private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/node_modules/@react-native/codegen/lib/parsers/parsers-commons.js:521:22) {
[INSTALL_PODS] nodes: [ undefined ]
[INSTALL_PODS] }
[INSTALL_PODS] .
[INSTALL_PODS] # from /private/var/folders/z2/kwhjzy4s6nv00tkb0w1vrq3w0000gn/T/eas-build-local-nodejs/2064bb07-3579-428a-92b4-ba539487f1bf/build/app/ios/Podfile:44
[INSTALL_PODS] # -------------------------------------------
[INSTALL_PODS] #
[INSTALL_PODS] > use_react_native!(
[INSTALL_PODS] # :path => config[:reactNativePath],
[INSTALL_PODS] # -------------------------------------------
[INSTALL_PODS] [!] [Codegen] warn: using experimental new codegen integration
[INSTALL_PODS]
Error: pod install exited with non-zero code: 1
at ChildProcess.completionListener (/Users/chrisbanas/.npm/_npx/203b5a3d3de594cf/node_modules/@expo/spawn-async/build/spawnAsync.js:42:23)
at Object.onceWrapper (node:events:633:26)
at ChildProcess.emit (node:events:518:28)
at maybeClose (node:internal/child_process:1105:16)
at Socket.<anonymous> (node:internal/child_process:457:11)
at Socket.emit (node:events:518:28)
at Pipe.<anonymous> (node:net:337:12)
The steps I did to get to here were
npx expo install react-native-google-mobile-ads
- Added necessary config plugins (shown below)
- Run
eas build --profile development-simulator --platform ios --local
to generate a new build
Platforms
iOS, but have not tested behavior on Android
React Native Info
System:
OS: macOS 15.0.1
CPU: (8) x64 Intel(R) Core(TM) i7-8569U CPU @ 2.80GHz
Memory: 707.65 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.11.0
path: ~/.nvm/versions/node/v20.11.0/bin/node
Yarn:
version: 1.22.21
path: /usr/local/bin/yarn
npm:
version: 10.2.4
path: ~/.nvm/versions/node/v20.11.0/bin/npm
Watchman: Not Found
Managers:
CocoaPods:
version: 1.15.2
path: /usr/local/lib/ruby/gems/3.3.0/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 24.0
- iOS 18.0
- macOS 15.0
- tvOS 18.0
- visionOS 2.0
- watchOS 11.0
Android SDK: Not Found
IDEs:
Android Studio: Not Found
Xcode:
version: 16.0/16A242d
path: /usr/bin/xcodebuild
Languages:
Java:
version: 21.0.2
path: /usr/bin/javac
Ruby:
version: 3.3.0
path: /usr/local/opt/ruby/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: ^18.2.0
react-native:
installed: 0.74.5
wanted: 0.74.5
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": "app",
"version": "1.0.0",
"scripts": {
"start": "APP_VARIANT=development npx expo start",
"start-clear-cache": "APP_VARIANT=development npx expo -c",
"tsc": "tsc --noEmit",
"test": "jest --maxWorkers=50%",
"prepare": "cd .. && husky install",
"lint": "eslint \"**/*.{ts,tsx,js,jsx}\" --fix",
"lint-check": "eslint \"**/*.{ts,tsx,js,jsx}\"",
"prettier": "prettier \"**/*.{ts,tsx,js,jsx,json}\" --write",
"prettier-check": "prettier \"**/*.{ts,tsx,js,jsx,json}\" --check",
"ios": "expo run:ios",
"android": "expo run:android"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.json": "prettier --write"
},
"dependencies": {
"@config-plugins/react-native-branch": "^8.0.0",
"@giphy/react-native-sdk": "^3.3.1",
"@gorhom/bottom-sheet": "^4.6.4",
"@react-native-async-storage/async-storage": "1.23.1",
"@react-native-masked-view/masked-view": "^0.3.1",
"@react-navigation/bottom-tabs": "^6.6.1",
"@react-navigation/native": "^6.1.18",
"@react-navigation/native-stack": "^6.11.0",
"@react-navigation/stack": "^6.4.1",
"@reduxjs/toolkit": "^2.2.7",
"@sentry/react-native": "~5.24.3",
"@tamagui/animations-react-native": "^1.112.22",
"@tamagui/babel-plugin": "^1.112.22",
"@tamagui/config": "^1.112.22",
"@tamagui/font-inter": "^1.112.22",
"@tamagui/theme-base": "^1.112.22",
"@types/jest": "^29.5.13",
"@types/lodash": "^4.17.10",
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
"expo": "~51.0.39",
"expo-application": "~5.9.1",
"expo-av": "~14.0.7",
"expo-background-fetch": "~12.0.1",
"expo-build-properties": "~0.12.5",
"expo-constants": "~16.0.2",
"expo-contacts": "~13.0.5",
"expo-dev-client": "~4.0.29",
"expo-device": "~6.0.2",
"expo-file-system": "~17.0.1",
"expo-firebase-recaptcha": "^2.3.1",
"expo-font": "~12.0.10",
"expo-haptics": "~13.0.1",
"expo-image": "~1.13.0",
"expo-image-picker": "~15.0.7",
"expo-linear-gradient": "~13.0.2",
"expo-linking": "~6.3.1",
"expo-localization": "~15.0.3",
"expo-network": "~6.0.1",
"expo-notifications": "~0.28.19",
"expo-screen-capture": "~6.0.1",
"expo-splash-screen": "~0.27.7",
"expo-status-bar": "~1.12.1",
"expo-store-review": "~7.0.2",
"expo-system-ui": "~3.0.7",
"expo-tracking-transparency": "~4.0.2",
"expo-updates": "~0.25.27",
"expo-web-browser": "~13.0.3",
"firebase-sdk": "npm:firebase@^10.14.0",
"gifted-charts-core": "^0.1.43",
"jest": "^29.7.0",
"jest-expo": "~51.0.4",
"libphonenumber-js": "^1.11.10",
"lodash": "^4.17.21",
"lottie-react-native": "6.7.0",
"metro": "~0.80.12",
"moize": "^6.1.6",
"obscenity": "^0.4.0",
"posthog-react-native": "^3.3.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-native": "0.74.5",
"react-native-branch": "^6.4.0",
"react-native-circular-progress": "^1.4.0",
"react-native-gesture-handler": "~2.16.1",
"react-native-get-random-values": "~1.11.0",
"react-native-gifted-charts": "^1.4.43",
"react-native-google-mobile-ads": "^14.8.0",
"react-native-international-phone-number": "^0.7.6",
"react-native-notifier": "^2.0.0",
"react-native-popover-view": "^5.1.9",
"react-native-purchases": "^8.2.3",
"react-native-reanimated": "~3.10.1",
"react-native-safe-area-context": "4.10.5",
"react-native-screens": "3.31.1",
"react-native-svg": "15.2.0",
"react-native-svg-transformer": "^1.5.0",
"react-native-view-shot": "^3.8.0",
"react-native-web": "^0.19.12",
"react-native-webview": "13.8.6",
"react-redux": "^9.1.2",
"redux-persist": "^6.0.0",
"tabler-icons-react-native": "^3.1.0",
"tamagui": "^1.112.22",
"uuid": "^10.0.0"
},
"devDependencies": {
"@babel/core": "^7.25.7",
"@types/react": "~18.2.79",
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^7.13.0",
"@typescript-eslint/parser": "^7.13.0",
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^8.56.0",
"eslint-plugin-react": "^7.34.2",
"eslint-plugin-unused-imports": "^3.2.0",
"husky": "^9.1.6",
"lint-staged": "^15.2.10",
"prettier": "3.3.3",
"typescript": "~5.3.3"
},
"private": true
}
app.json
import "dotenv/config";
const IS_DEV = process.env.APP_VARIANT === "development";
const BRANCH_KEY = process.env.BRANCH_IO_KEY || "key_for_android";
const getIcon = () => {
if (IS_DEV) return "./assets/logos/appIconDev.png";
return "./assets/logos/appIcon.png";
};
const getSplashScreen = () => {
if (IS_DEV) return "./assets/logos/splashScreenDev.png";
return "./assets/logos/splashScreen.png";
};
const getBundleIdentifier = () => {
if (IS_DEV) return "-";
return "-";
};
const getName = () => {
if (IS_DEV) return "-";
return "-";
};
export default {
name: getName(),
slug: "-",
owner: "-",
version: "1.2.4",
scheme: "-",
orientation: "portrait",
icon: getIcon(),
userInterfaceStyle: "automatic",
assetBundlePatterns: ["**/*"],
ios: {
supportsTablet: false,
config: {
usesNonExemptEncryption: false,
},
associatedDomains: [
"-",
],
bundleIdentifier: getBundleIdentifier(),
infoPlist: {
NSContactsUsageDescription:
"Allow $(PRODUCT_NAME) to access your contacts to help you find and connect with your friends within the app",
NSPhotoLibraryUsageDescription:
"Allow $(PRODUCT_NAME) to access your photos to let you choose and set a profile picture",
},
splash: {
image: getSplashScreen(),
resizeMode: "contain",
backgroundColor: "#EFEFEF",
dark: {
image: getSplashScreen(),
resizeMode: "contain",
backgroundColor: "#3E3E49",
},
},
privacyManifests: {
NSPrivacyAccessedAPITypes: [
{
NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategoryDiskSpace",
NSPrivacyAccessedAPITypeReasons: ["E174.1", "85F4.1"],
},
{
NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategoryFileTimestamp",
NSPrivacyAccessedAPITypeReasons: ["C617.1", "0A2A.1", "3B52.1"],
},
{
NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategorySystemBootTime",
NSPrivacyAccessedAPITypeReasons: ["35F9.1"],
},
{
NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategoryUserDefaults",
NSPrivacyAccessedAPITypeReasons: ["CA92.1"],
},
],
},
},
plugins: [
"@giphy/react-native-sdk",
[
"expo-build-properties",
{
ios: {
useFrameworks: "static",
},
},
],
[
"expo-contacts",
{
contactsPermission:
"Allow $(PRODUCT_NAME) to access your contacts to help you find and connect with your friends within the app",
},
],
[
"expo-image-picker",
{
photosPermission:
"Allow $(PRODUCT_NAME) to access your photos to let you choose and set a profile picture",
},
],
"expo-localization",
[
"expo-font",
{
fonts: ["./assets/fonts/Montserrat-ExtraBold.ttf", "./assets/fonts/Montserrat-Black.ttf"],
},
],
[
"@sentry/react-native/expo",
{
url: "https://sentry.io/",
project: "-",
organization: "-",
},
],
[
"expo-dev-client",
{
addGeneratedScheme: !IS_DEV,
},
],
[
"@config-plugins/react-native-branch",
{
apiKey: BRANCH_KEY,
iosAppDomain: "-",
},
],
[
"react-native-google-mobile-ads",
{
iosAppId: "-",
skAdNetworkItems: [
"cstr6suwn9.skadnetwork",
"4fzdc2evr5.skadnetwork",
"2fnua5tdw4.skadnetwork",
"ydx93a7ass.skadnetwork",
"p78axxw29g.skadnetwork",
"v72qych5uu.skadnetwork",
"ludvb6z3bs.skadnetwork",
"cp8zw746q7.skadnetwork",
"3sh42y64q3.skadnetwork",
"c6k4g5qg8m.skadnetwork",
"s39g8k73mm.skadnetwork",
"3qy4746246.skadnetwork",
"hs6bdukanm.skadnetwork",
"mlmmfzh3r3.skadnetwork",
"v4nxqhlyqp.skadnetwork",
"wzmmz9fp6w.skadnetwork",
"su67r6k2v3.skadnetwork",
"yclnxrl5pm.skadnetwork",
"7ug5zh24hu.skadnetwork",
"gta9lk7p23.skadnetwork",
"vutu7akeur.skadnetwork",
"y5ghdn5j9k.skadnetwork",
"v9wttpbfk9.skadnetwork",
"n38lu8286q.skadnetwork",
"47vhws6wlr.skadnetwork",
"kbd757ywx3.skadnetwork",
"9t245vhmpl.skadnetwork",
"a2p9lx4jpn.skadnetwork",
"22mmun2rn5.skadnetwork",
"4468km3ulz.skadnetwork",
"2u9pt9hc89.skadnetwork",
"8s468mfl3y.skadnetwork",
"ppxm28t8ap.skadnetwork",
"uw77j35x4d.skadnetwork",
"pwa73g5rt2.skadnetwork",
"578prtvx9j.skadnetwork",
"4dzt52r2t5.skadnetwork",
"tl55sbb4fm.skadnetwork",
"e5fvkxwrpn.skadnetwork",
"8c4e2ghe7u.skadnetwork",
"3rd42ekr43.skadnetwork",
"3qcr597p9d.skadnetwork",
],
userTrackingUsageDescription:
"Allow $(PRODUCT_NAME) to use your data to provide a better ad experience.",
},
],
[
"expo-tracking-transparency",
{
userTrackingPermission:
"Allow $(PRODUCT_NAME) to use your data to provide a better ad experience.",
},
],
],
extra: {
eas: {
projectId: "-",
},
},
updates: {
enabled: true,
checkAutomatically: "ON_LOAD",
fallbackToCacheTimeout: 0,
url: "-",
},
runtimeVersion: {
policy: "appVersion",
},
android: {
config: {
branch: { apiKey: BRANCH_KEY },
},
},
};
ios/Podfile
No response
android/build.gradle
No response
android/app/build.gradle
No response
android/settings.gradle
No response
AndroidManifest.xml
No response