Azure DevOps не удалось построить новый архиект для iOS в React Native при установке подов.

Вопрос или проблема

У меня уже есть проект на React Native, и я настроил CI/CD для него, используя Azure DevOps. Но теперь, когда я обновился до новой архитектуры 0.76, он не смог выполнить pod install.

Мой скрипт для pod install:
(У меня уже есть скрипт для bundle install в этом файле)

- script: |
      export RUBY_THREAD_VM_STACK_SIZE=1000000
      export RCT_NEW_ARCH_ENABLED=1
      bundle exec pod install
    displayName: 'iOS | Установка пакетов CocoaPods с новой архитектурой'
    workingDirectory: '$(Build.SourcesDirectory)/ios'
    condition: ne(variables['cache_pods_restored'], 'true')

И ошибка:

bundler: не удалось загрузить команду: pod (/Users/runner/work/1/s/vendor/bundle/ruby/3.3.0/bin/pod)
SystemStackError: слишком глубокий уровень стека
  /usr/local/lib/ruby/site_ruby/3.3.0/rubygems/stub_specification.rb:230:in `loaded_spec'
  /usr/local/lib/ruby/site_ruby/3.3.0/rubygems/stub_specification.rb:186:in `spec'

Я смог собрать приложение на моем Mac, но не смог собрать его на AzureDevOps.

Можете помочь мне?

  • activesupport 7.0.8.6
  • ruby 3.3.0
  • algoliasearch 1.27.5
  • cocoapods-core 1.14.3

Ответ или решение

Судя по вашему описанию, вы столкнулись с проблемой при выполнении команды pod install после обновления проекта React Native до новой архитектуры (New Architecture) версии 0.76. Ошибка SystemStackError: stack level too deep указывает на возможные проблемы с зависимостями или конфигурацией вашего Ruby-окружения на Azure DevOps.

1. Анализ проблемы

Прежде всего, ошибка "stack level too deep" часто связана с рекурсивными вызовами методов, что может происходить в результате неправильной инициализации библиотек или конфликтов зависимостей. В вашем случае это может быть связано с версией Ruby, установленной на вашем CI/CD сервере Azure DevOps, или с несовместимостью между вашими Ruby гемами.

На основании версии вашего Ruby (3.3.0) и Bundler (не указана, но предположим, что она последняя), а также указанных гемов (ActiveSupport 7.0.8.6, cocoapods-core 1.14.3) можно сделать следующее:

2. Варианты решения проблемы

Проверка и обновление зависимостей

  1. Убедитесь в совместимости гемов: Проверьте документацию для CocoaPods и других гемов на предмет совместимости с вашей версией Ruby. Возможно, вам потребуется понизить версию Ruby или обновить версии гемов.

  2. Очистите кэш: В некоторых случаях конфликтующие или устаревшие данные в кэше могут вызывать проблемы. Добавьте в ваш скрипт команды для очистки кэша:

    pod cache clean --all

Оптимизация скрипта

Ваш скрипт для установки CocoaPods выглядит корректным, однако вы можете попробовать оптимизировать его:

- script: |
      export RUBY_THREAD_VM_STACK_SIZE=1000000
      export RCT_NEW_ARCH_ENABLED=1
      gem install bundler # Обновляем Bundler до последней версии
      bundle install # Убедитесь, что все гемы установлены
      bundle exec pod install
    displayName: 'iOS | Установка пакетов CocoaPods с новой архитектурой'
    workingDirectory: '$(Build.SourcesDirectory)/ios'
    condition: ne(variables['cache_pods_restored'], 'true')

Локальные тесты

Поскольку вы смогли успешно выполнить сборку на локальной машине, рекомендуется:

  1. Убедитесь, что локальное окружение (Ruby, Bundler, CocoaPods и другие зависимости) совпадает с CI/CD окружением Azure DevOps.
  2. Если возможно, создайте Docker-образ с вашими зависимостями и используйте его в качестве агента сборки.

Логирование и диагностика

  1. Добавьте в скрипт логи для более детального отслеживания процесса:
    set -x # для отображения выполняемых команд
  2. Отслеживайте вывод команды pod install, чтобы найти возможные конфликты в зависимостях.

Обновление окружения

Если проблема сохраняется, возможно, стоит рассмотреть:

  • Обновление версии Ruby на CI/CD сервере.
  • Изменение конфигурации агента Azure DevOps на использование более стабильной или совместимой версии Ruby.

3. Заключение

Устранение подобных проблем может потребовать терпения и внимательности. Сфокусируйтесь на совместимости ваших зависимостей и корректной конфигурации окружения. Если после всех этих шагов ваша проблема не решится, подумайте о создании вопроса на специализированных форумах, таких как Stack Overflow, где сообщество может предложить дополнительные решения.

Оцените материал
Добавить комментарий

Капча загружается...