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

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

Author
Женя, mobile-разработчик
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? Напишите нам — поделимся опытом и поможем с миграцией.
Заполнить форму
Блог

Читайте также

Все материалы
Архитектура FoodTech-приложения на React Native: как собрать стабильный продукт и не утонуть в деталях

Разработка

Архитектура FoodTech-приложения на React Native: как собрать стабильный продукт и не утонуть в деталях

Из чего состоит архитектура типового фудтех-приложения: технологии и частые ошибки

React Native + RxDB: как строить Local-First приложения. Архитектура и примеры

Разработка

React Native + RxDB: как строить Local-First приложения. Архитектура и примеры

В этой статье мы разберём на примере, как можно реализовать local-first мобильное приложение

Создаем Telegram Web App. Часть I: разработка на React Native Web

Разработка

Создаем Telegram Web App. Часть I: разработка на React Native Web

Делимся опытом разработки приложения на React Native для нескольких платформ и мессенджера, а именно – iOS, Android, Web и Telegram.

Интеграция Unity кода в React Native. Часть 2

Разработка

Интеграция Unity кода в React Native. Часть 2

Продолжаем разбирать тему интеграции Unity-проекта в приложение, написанное на React Native

Интеграция Unity кода в React Native

Разработка

Интеграция Unity кода в React Native

Рассмотрим, как использовать Unity в кросс-платформенных мобильных приложениях (iOS и Android). Гайд от эксперта по React Native

Использование технологии iBeacon в React Native

Разработка

Использование технологии iBeacon в React Native

Переходим к более совершенному подходу для работы с маяками, - разработаем нативный модуль на iOS