Назад в блог
Разработка

Как мы обновили библиотеки под новую архитектуру React Native

8 минут
Preview
Содержание

Начиная с React Native 0.82, старая архитектура на основе Bridge перестала существовать. Все библиотеки с нативными модулями, которые не обновились, оказались несовместимы с актуальными версиями фреймворка.

Наши собственные библиотеки активно использовались в нескольких проектах, которые уже мигрировали на новую архитектуру. Без обновления библиотек их дальнейшее развитие было бы заблокировано. Выбор был очевиден — пора действовать.

С чего начали

На миграцию выделили два дня. Первым делом изучили опыт других open source библиотек и выбрали инструментарий. Лучшим решением оказался react-native-builder-bob — он создаёт готовый boilerplate с поддержкой TurboModules и Fabric, избавляя от необходимости настраивать инфраструктуру с нуля.

Переход на современные языки

Нативный код библиотек был написан на Java и Objective-C. Для новой архитектуры мы решили перейти на Kotlin и Swift — более современные и удобные языки.

Миграция с Java на Kotlin прошла гладко. А вот со Swift возникла интересная проблема, которая проявилась не сразу.

Проблема с use_frameworks! :static

Когда Swift-код используется в React Native модуле, компилятор автоматически генерирует Objective-C bridging header — специальный файл, который позволяет вызывать Swift из Objective-C.

Всё работало отлично до тех пор, пока библиотеку не попробовали интегрировать в проект с настройкой use_frameworks! :static в CocoaPods. В этом режиме путь к заголовочному файлу меняется, и библиотека переставала собираться.

Решение: добавили условную проверку доступности заголовка, которая автоматически выбирает правильный путь в зависимости от конфигурации проекта.
#if __has_include(<react_native_wallet_manager/react_native_wallet_manager-Swift.h>)

  #import <react_native_wallet_manager/react_native_wallet_manager-Swift.h>

#else

  #import "react_native_wallet_manager-Swift.h"

#endif

Что получили

  • Библиотеки работают с актуальными версиями React Native
  • Современный код на Kotlin и Swift вместо Java и Objective-C
  • Совместимость с разными конфигурациями CocoaPods
  • Проекты разблокированы и продолжают развиваться

Выводы

Миграция на новую архитектуру React Native — это не просто обновление версии. Это переход на новые инструменты, языки и подходы. Главное — не откладывать, если ваши проекты зависят от библиотек на старой архитектуре.

Хотите обсудить ваш проект на React Native? Напишите нам — поделимся опытом и поможем с миграцией.
Заполнить форму
Читайте также