Идея для статьи зародилась после того, как я потратил кучу времени на настройку Fastlane для своего проекта на React Native. Во время настройки, я так и не смог найти публикацию, которая давала бы простую инструкцию по интеграции Fastlane от А до Я. Эта статья должна стать не более чем простой инструкцией по базовой настройке Fastlane под обе платформы IOS и Android.Замечание:Инструкция предполагает, что ваше окружение уже готово к работе с React Native проектами и вы имеете установленные homebrew, ruby, xcode, android studio, созданное приложение в Apple Connect / TestFlight, Google Play и уже загруженна хотя бы одна сборка. настройка окружения и проекта настройка IOS настройка Android Одним скриптом загружать новые билды в TestFlight и Google Play. Перед началом установки зависимостей, необходимо создать пустой репозиторий. Он будет содержать все сертификаты и профили подготовки, необходимые для создания и подписи приложений. Устанавливаем Fastlanesudo gem install fastlane В корне проекте в Gemfile файл добавляем: Также в корне проекта создаем директорию fastlane, а внутри создаем файл Fastfile. Следующим шагом, выполняем командуfastlane match initВо время выполнения команды, нам необходимо будет выбрать storage mode git, а затем ввести ссылку на ранее созданный репозиторий для сертификатов. Итогом этой команды должен являться файла fastlane/Matchfile. Замечание:Если файл не был создан или произошла ошибка, попробуйте установить fastlane с помощью homebrew brew install fastlane , затем повторить этот шаг.  На этом этапе мы обновим .gitignore файл, добавив: А также, добавим два новых скрипта в package.json: Все! C общей настройкой закончили, теперь можно переходить к настройкам IOS и Android.  В fastlane/Fastfile добавляем код специально для платформы IOS, который подписывает, собирает и отправляет билд в TestFlight.  Замечание:В коде необходимо заменить называние схемы и проекта на ваши реальные, их можно легко найти в Xcode. Создаем новый файл в директории fastlane/Appfile, выглядеть он должен так: Замечание: На сколько я понял, itc_team_id необходим только если у вас есть несколько команд в одном акаунте на Apple Connect, если это не так попробуйте вовсе удалить itc_team_id из этого файла.itc_team_id не так просто найти)) Но вот один из вариантов как это сделать:  авторизируемся на сайте https://appstoreconnect.apple.com/   затем переходим на https://appstoreconnect.apple.com/WebObjects/iTunesConnect.woa/ra/user/detail Здесь вы получите JSON файл в котором, по полю "name" необходимо найти нужную вам команду (та в которой у вас создано ваше приложение),  ее contentProviderId и нужно подставить в itc_team_id.  С остальными id в этом файле все понятно. Я думаю, не стоит объяснять как их достать.Теперь необходимо произвести изменения в fastlane/Matchfile: team_id можно найти если на сайте https://appstoreconnect.apple.com/  перейти в настройки (редактирование) профиля,  он будет подписан как ID командыСоздаем последний файл fastlane/.env.default: c FASTLANE_USER и FASTLANE_PASSWORD все понятно - это ваши креды от apple connect. А вот с FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD интереснее: переходим на https://appleid.apple.com/account/manage  авторизируемся и переходим в раздел «Пароли приложений» жмем на плюс и вводим id приложения из Apple Connect нас могут попросить ввести пароль от учетной записи, затем там же в модальном появится пароль, скопируйте его. Это и будет FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD Поздравляю! Базовая настройка fastlane для ios закончена. Можем проверить это, выполнив скриптyarn ios:beta Замечание:Скрипт может попросить придумать и ввести ключевую фразу для Match storage, а также ввести какие либо другие данные для различных подтверждений - сделайте это. Приступаем к настройке Fastlane под Android. Для начала добавляем код для платформы Android (код добавляем ниже уже написанного) в fastlane/Fastfile: Этот код сначала выполняет grable clean, а затем собирает и наконец отправляет билд в Google Play, как билд для внутреннего тестирования. Добавим несколько переменных в fastlane/.env.default: KEY_PASSWORD, KEYSTORE_PASSWORD и KEY_ALIAS - вы указываете когда создаете свой release.keystore файл, он нужен для того чтобы вы могли подписывать и создавать release сборку.Пишем еще пару строк кода в fastlane/Appfile C package_name понятно, это android applicationId. А вот чтобы нам получить api.json, придется поднапрячься и выполнить следующую инструкцию: Откройте консоль Google Play  Нажмите Account Details и обратите внимание на указанный там Developer Account ID Нажмите Setup → API access  Нажмите кнопку Create new service account  Перейдите по ссылке Google Cloud Platform в диалоговом окне, которое откроет новую вкладку/окно Нажмите кнопку CREATE SERVICE ACCOUNT в верхней части Google Cloud Platform Console Убедитесь, что вы находитесь в правильном проекте Google Cloud Platform Console, найдя Developer Account ID из 2-го пункта, в светло-сером тексте, предшествующем .iam.gserviceaccount.com. Если нет, откройте средство выбора на верхней панели навигации и найдите тот, который содержит этот ID Укажите Service account name и нажмите Create. Нажмите Select a role, затем найдите и выберите Service Account User и продолжите. Нажмите кнопку Done Щелкните на кнопку троиточие напротив только что созданной учетной записи Выберите Manage keys Нажмите ADD KEY -> Create New Key Убедитесь, что в качестве типа ключа выбран JSON, и нажмите CREATE. Сохраните файл в проекте, в директории android/app под именем api.json. Вернитесь на вкладку Google Play Console и нажмите DONE, чтобы закрыть диалоговое окно. Нажмите Grant Access для недавно добавленной учетной записи в нижней части экрана (возможно, вам придется нажать Refresh service accounts, прежде чем она появится) Выберите разрешения, которые вы хотели бы иметь для этой учетной записи. Мы рекомендуем Admin (все разрешения), но вы можете вручную установить все флажки и не включать некоторые разрешения Releases, такие как Release to production Нажмите Invite user, чтобы закончить На этом настройка под Android окончена! Теперь мы можем выполнить скрипт yarn android:betaОн соберет и отправит билд в Google Play, на внутреннее тестирование. Мы настроили Fastlane под две платформы IOS и Android в React Native проекте, и теперь можем загружать билды в TestFlight и Google Play с помощью одного скрипта! По большому счету, такая настройка должна работать и на Flutter, потому что представляет из себя простую последовательную настройку под IOS и Android, только в одной директории. Дальнейшими шагами будет являться настройка автоматического инкриминирования версии билда. Это делается нет так сложно, с помощью fastlane плагина versioning. Еще неплохо было бы, настроить ci/cd, например, в gitlab. Замечание:Это мой первый опыт в написании статей. Надеюсь вы нашли ее полезной и она сэкономит вам кучу времени! developer