Вопрос или проблема
Я работаю над проектом React Native Expo и пытаюсь сгенерировать файлы ios
, необходимые для XCode. Для этого мне нужно запустить npx pod-install ios после выполнения expo prebuild -p ios для генерации файлов. Однако я постоянно получаю следующую ошибку, и, честно говоря, не уверен, что происходит.
Ошибка следующая
npx pod-install ios
Сканирование подов...
/Users/frank/.asdf/installs/ruby/2.6.8/lib/ruby/gems/2.6.0/gems/cocoapods-1.15.2/lib/cocoapods/executable.rb:93: предупреждение: Небезопасный каталог, доступный для записи для всех /Users/frank/node_modules/.bin в PATH, режим 040777
1.15.2
> pod install
Используются модули Expo
[Expo] Включение модульных заголовков для пода ExpoModulesCore
[Expo] Включение модульных заголовков для пода ReactCommon
[Expo] Включение модульных заголовков для пода EXImageLoader
[Expo] Включение модульных заголовков для пода SDWebImageWebPCoder
[Expo] Включение модульных заголовков для пода React-Core
Авто-связь модулей React Native для цели devicemobileapp: RNCAsyncStorage, RNDeviceInfo, RNGestureHandler, RNReanimated, RNScreens, react-native-safe-area-context и react-native-webview
Тип сборки фреймворка — статическая библиотека
[Codegen] Добавление script_phases к React-Codegen.
[Codegen] Генерация ./build/generated/ios/React-Codegen.podspec.json
[Codegen] Анализ /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/package.json
[Codegen] Поиск библиотек с поддержкой codegen в приложении.
[Codegen] Поле "codegenConfig" не определено в package.json. Предполагается, что нет ничего для генерации на уровне приложения.
[Codegen] Поиск библиотек с поддержкой codegen в зависимостях проекта.
[Codegen] Найдена @react-native-async-storage/async-storage
[Codegen] Найден react-native
[Codegen] Найден react-native-gesture-handler
[Codegen] Найден react-native-reanimated
[Codegen] Найден react-native-safe-area-context
[Codegen] Найден react-native-screens
[Codegen] Найден react-native-webview
[Codegen] >>>>> Поиск библиотек с поддержкой codegen в react-native.config.js
[Codegen] Обработка rnasyncstorage
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, macos, tvos, visionos для rnasyncstorage
[Codegen] Обработка FBReactNativeSpec
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Обработка rncore
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Обработка rngesturehandler_codegen
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, macos, tvos, visionos для rngesturehandler_codegen
[Codegen] Обработка rnreanimated
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, macos, tvos, visionos для rnreanimated
[Codegen] Обработка safeareacontext
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, tvos, visionos для safeareacontext
[Codegen] Обработка rnscreens
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, tvos, visionos для rnscreens
[Codegen] Обработка RNCWebViewSpec
[Codegen] Поиск podspec в зависимостях проекта.
[Codegen] Поддерживаемые платформы Apple: ios, macos для RNCWebViewSpec
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/node_modules/react-native/ReactCommon
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Генерация нативного кода для ios
[Codegen] Сгенерированные артефакты: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/ios/build/generated/ios
[Codegen] Создание поставщика компонентов.
[Codegen] Сгенерирован поставщик в: /Users/frank/Development/Work/Testlio/device-verification-mobile-app-agent/node_modules/react-native/React/Fabric
[Codegen] Завершено.
Тип сборки фреймворка — статическая библиотека
[Codegen] Пропускать use_react_native_codegen_discovery.
Анализ зависимостей
Загрузка зависимостей
Установка EXSplashScreen 0.27.6 (была 0.27.5)
Установка Expo 51.0.35 (была 51.0.21)
Установка ExpoFont 12.0.10 (была 12.0.9)
Установка ExpoHead 3.5.23 (была 3.5.18)
Установка ExpoModulesCore 1.12.24 (была 1.12.19)
Генерация проекта Pods
[!] Произошла ошибка во время обработки хука post-install файла Podfile.
[Xcodeproj] Проблема согласованности: нет родителя для объекта Expo.plist: ResourcesBuildPhase, ResourcesBuildPhase
/Users/frank/.asdf/installs/ruby/2.6.8/lib/ruby/gems/2.6.0/gems/xcodeproj-1.24.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb:19:in parent'
/Users/frank/.asdf/installs/ruby/2.6.8/lib/ruby/gems/2.6.0/gems/xcodeproj-1.24.0/lib/xcodeproj/project/object/build_file.rb:77:in ascii_plist_annotation'
Что могло пойти не так?
Мой package.json выглядит следующим образом
{
"name": "mobile-app",
"main": "expo-router/entry",
"version": "1.0.0",
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"test": "jest --detectOpenHandles",
"lint": "eslint '**/*.{js,jsx,ts,tsx}'",
"fix": "eslint --fix '**/*.{js,jsx,ts,tsx}'",
"generate-types": "graphql-codegen --config graphql-codegen.yml",
"app-clip": "expo run:ios --scheme",
"pre-build-ios": "expo prebuild -p ios",
"pre-build-android": "expo prebuild -p android"
},
"dependencies": {
"@apollo/client": "^3.10.8",
"@expo/vector-icons": "^14.0.3",
"@react-native-async-storage/async-storage": "^1.24.0",
"@react-navigation/native": "^6.0.2",
"crypto-js": "^4.2.0",
"expo": "~51.0.35",
"expo-build-properties": "^0.12.5",
"expo-clipboard": "~6.0.3",
"expo-constants": "~16.0.2",
"expo-device": "~6.0.2",
"expo-font": "~12.0.10",
"expo-jwt": "^1.8.0",
"expo-linking": "~6.3.1",
"expo-router": "~3.5.23",
"expo-splash-screen": "~0.27.6",
"expo-status-bar": "~1.12.1",
"expo-system-ui": "~3.0.7",
"expo-web-browser": "~13.0.3",
"graphql": "^15.8.0",
"jest-expo": "~51.0.4",
"pod-install": "^0.2.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-intl": "^6.6.8",
"react-native": "0.74.5",
"react-native-app-clip": "^0.3.1",
"react-native-device-info": "^11.1.0",
"react-native-gesture-handler": "~2.16.1",
"react-native-reanimated": "~3.10.1",
"react-native-safe-area-context": "4.10.5",
"react-native-screens": "3.31.1",
"react-native-web": "~0.19.10",
"react-native-webview": "13.8.6"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/preset-typescript": "^7.24.7",
"@graphql-codegen/cli": "4.0.1",
"@graphql-codegen/introspection": "4.0.0",
"@graphql-codegen/near-operation-file-preset": "^2.5.0",
"@graphql-codegen/typescript": "4.0.1",
"@graphql-codegen/typescript-operations": "4.0.1",
"@graphql-codegen/typescript-react-apollo": "3.3.7",
"@graphql-eslint/eslint-plugin": "^3.20.1",
"@testing-library/jest-native": "^5.4.3",
"@testing-library/react-native": "^12.5.1",
"@types/crypto-js": "^4.2.2",
"@types/jest": "^29.5.12",
"@types/jsonwebtoken": "^9.0.7",
"@types/node": "^20.14.11",
"@types/react": "~18.2.45",
"@types/react-native": "^0.73.0",
"@types/react-test-renderer": "^18.0.7",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-expo": "^7.0.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.36.1",
"eslint-plugin-react-native": "^4.1.0",
"jest": "^29.2.1",
"jest-expo": "~51.0.3",
"prettier": "^3.3.3",
"react-test-renderer": "18.2.0",
"typescript": "~5.3.3"
},
"private": true
}
Я пробовал удалить все пакеты node и переустановить их, но это, похоже, не помогает. Я также пробовал переключиться на yarn, но проблема по-прежнему сохраняется.
Ответ или решение
Ошибка при установке Cocoapods в проекте React Native
Если вы сталкиваетесь с ошибкой при установке Cocoapods в проекте React Native Expo, важно понимать, что это может происходить поразным причинам. На основании описанной вами проблемы, а также кода, который вы предоставили, я предложу несколько шагов для устранения неполадок.
1. Анализ сообщения об ошибке
Ошибка:
[!] An error occurred while processing the post-install hook of the Podfile.
[Xcodeproj] Consistency issue: no parent for object Expo.plist: ResourcesBuildPhase, ResourcesBuildPhase
Это указывает на проблему с файлом Podfile
, в частности, с зависимостями проекта, извлекаемыми при установке Cocoapods. Проблема может возникать из-за неправильной конфигурации или зависимостей, которые конфликтуют друг с другом.
2. Проверка окружения
Убедитесь, что у вас следующее:
-
Ruby: Убедитесь, что вы используете совместимую версию Ruby. Вы можете проверить свою версию, запустив команду:
ruby -v
Попробуйте обновить Ruby через
asdf
или любой другой менеджер версий, если у вас установлена устаревшая версия. -
Cocoapods: Версия Cocoapods также имеет значение. Вы можете обновить Cocoapods с помощью команды:
gem install cocoapods
-
path: Убедитесь, что у вас нет конфликтующих версий Ruby или Cocoapods в вашем
PATH
. Это важный момент, так как конфликтующие версии могут вызывать проблемы.
3. Очистка и повторная установка зависимостей
Иногда старые или поврежденные пакеты могут вызвать данную проблему. Для этого выполните следующие шаги:
-
Удалите папку
node_modules
и файлyarn.lock
илиpackage-lock.json
:rm -rf node_modules rm yarn.lock # или rm package-lock.json в зависимости от вашего менеджера пакетов
-
Установите зависимости снова:
npm install # или yarn install
-
Убедитесь, что у вас также нет устаревших или конфликтующих статей в
Podfile
вашего проекта. -
Перейдите в папку
ios
и выполните следующие команды:cd ios pod deintegrate pod install
4. Настройки в Podfile
Если ошибка сохраняется, попробуйте изменить свой файл Podfile
. Убедитесь, что в нем нет конфликтующих или устаревших записей. Вот образец, который может вам помочь:
platform :ios, '11.0'
target 'YourApp' do
use_frameworks! # или use_modular_headers!
# Подключите зависимости
pod 'ExpoModulesCore', path: '../node_modules/expo-modules-core'
# Добавьте другие поды здесь
# ...
end
5. Ultima Ratio: Переустановка Expo и Cocoapods
Если вышеперечисленные шаги не помогли, попробуйте переустановить Expo и Cocoapods:
-
Убедитесь, что у вас есть последняя версия Expo CLI:
npm install -g expo-cli
-
Переустановите Cocoapods:
sudo gem install cocoapods
Заключение
Следуйте этим шагам, и вы сможете решить проблему с установкой Cocoapods. Если после всех этих действий проблема все еще возникает, рекомендуется проверить официальные репозитории и обсуждения на форумах, так как кто-то другой уже мог столкнуться с аналогичной проблемой и предложить решение.