Skip to content

[🐛] Eas build failure with UnsupportedModulePropertyParserError (workaround: use react-native 0.76+ / expo 52+) #678

@ChristopherBanas

Description

@ChristopherBanas

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

  1. npx expo install react-native-google-mobile-ads
  2. Added necessary config plugins (shown below)
  3. 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

Activity

mikehardy

mikehardy commented on Jan 1, 2025

@mikehardy
Collaborator

installed: 0.74.5

and Expo 51

Could you update to current versions and re-test? Logging issues against old versions frequently has us chasing ghosts as issues are already fixed and you just need to update

May not be the case, but may be the case and we don't have any time to chase fixed isses

Thanks

RobertoJoseph

RobertoJoseph commented on Jan 1, 2025

@RobertoJoseph

I'm experiencing the same issue. Could you clarify what update you mean? This is the latest version of the package @mikehardy

RobertoJoseph

RobertoJoseph commented on Jan 1, 2025

@RobertoJoseph

DId you fix the issue sir? @ChristopherBanas

mikehardy

mikehardy commented on Jan 1, 2025

@mikehardy
Collaborator

Current react-native, current expo

RobertoJoseph

RobertoJoseph commented on Jan 1, 2025

@RobertoJoseph

I did update them and I have these versions currently and still having the same issue when building

this is my react native and expo version
"react-native": "0.74.5"
"expo": "~51.0.39",

@mikehardy

mikehardy

mikehardy commented on Jan 1, 2025

@mikehardy
Collaborator

expo 52, react-native 76.x are current @RobertoJoseph

RobertoJoseph

RobertoJoseph commented on Jan 1, 2025

@RobertoJoseph

It works after updating, thanks sir! @mikehardy

mohammadmas1988

mohammadmas1988 commented on Jan 1, 2025

@mohammadmas1988

I have the same issue after pod install.
version 14.0.8.
react-native version 0.75.3.

mikehardy

mikehardy commented on Jan 1, 2025

@mikehardy
Collaborator

@mohammadmas1988 I expect you will have the same success after updating to current react-native, which is what the new Native Ads feature was built and tested with.

We should support previous react-native versions but I think all of your friendly volunteers here are on holiday so unless someone posts a PR for compatibility, you'll have to upgrade your react-native to get the current react-native-google-mobile-ads version to work, or you'll need to stay on prior versions of react-native-google-mobile-ads.

changed the title [-][🐛] Eas build failure with UnsupportedModulePropertyParserError[/-] [+][🐛] Eas build failure with UnsupportedModulePropertyParserError (workaround: use react-native 0.76+ / expo 52+)[/+] on Jan 1, 2025
pinned this issue on Jan 1, 2025
sandeepdoad

sandeepdoad commented on Jan 1, 2025

@sandeepdoad
mikehardy

mikehardy commented on Jan 1, 2025

@mikehardy
Collaborator

can I had to Upgrade my react-native version to Latest Stable version ?

Please read the comment thread carefully.
Also the title which I updated prior to your comment.

24 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @mikehardy@buraks@faker007@wjaykim@dylancom

      Issue actions

        [🐛] Eas build failure with UnsupportedModulePropertyParserError (workaround: use react-native 0.76+ / expo 52+) · Issue #678 · invertase/react-native-google-mobile-ads