Что делают ruby-файлы в React Native проекте, сгенерированном утилитой "react-native"?

Только что сгенерировал проект через npx react-native init AwesomeTSProject --template react-native-template-typescript. Expo мне не подходит потому, что насколько мне извесно, этой фреймворк собирает только для Android и iOS, а я собрался запускать приложение на всех поддерживаемых платформах.

Вообще, я стараюсь не пользоваться генераторами проектов по двум причинам:

  1. Много ненужного
  2. Предложенная структура файлов меня как правило не устраивает

Однако методологией 100%-го ручного развёртывания React Native-проекта я пока не владею, а потому приходится чистить и реорганизовывать преложенную структуру файлов.

Первое, что бросается в глаза - это начилие файлов Ruby (.ruby-version, Gemfile, Gemfile.lock). С точки зрения логики, непонятно что эти файлы делают в React Native-проекте - мне что, предлагают серверную часть написать на Ruby?

Ну и второй вопрос - можно ли все эти файлы безопасно удалить.


Ответы (1 шт):

Автор решения: Dmitry

Конкретно о тех файлах, что у вас в вопросе.

Ответ можно найти в документации, описание установки окружения разработки. Для управления пакетами в react-native для Mac используется CocoaPods, который и есть зависим от ruby.

Если после установки заглянуть в Gemfile, то там будет примерно так

source 'https://rubygems.org'

ruby '2.7.4'

gem 'cocoapods', '~> 1.11', '>= 1.11.2'

Это с реального проекта. То есть мы можем увидеть, что ничего более, чем запуск cocoapods там нет.

Без данных файлов все прекрасно работает как в web, так Android. Но чтобы собрать проект под IOS, я использую следующую рутину

cd project/ios
pod install
# или для M1/Silicon
arch -x86_64 pod install

и если убрать указанные файлы, то я получу исключение с ошибкой.

То есть данные файлы используются для менеджмента пакетов, аналог для npm/yarn.

UPD

Например, здесь описано, как работает autolinking (механизм, который обнаруживает нативный код для платформы в библиотеках и использует его) для IOS. Вы можете увидеть, что процесс состоит из двух шагов, один из которых - это добавление зависимостей через CocoaPods.

Но и это еще не все. Я потестил и обнаружил, что в версии react > 0.64, все прекрасно работает без gem-файлов до тех пор пока не понадобятся нативные библиотеки или SDK. Я тестировал с mapbox gl for react-native. Там есть возможность установить через CocoaPods или загрузить вручную SDK. В первом случае понадобились gem, во втором все прекрасно заработало без них.

Резюме

В зависимости от тех пакетов и библиотек, которые вы используете на IOS, вам могут понадобиться ruby файлы

→ Ссылка