Skip to content

EAS build failed the error Execution failed for task ':app:createReleaseUpdatesResources'. #3245

@MOHAMED-LAAGUILI

Description

@MOHAMED-LAAGUILI

Build/Submit details page URL

https://expo.dev/accounts/mohamed-laaguili/projects/time-tracker/builds/8a635606-c2a3-4093-bef6-48e9ad3c7df9

Summary

app.config.ts

import type { ConfigContext, ExpoConfig } from '@expo/config';
import type { AppIconBadgeConfig } from 'app-icon-badge/types';

import { ClientEnv, Env } from './env';

const appIconBadgeConfig: AppIconBadgeConfig = {
  enabled: Env.APP_ENV !== 'production',
  badges: [
    {
      text: Env.APP_ENV,
      type: 'banner',
      color: 'white',
    },
    {
      text: Env.VERSION.toString(),
      type: 'ribbon',
      color: 'white',
    },
  ],
};

const getBaseConfig = (config: any) => ({
  ...config,
  name: Env.NAME,
  description: `${Env.NAME} Mobile App for projects time tracking & time management`,
  owner: Env.EXPO_ACCOUNT_OWNER,
  scheme: Env.SCHEME,
  slug: Env.SLUG,
  version: Env.VERSION.toString(),
  orientation: 'portrait',
  icon: './assets/icon-new.png',
  userInterfaceStyle: 'automatic',
  newArchEnabled: true,
  jsEngine: 'hermes',
  updates: {
    url: `https://u.expo.dev/${Env.EAS_PROJECT_ID}`,
    fallbackToCacheTimeout: 0,
  },
  runtimeVersion: {
    policy: 'appVersion',
  },
  experiments: {
    typedRoutes: true,
    turboModules: true,
  },
  assetBundlePatterns: ['**/*'],
});

const getPlatformConfig = () => ({
  ios: {
    supportsTablet: true,
    bundleIdentifier: Env.BUNDLE_ID,
    infoPlist: {
      ITSAppUsesNonExemptEncryption: false,
    },
  },
  android: {
    adaptiveIcon: {
      foregroundImage: './assets/adaptive-icon-new.png',
      backgroundColor: '#FFFFFF',
    },
    package: Env.PACKAGE,
  },
  web: {
    favicon: './assets/favicon-new.png',
    bundler: 'metro',
  },
});

const getPlugins = () => [
  [
    'expo-splash-screen',
    {
      backgroundColor: '#FFFFFF',
      image: './assets/splash-icon-new.png',
      imageWidth: 150,
      dark: {
        image: './assets/splash-icon-new.png',
        backgroundColor: '#000000',
      },
    },
  ],
  [
    'expo-font',
    {
      fonts: ['./assets/fonts/Inter.ttf'],
    },
  ],
  'expo-localization',
  'expo-router',
  ['app-icon-badge', appIconBadgeConfig],
  'react-native-edge-to-edge',
];

export default ({ config }: ConfigContext): ExpoConfig => ({
  ...getBaseConfig(config),
  ...getPlatformConfig(),
  plugins: getPlugins(),
  extra: {
    ...ClientEnv,
    eas: {
      projectId: Env.EAS_PROJECT_ID,
    },
  },
});

eas.json

{
  "cli": {
    "version": ">= 3.8.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true,
      "channel": "production",
      "distribution": "store",
      "pnpm": "9.12.3",
      "ios": {
        "image": "latest"
      },
      "android": {
        "buildType": "app-bundle",
        "image": "latest"
      },
      "env": {
        "EXPO_NO_DOTENV": "1",
        "APP_ENV": "production",
        "FLIPPER_DISABLE": "1"
      }
    },
    "staging": {
      "channel": "staging",
      "distribution": "internal",
      "pnpm": "9.12.3",
      "ios": {
        "image": "latest"
      },
      "android": {
        "gradleCommand": "assembleRelease",
        "buildType": "apk",
        "image": "latest"
      },
      "env": {
        "APP_ENV": "staging",
        "EXPO_NO_DOTENV": "1",
        "FLIPPER_DISABLE": "1"
      }
    },
    "development": {
      "autoIncrement": true,
      "developmentClient": true,
      "distribution": "internal",
      "pnpm": "9.12.3",
      "ios": {
        "image": "latest"
      },
      "android": {
        "image": "latest"
      },
      "env": {
        "APP_ENV": "development",
        "EXPO_NO_DOTENV": "1"
      }
    },
    "simulator": {
      "pnpm": "9.12.3",
      "ios": {
        "simulator": true,
        "image": "latest"
      },
      "android": {
        "image": "latest"
      },
      "env": {
        "APP_ENV": "development",
        "EXPO_NO_DOTENV": "1"
      }
    }
  },
  "submit": {
    "production": {}
  }
}

babel.config.js

module.exports = function (api) {
  api.cache(true);
  return {
    presets: [
      ['babel-preset-expo', { jsxImportSource: 'nativewind' }],
      'nativewind/babel',
    ],
    plugins: [
      // ⚙️ Babel proposal transforms
      ['@babel/plugin-proposal-decorators', { legacy: true }],
      ['@babel/plugin-transform-class-properties', { loose: true }],
      ['@babel/plugin-transform-private-methods', { loose: true }],
      ['@babel/plugin-transform-private-property-in-object', { loose: true }],
      ['@babel/plugin-transform-export-namespace-from'],

      // 🧭 Module resolution aliases
      [
        'module-resolver',
        {
          root: ['./'],
          alias: {
            '@': './src',
            '@env': './src/lib/env.js',
            '@data': './src/data/*',
            '@types': './src/types/*',
            '@lib': './src/lib/*',
            '@components': './src/components/*',
            '@api': './src/api/*',
            '@app': './src/app/*',
            '@translations': './src/translations/*',
            '@context': './src/context/*',
            '@assets': './assets',
          },
          extensions: [
            '.ios.ts',
            '.android.ts',
            '.ts',
            '.ios.tsx',
            '.android.tsx',
            '.tsx',
            '.jsx',
            '.js',
            '.json',
          ],
        },
      ],

      // ⚡ Animation & Worklet plugins (aliased to avoid duplication)
      ['react-native-worklets/plugin', {}, 'worklets'],
      'react-native-reanimated/plugin',
    ],
  };
};

package.json

{
  "name": "timetracker",
  "version": "1.0.0",
  "private": true,
  "packageManager": "[email protected]",
  "main": "expo-router/entry",
  "scripts": {
    "start": "cross-env EXPO_NO_DOTENV=1 expo start -c",
    "prebuild": "cross-env EXPO_NO_DOTENV=1 pnpm expo prebuild  --clean",
    "android": "cross-env EXPO_NO_DOTENV=1 expo run:android",
    "ios": "cross-env EXPO_NO_DOTENV=1 expo run:ios",
    "web": "cross-env EXPO_NO_DOTENV=1 expo start --web",
    "xcode": "xed -b ios",
    "doctor": "npx expo-doctor@latest --verbose",
    "preinstall": "npx only-allow pnpm",
    "start:staging": "cross-env APP_ENV=staging pnpm run start",
    "prebuild:staging": "cross-env APP_ENV=staging pnpm run prebuild  --clean",
    "prebuild:development": "cross-env APP_ENV=development pnpm run prebuild  --clean",
    "android:staging": "cross-env APP_ENV=staging pnpm run android",
    "ios:staging": "cross-env APP_ENV=staging pnpm run ios",
    "start:production": "cross-env APP_ENV=production pnpm run start",
    "prebuild:production": "cross-env APP_ENV=production pnpm run prebuild  --clean",
    "android:production": "cross-env APP_ENV=production pnpm run android",
    "ios:production": "cross-env APP_ENV=production pnpm run ios",
    "build:development:ios": "cross-env APP_ENV=development EXPO_NO_DOTENV=1 eas build --profile development --platform ios",
    "build:development:android": "cross-env APP_ENV=development EXPO_NO_DOTENV=1 eas build --profile development --platform android --clear-cache",
    "build:staging:ios": "cross-env APP_ENV=staging EXPO_NO_DOTENV=1 eas build --profile staging --platform ios",
    "build:staging:android": "cross-env APP_ENV=staging EXPO_NO_DOTENV=1 eas build --profile staging --platform android --clear-cache",
    "build:production:ios": "cross-env APP_ENV=production EXPO_NO_DOTENV=1 eas build --profile production --platform ios",
    "build:production:android": "cross-env APP_ENV=production EXPO_NO_DOTENV=1 eas build --profile production --platform android --clear-cache",
    "app-release": "cross-env SKIP_BRANCH_PROTECTION=true np --no-publish --no-cleanup --no-release-draft",
    "version": "pnpm run prebuild && git add .",
    "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
    "type-check": "tsc  --noemit",
    "lint:translations": "eslint ./src/translations/ --fix --ext .json  ",
    "test": "jest",
    "check-all": "pnpm run lint && pnpm run type-check && pnpm run lint:translations && pnpm run test",
    "test:ci": "pnpm run test --coverage",
    "test:watch": "pnpm run test --watch",
    "install-maestro": "curl -Ls 'https://get.maestro.mobile.dev' | bash",
    "e2e-test": "maestro test .maestro/ -e APP_ID=com.timetracker.development"
  },
  "browser": {
    "better-sqlite3": false,
    "@nozbe/watermelondb/adapters/sqlite": false
  },
  "lint-staged": {
    "package.json": [
      "pnpm install --lockfile-only",
      "git add pnpm-lock.yaml"
    ],
    "pnpm-lock.yaml": [
      "git add pnpm-lock.yaml"
    ]
  },
  "dependencies": {
    "@expo/metro-runtime": "^6.1.2",
    "@expo/next-adapter": "^6.0.0",
    "@expo/vector-icons": "^15.0.3",
    "@gorhom/bottom-sheet": "5.2.6",
    "@gorhom/portal": "^1.0.14",
    "@hookform/resolvers": "^3.9.0",
    "@nozbe/watermelondb": "^0.28.0",
    "@react-native-community/netinfo": "11.4.1",
    "@react-navigation/drawer": "^7.3.9",
    "@react-navigation/native": "^7.1.6",
    "@shopify/flash-list": "2.0.2",
    "@shopify/react-native-skia": "2.2.12",
    "@tanstack/react-query": "^5.85.5",
    "@tanstack/react-table": "^8.21.3",
    "@wuba/react-native-echarts": "1.1.1-alpha.1",
    "app-icon-badge": "^0.1.2",
    "axios": "^1.7.5",
    "babel-preset-expo": "^54.0.6",
    "better-sqlite3": "^12.2.0",
    "clsx": "^2.1.1",
    "expo": "^54.0.21",
    "expo-build-properties": "^1.0.9",
    "expo-constants": "~18.0.9",
    "expo-crypto": "^15.0.7",
    "expo-dev-client": "~6.0.16",
    "expo-file-system": "~19.0.17",
    "expo-font": "~14.0.9",
    "expo-image": "~3.0.10",
    "expo-linear-gradient": "~15.0.7",
    "expo-linking": "~8.0.8",
    "expo-localization": "~17.0.7",
    "expo-router": "~6.0.14",
    "expo-splash-screen": "~31.0.10",
    "expo-sqlite": "^16.0.8",
    "expo-status-bar": "~3.0.8",
    "expo-system-ui": "~6.0.7",
    "expo-updates": "~29.0.12",
    "i18next": "^23.14.0",
    "jimp": "^1.6.0",
    "jimp-compact": "0.16.1-2",
    "lodash.memoize": "^4.1.2",
    "lottie-react-native": "7.3.4",
    "moti": "^0.29.0",
    "nativewind": "^4.1.23",
    "next": "^15.5.0",
    "prettier-plugin-tailwindcss": "^0.5.14",
    "react": "19.1.0",
    "react-dom": "19.1.0",
    "react-error-boundary": "^4.0.13",
    "react-hook-form": "^7.53.0",
    "react-i18next": "^15.0.1",
    "react-icons": "^5.5.0",
    "react-native": "0.81.5",
    "react-native-chart-kit": "^6.12.0",
    "react-native-css-interop": "^0.2.1",
    "react-native-datatable-component": "^2.1.14",
    "react-native-edge-to-edge": "1.6.0",
    "react-native-flash-message": "^0.4.2",
    "react-native-gesture-handler": "~2.28.0",
    "react-native-gifted-charts": "^1.4.64",
    "react-native-keyboard-controller": "^1.18.5",
    "react-native-mmkv": "4.0.0",
    "react-native-nitro-modules": "^0.31.0",
    "react-native-paper": "^5.14.5",
    "react-native-reanimated": "~4.1.3",
    "react-native-reanimated-table": "^0.0.2",
    "react-native-restart": "0.0.27",
    "react-native-safe-area-context": "5.6.1",
    "react-native-screens": "~4.16.0",
    "react-native-svg": "15.12.1",
    "react-native-tableview-simple": "^4.4.1",
    "react-native-url-polyfill": "^2.0.0",
    "react-native-worklets": "0.5.1",
    "react-query-kit": "^3.3.0",
    "tailwind-merge": "^3.3.1",
    "tailwind-rn": "^4.2.0",
    "tailwind-variants": "^0.2.1",
    "uuid": "^13.0.0",
    "zod": "^3.23.8",
    "zustand": "^5.0.5"
  },
  "devDependencies": {
    "@babel/core": "^7.26.0",
    "@babel/helper-validator-identifier": "^7.27.1",
    "@babel/plugin-transform-export-namespace-from": "^7.27.1",
    "@commitlint/cli": "^19.2.2",
    "@commitlint/config-conventional": "^19.2.2",
    "@dev-plugins/react-query": "^0.0.7",
    "@eslint/eslintrc": "^3.3.1",
    "@eslint/js": "^9.28.0",
    "@expo/config": "~12.0.10",
    "@react-native-community/cli": "latest",
    "@testing-library/jest-dom": "^6.5.0",
    "@testing-library/react-native": "^12.7.2",
    "@types/i18n-js": "^3.8.9",
    "@types/invariant": "^2.2.37",
    "@types/jest": "^29.5.12",
    "@types/lodash.memoize": "^4.1.9",
    "@types/react": "~19.1.17",
    "@typescript-eslint/eslint-plugin": "^8.34.0",
    "@typescript-eslint/parser": "^8.34.0",
    "babel-plugin-module-resolver": "^5.0.2",
    "cross-env": "^7.0.3",
    "dotenv": "^16.4.5",
    "eslint": "^9.28.0",
    "eslint-config-expo": "^10.0.0",
    "eslint-config-prettier": "^10.1.5",
    "eslint-import-resolver-typescript": "^4.4.3",
    "eslint-plugin-i18n-json": "^4.0.1",
    "eslint-plugin-import": "^2.31.0",
    "eslint-plugin-prettier": "^5.4.1",
    "eslint-plugin-react-compiler": "19.1.0-rc.2",
    "eslint-plugin-simple-import-sort": "^12.1.1",
    "eslint-plugin-tailwindcss": "^3.18.0",
    "eslint-plugin-testing-library": "^7.5.2",
    "eslint-plugin-unicorn": "^59.0.1",
    "eslint-plugin-unused-imports": "^4.1.4",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^29.7.0",
    "jest-expo": "~54.0.12",
    "jest-junit": "^16.0.0",
    "lint-staged": "^15.2.9",
    "np": "^10.0.7",
    "prettier": "^3.3.3",
    "react-native-web": "0.21.2",
    "tailwindcss": "3.4.4",
    "ts-jest": "^29.1.2",
    "typescript": "~5.9.3",
    "typescript-eslint": "^8.34.0"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Khalid-Ihya/time-tracker.git"
  },
  "expo": {
    "doctor": {
      "reactNativeDirectoryCheck": {
        "listUnknownPackages": false,
        "exclude": [
          "react-native-restart",
          "@nozbe/watermelondb"
        ]
      }
    },
    "install": {
      "exclude": [
        "eslint-config-expo"
      ]
    }
  },
  "osMetadata": {
    "initVersion": "8.0.0"
  }
}

Managed or bare?

im new for reak idk

Environment

staging

Error output

No response

Reproducible demo or steps to reproduce from a blank project

.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs reviewIssue is ready to be reviewed by a maintainer

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions