I’m running a react-native / expo project and I have been unable to install cocoapods since the OS update. I’ve tried to rule out essentially every other possibility (changing the install of cocoapods from homebrew to gem-install, changing my package manager from pnpm to yarn based on this guidance https://github.com/facebook/react-native/issues/36639, running npx expo-doctor and implementing all of the suggestions). There has been no change to my package.json, and no change to my Podfile but install fails with this error every time in a project that was completely stable before the os update
Command `pod install` failed.
└─ Cause: Invalid `Podfile` file: cannot load such file -- /Users/aaronwilson/code/shady-pines-radio-mobile/node_modules/react-native/node_modules/@react-native-community/cli-platform-ios/native_modules.rb
Debugger listening on ws://127.0.0.1:63887/95c74ddc-96c1-4f12-82d7-d10b8ae57211
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
Waiting for the debugger to disconnect....
# from /Users/aaronwilson/code/shady-pines-radio-mobile/ios/Podfile:2
# -------------------------------------------
# require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
> require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
#
# -------------------------------------------
For reference, this is my package.json
{
"name": "shady-pines-radio-mobile",
"main": "expo-router/entry",
"version": "0.0.3",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"test": "jest --watchAll"
},
"jest": {
"preset": "jest-expo"
},
"dependencies": {
"@babel/preset-env": "^7.22.10",
"@expo/metro-runtime": "^2.2.5",
"@expo/vector-icons": "^13.0.0",
"@gorhom/bottom-sheet": "^4",
"@react-native-google-signin/google-signin": "^10.0.1",
"@react-native-masked-view/masked-view": "^0.2.9",
"@react-navigation/bottom-tabs": "^6.5.8",
"@react-navigation/drawer": "^6.6.3",
"@react-navigation/native": "^6.0.2",
"@react-navigation/native-stack": "^6.9.13",
"@react-navigation/stack": "^6.3.17",
"@reduxjs/toolkit": "^1.9.5",
"axios": "^0.27.2",
"date-fns": "^2.30.0",
"expo": "~49.0.7",
"expo-apple-authentication": "~6.1.0",
"expo-constants": "^14.4.2",
"expo-dev-client": "^2.4.6",
"expo-font": "~11.4.0",
"expo-image": "^1.3.2",
"expo-linking": "~5.0.2",
"expo-modules-autolinking": "^1.5.0",
"expo-modules-core": "~1.5.10",
"expo-router": "2.0.0",
"expo-splash-screen": "~0.20.5",
"expo-status-bar": "~1.6.0",
"expo-system-ui": "~2.4.0",
"expo-web-browser": "~12.3.2",
"http": "0.0.1-security",
"lodash": "^4.17.21",
"metro": "^0.76.7",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-native": "0.72.3",
"react-native-dotenv": "^3.4.9",
"react-native-fs": "^2.20.0",
"react-native-gesture-handler": "~2.12.0",
"react-native-onesignal": "^5.0.0",
"react-native-reanimated": "^3.3.0",
"react-native-safe-area-context": "4.6.3",
"react-native-screens": "~3.22.0",
"react-native-track-player": "^3.2.0",
"react-native-vector-icons": "^10.0.0",
"react-native-web": "~0.19.6",
"react-native-webview": "^13.2.2",
"react-redux": "^8.1.2"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0-0",
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
"@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
"@babel/plugin-transform-template-literals": "^7.0.0-0",
"@babel/runtime": "^7.22.10",
"@types/jest": "^29.5.3",
"@types/lodash": "^4.14.197",
"@types/react": "~18.2.20",
"@types/react-native": "^0.72.2",
"@types/react-test-renderer": "^18.0.0",
"@types/webpack-env": "^1.18.1",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"confusing-browser-globals": "^1.0.11",
"eas": "^0.1.0",
"eslint": "^8.47.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^9.0.0",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-import-resolver-node": "^0.3.9",
"eslint-import-resolver-typescript": "^3.6.0",
"eslint-plugin-import": "^2.28.0",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-no-date-parsing": "^1.0.1",
"eslint-plugin-no-relative-import-paths": "^1.5.2",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-react": "^7.33.1",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-react-native": "^4.0.0",
"eslint-plugin-unused-imports": "^3.0.0",
"jest": "^29.2.1",
"jest-expo": "~49.0.0",
"prettier": "^3.0.2",
"react-test-renderer": "18.2.0",
"typescript": "^5.1.3"
},
"overrides": {
"react-refresh": "~0.14.0"
},
"resolutions": {
"react-refresh": "~0.14.0"
},
"private": true,
"pnpm": {
"overrides": {
"semver@>=7.0.0 <7.5.2": ">=7.5.2"
}
}
}
2
Answers
I would try to:
node_modules
, pods folder, maybe pod lock file, and surely try to use yarn while doing that.react-native
, currently the latest is0.72.6
.expo
and its modules.Adding to Alexander Danilov’s answer,
npx expo install --fix
on your app directory to fix potential issuesnpx expo prebuild
to generate ios directories or you could run the app which would generate ios directory as part of its workflow